rsyslog - Como liberar a fila?

rsyslog - Como liberar a fila?

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 .qio 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 $WorkDirectoryestá o valor de queue.spoolDirectorye 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.plo repositório git do Rsyslog (clique em "raw" para obter o arquivo):https://github.com/rsyslog/rsyslog/blob/master/tools/recover_qi.pl

informação relacionada