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 registros é o que o Logstash faz. Ele tem um plug-in de entrada file {}
apenas para isso:
input {
file {
path => [ '/opt/export/cdn_logs/*.csv'
tags => [ 'cdnlogs' ]
}
}
E um filtro csv {}
para facilitar a ingestão de dados CSV .
filter {
if 'cdnlogs' in [tags] {
csv {
source => "message"
columns => [
'cdndate',
'host_server',
[...]
'response_time' ]
}
}
}
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. Essa é a sua própria coisa.
A ordenação de datas é um problema menor, desde que você cuide para preservar seus timestamps 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á-lo o carimbo de data / hora do evento.
filter {
date {
match => [ "cdndate", "ISO8601" ]
}
}
Isso obtém o carimbo de data / hora da linha de log como o registro de data e hora do evento. Legal, agora para colocar isso em algo útil.
O armazenamento de dados de ações do Logstash é elasticsearch , que a Elastic (a empresa ) está ocupado tentando faturar tão bem quanto um datastore de timeseries como as ferramentas construídas propositadamente como InfluxDB ou OpenTSDB. Pode ser, embora na minha experiência, os que são feitos sob medida tenham um desempenho melhor. Tudo isso pode, desde que você os insira corretamente, armazenar eventos fora de ordem na ordem correta para que as consultas posteriores possam assimilar as novas informações.
A saída graphite {}
do Logstash preservará os timestamps, o que permite que você use o grafite como seu armazenamento de apoio para isso, se desejar.
Os plugins de saída influxdb {}
e opentsdb {}
existem e colocarão seus dados em um verdadeiro banco de dados de séries temporais.
A partir daí, a agregação / sumarização de dados de curto prazo (alguns dias da sua explicação) deve ser feita no momento da consulta. Uma ferramenta como grafana pode fazer frente a vários desses datastores e facilita a exibição. Depois de ultrapassar a zona de risco para a chegada dos logs, você poderá 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 detalhados conforme necessário.
Em suma, o método:
- Inibe arquivos usando o Logstash.
- Aproveita a filtragem para extrair os campos dos arquivos de log CDN.
- Usa o filtro
date {}
para extrair o registro de data e hora do registro no timestamp do evento. - Exporta os dados para algo (elástico, grafite ou algum outro banco de dados de séries temporais)
- As ferramentas de exibição usam agregação em tempo real consultas para exibir dados aos consumidores, pelo menos para dados de curto prazo.
- Após um período, provavelmente um par de dias, um processo automatizado com script ou outro gera agregações e insere-as no armazenamento de dados.
- Depois de mais tempo, os dados de resolução total são eliminados, deixando apenas os dados agregados.