Como forçar o Logstash a reparar um arquivo?

Eu instalei o Logstash para analisar arquivos do apache. Demorei bastante q para obter as configurações certas e sempre tentei em logs reais. Eu notei (como a documentação diz) que o logstash “lembra” onde estava em um arquivo. Agora minhas colocações estão OK e eu gostaria que o Logstash “esquecesse”. Isso parece mais difícil do que eu. Eu já fiz o seguinte:

Ainda Logstash não esquece e analisar apenas arquivos “frescos” na pasta onde os logs são

Alguma ideia?

Por padrão, logstash escreve que a última posição foi para um arquivo de log que normalmente reside em $HOME/.sincedb . O Logstash pode ser enganado acreditando que ele nunca analisou o arquivo de log especificando /dev/null como sincedb_path .

Aqui a parte da documentação Input File .

Onde gravar o database desde (controla a posição atual dos arquivos de log monitorados). O padrão é o valor da variável de ambiente “$ SINCEDB_PATH” ou “$ HOME / .sincedb”.

Exemplo de configuração

 input { file { path => "/tmp/logfile_to_analyse" start_position => "beginning" sincedb_path => "/dev/null" } } 

O arquivo de plug-in armazena o histórico de “tailing” no arquivo sincedb, padrão: em $ HOME / .sincedb *, veja http://logstash.net/docs/1.3.3/inputs/file#sincedb_path

O arquivo db contém a linha como:

 [inode] [major device number] [minor device number] [byte offset] 

Então, se você quiser analisar novamente um arquivo completo, você precisa:

  • apagar arquivos sindedb
  • OU apenas exclua a linha correspondente no arquivo sincedb, verifique o número do inode antes do seu arquivo ( ls -i yourFile | awk '{print $1}' )
  • E reinicie o Logstash

Com a chave start_position => “começando, o Logstash analisará todo o arquivo.

Exemplo de um arquivo sincedb:

O Logstash manterá o registro em $ HOME / .sincedb_ *. Você pode excluir todos os .sincedb e reiniciar o logstash, o Logstash irá fazer nova análise do arquivo.

Combinando todas as respostas, adivinhe que esta é a melhor maneira de analisar os arquivos. Eu fiz o mesmo para o meu teste.

 input { file { path => "/tmp/access_log" start_position => beginning sincedb_path => "/dev/null" ignore_older => 0 } } 

Para um teste rápido, em vez de ignore_older , você também pode touch /tmp/access_log para alterar o registro de data e hora do arquivo.

Se você estiver usando o logstash-forwarder, verifique sua casa para o arquivo .logstash-forwarder :

 { "/var/log/messages": { "source": "/var/log/messages", "offset": 43715, "inode": 12967, "device": 51776 } } 

Depois de deletar $ HOME / .sincedb_ * ainda não estava ingerindo dados para mim.

Depois de tentar um monte de coisas eu removi todos, mas o arquivo .conf principal do /etc/logstash/conf.d e reiniciei o logstash, e tudo funcionou. Eu só posso supor que havia algo em um dos arquivos .conf que o logstash estava silenciosamente pendurado.

Realmente reparando cada vez é muito caro se o arquivo tiver grandes dados nele. Então você precisa ter cuidado antes de fazer isso. Se quisermos forçá-lo a repetir novamente, configure o parâmetro dentro do bloco de input

 sincedb_path => "/dev/null" 

Essa opção não armazenará o arquivo .sincedb e o logstash será reparado a cada vez. Mas se você quiser repetir ocasionalmente não cada vez, então o que você pode fazer é apagar manualmente o caminho .sinceDb que é criado na análise do arquivo. Geralmente, ele está presente no diretório inicial como um arquivo oculto se você não for um usuário root em um diretório raiz. Você também pode definir o sincedb_path para algum outro local para rastrear este arquivo facilmente.

 sincedb_path => "/home/shubham/sinceDB/productsSince.db" 

Se você quiser evitar mexer com as opções do logstash, descobri que renomear ou remover o arquivo de log existente e criar um novo arquivo a partir do conteúdo antigo do arquivo fará com que o logstash seja re-indexado.

Eu encontrei no meu diretório home, mas depois de excluí-lo, o logstash se recusou a re-pegar os arquivos de log existentes. A maneira que eu comecei a trabalhar foi para adicionar

 sincedb_path => "/opt/elk/sincedb/" 

para o meu plugin de arquivo. Eu acho que para redefinir a cada vez, basta alterar o caminho de sincedb_path

logstash version 5 novo diretório está em

 /plugins/inputs/file 

definição de path.data está em logstash.yml