Gostaríamos de alimentar logs de CDN em Graphite e agregar números encontrados lá (taxa de diferentes códigos de status HTTP, tamanhos médios de resposta, taxa média de acertos de cache etc.)
No entanto, os logs são enviados para nós apenas ocasionalmente e algumas vezes até fora de ordem - de vez em quando, um log matinal pode ser carregado à noite, horas depois que o log da tarde foi carregado e processado. Além disso, como o CDN (obviamente) possui vários servidores e data centers, diferentes logs podem cobrir períodos sobrepostos .
Isso significa que qualquer agregador precisa manter o acesso a todas as estatísticas anteriores para poder aumentar as agregações ao processar um novo log...
O que - se alguma coisa - pode fazer isso? E como configuro o logstash para alimentá-lo? Obrigado!
Este é um problema complexo, como você bem sabe. Você marcou o Logstash em sua pergunta, então vou assumir que você tem isso.
A ingestão de logs é o que o Logstash faz. Ele tem um
file {}
plugin de entrada apenas para isso:E um
csv {}
filtro para facilitar a ingestão de dados CSV.Se você não tiver dados CSV, talvez essas linhas estejam em um formato Apache de aparência bastante normal, nem tudo está perdido. Você provavelmente precisará gastar tempo com grok. Isso é coisa própria.
A ordenação de datas é um problema menor, desde que você tome cuidado para preservar seus carimbos de data e hora e não use statsd que manifestamente não os preserva. Se você ainda não fez isso, o Logstash pode pegar a data no arquivo de log e torná-la o carimbo de data/hora do evento.
Isso obtém o carimbo de data/hora da linha de log como o carimbo de data/hora do evento. Legal, agora para transformar isso em algo útil.
O armazenamento de dados de estoque para o Logstash é elasticsearch , que a Elastic (a empresa) está ocupada tentando faturar um armazenamento de dados de série de tempo tão bom quanto as ferramentas criadas especificamente como InfluxDB ou OpenTSDB. Pode ser, embora, na minha experiência, os construídos com propósito tenham um desempenho melhor. Tudo isso pode, supondo que você os insira corretamente, armazenar eventos fora de ordem na ordem correta para que consultas posteriores possam assimilar as novas informações.
A
graphite {}
saída do Logstash preservará os carimbos de data e hora, o que permite que você use grafite como seu armazenamento de apoio para isso, se desejar.Os plugins
influxdb {}
eopentsdb {}
saída existem e irão colocar seus dados em um verdadeiro banco de dados de séries temporais.A partir daí, a agregação/resumo para dados de curto prazo (alguns dias da sua explicação) deve ser feita no momento da consulta. Uma ferramenta como o grafana pode fazer frente a vários desses datastores e facilitar a exibição. Depois de ultrapassar sua zona de risco para chegada de logs, você pode executar um processo ETL posterior para gerar agregações/resumos no banco de dados com base no conjunto de dados completo . E, em seguida, limpe os logs de detalhes completos conforme necessário.
Resumindo, o método:
date {}
filtro para puxar o carimbo de data/hora do log para o carimbo de data/hora do evento.