Estou usando o rsyslog para obter logs do haproxy e colocá-los no logstash para elasticsearch/kibana.
Tudo estava funcionando bem, mas encontrei algo estranho no rsyslog.
Descobri que faltam dados no kibana. O motivo é o rsyslog.
A fila no disco foi retida e interrompida por alguns dias
Faltam dados do fim de semana, mas ontem e hoje - está tudo bem.
O Rsyslog agora obtém os dados e os coloca no logstash, mas parece ter esquecido dos dados armazenados em sua própria fila (acho que ele vê que eles são antigos e os ignora, há um parâmetro para isso e talvez algum valor padrão seja usado?)
No momento, o logstash está ocioso, posso forçar a ele muitos dados adicionais da fila rsyslog
Então, o que eu quero fazer é:
Tente liberar temporariamente esta fila (como a liberação do postfix) ou se isso não for possível, o que devo tentar fazer?
Minha configuração do rsyslog é:
$ActionSendTCPRebindInterval 500
$ActionQueueType LinkedList
$ActionQueueFileName kibana
$ActionQueueMaxFileSize 100m
$ActionQueueMaxDiskSpace 100g
$ActionQueueTimeoutEnqueue 0
$ActionResumeRetryCount -1
$ActionQueueSaveOnShutdown on
Responder1
A fila de disco do Rsyslog pode ficar presa devido ao desligamento incorreto, fazendo com que .qi
o arquivo no diretório de spool fique fora de sincronia com os arquivos de spool.
Nesse caso, liberar/desenfileirar a fila do disco pode exigir a execução de um script adicional fornecido pelo Rsyslog (mas não incluído nos pacotes de distribuição). De acordo comhttps://www.rsyslog.com/doc/concepts/queues.html#disk-queues
Se acontecer de você perder ou precisar das estruturas de limpeza e tiver todos os seus pedaços de fila, você pode usar o script perl incluído no pacote rsyslog para gerá-lo. Uso:
recover_qi.pl -w $WorkDirectory -f QueueFileName -d 8 > QueueFileName.qi
Onde $WorkDirectory
está o valor de queue.spoolDirectory
e QueueFileName
é o valor de queue.fileName
. Veja também:https://www.rsyslog.com/doc/rainerscript/queue_parameters.html
Exemplo:
./recover_qi.pl -w /var/spool/rsyslog -f rsyslog_backlog -d 8 > /var/spool/rsyslog/rsyslog_backlog.qi
(Pode ser uma boa ideia parar o rsyslog antes de executar o script.)
Aqui está recover_qi.pl
o repositório git do Rsyslog (clique em "raw" para obter o arquivo):https://github.com/rsyslog/rsyslog/blob/master/tools/recover_qi.pl