Eu instalei o Logstash para analisar arquivos apache. Levei muito tempo para acertar as configurações e sempre tentei em registros reais. Percebi (como diz a documentação) que o logstash "se lembra" de onde estava em um arquivo. Agora minhas configurações estão OK e eu gostaria que Logstash "esquecesse". Parece mais difícil do que eu. Eu já fiz o seguinte:
usava:
start_position => "beginning"
excluiu a pasta "data" completa de elastissearch (e parou primeiro)
olhou para quais arquivos foram abertos pelo logstash
lsof -p PID
e excluiu tudo o que era promissor (no meu caso/tmp/jffi*.tmp
)
Mesmo assim, o Logstash não se esquece e analisa apenas os arquivos "novos" na pasta onde os logs estão
Alguma ideia?
/opt/logstash/data/plugins/inputs/file
Respostas:
Por padrão, o logstash grava a última posição em um arquivo de log que geralmente reside em
$HOME/.sincedb
. Logstash pode ser enganado ao acreditar que nunca analisou o arquivo de log especificando/dev/null
comosincedb_path
.Aqui está a parte da documentação Arquivo de entrada .
Exemplo de configuração
fonte
sincedb_path => "NUL"
para obter o mesmo efeito. Detalhe aquiingnore_older => 0
para que o logstash os leve independentemente da data. Por padrão, se os arquivos forem mais antigos, 24h será ignorado.ignore_older => 0
funciona no logstash! Eu fui atolado pelo mesmo problema que o questionador. Parece ser um achado não óbvio! (pesquisando "ignore_older" e "logstash" apenas abre páginas no filebeat, não consegui encontrar nenhum traço de como lidar com isso no logstash)ignore_older
em sua configuração de filebeat, filbeat é forçado a ler todo o arquivo novamente elastic.co/guide/en/beats/filebeat/current/…O arquivo de plugin armazena o histórico de "cauda" no arquivo sincedb, padrão: sob $ HOME / .sincedb *, consulte http://logstash.net/docs/1.3.3/inputs/file#sincedb_path
A linha desde que o arquivo db contém se parece com:
Portanto, se quiser analisar novamente um arquivo completo, você precisa:
ls -i yourFile | awk '{print $1}'
)Com a chave
start_position => "beginning"
, o Logstash analisará todo o arquivo.Exemplo de arquivo sincedb:
.sincedb_7a7413a84171aa550d5318c17fd756e9
o nome contém sincedb_ e um MD5 (Digest :: MD5.hexdigest) de todos os diretórios no caminho da chave ( http://logstash.net/docs/1.3.3/inputs/file#path ). Veja o código do arquivo de plugin: https://github.com/logstash/logstash/blob/master/lib/logstash/inputs/file.rb#L105fonte
start_position => "beginning"
, a documentação diz:> Esta opção modifica apenas as situações de "primeiro contato" onde um arquivo é novo e não visto antes. Se um arquivo já foi visto antes, esta opção não tem efeito.Logstash manterá o registro
$HOME/.sincedb_*
. Você pode excluir todos os.sincedb
e reiniciar o logstash, o Logstash analisará novamente o arquivo.fonte
Combinando todas as respostas, acho que esta é a melhor maneira de analisar arquivos. Eu fiz o mesmo para meus testes.
Para um teste rápido, em vez de
ignore_older
, você também podetouch /tmp/access_log
alterar o carimbo de data / hora do arquivo.fonte
ignore_older => 0
fará o oposto.Se você estiver usando logstash-forwarder, verifique se há
.logstash-forwarder
arquivos em sua página inicial :fonte
/var/lib/logstash-forwarder/
.Após a exclusão,
$HOME/.sincedb_*
ele ainda não estava ingerindo dados para mim.Depois de tentar várias coisas, removi tudo, exceto o
.conf
arquivo principal,/etc/logstash/conf.d
e reiniciei o Logstash, e tudo funcionou. Só posso presumir que havia algo em um dos.conf
arquivos que o logstash estava silenciosamente pendurado.fonte
Na verdade, repetir cada vez é muito caro se o arquivo contiver muitos dados. Portanto, você precisa ter cuidado antes de fazer isso. Se quisermos forçá-lo a analisar novamente, defina o parâmetro dentro do bloco de entrada
Esta opção não armazenará o arquivo .sincedb e o logstash analisará novamente todas as vezes. Mas se você quiser repetir ocasionalmente, não todas as vezes, o que você pode fazer é excluir manualmente o caminho .sinceDb que é criado ao analisar o arquivo. Geralmente, ele está presente no diretório inicial como um arquivo oculto, se você não for um usuário root, de outra forma no diretório raiz. Você também pode definir o sincedb_path para algum outro local para rastrear este arquivo facilmente.
fonte
Se você quiser evitar bagunçar as opções de logstash, descobri que renomear ou remover o arquivo de log existente e criar um novo arquivo a partir do conteúdo do arquivo antigo enganará o logstash para reindexá-lo.
fonte
Eu o encontrei em meu diretório inicial, mas depois de excluí-lo, o logstash se recusou a selecionar novamente os arquivos de log existentes. A maneira que fiz isso funcionar foi adicionando
ao meu plugin de arquivo. Acho que para reiniciar a cada vez, é só mudar o caminho de sincedb_path
fonte
se você usar tar.gz install filebeat, você pode deletar este arquivo
$FilebeatPath/data/registry/filebeat/data.json
,, e executar novamente o filebeatfonte
Tente deletar a
/var/lib/logstash
pasta em seu ENVfonte
O novo diretório do logstash versão 5 está em
A definição de path.data está em logstash.yml
fonte