rsyslog - Как очистить очередь?

rsyslog - Как очистить очередь?

Я использую rsyslog для получения логов из haproxy и помещения их в logstash для elasticsearch/kibana.

Все работало нормально, но я обнаружил кое-что странное в rsyslog.

Я обнаружил, что у меня отсутствуют данные в kibana. Причина в rsyslog.

Очередь на диске была задержана и остановлена ​​на несколько дней

Итак, у меня есть недостающие данные за выходные, но вчера и сегодня - все в порядке.

Rsyslog теперь получает данные и помещает их в logstash, но он, похоже, забыл о данных, хранящихся в его собственной очереди (я думаю, он видит, что они старые, и игнорирует их; для этого есть параметр, и, может быть, используется какое-то значение по умолчанию?)

Прямо сейчас logstash простаивает, я могу принудительно передать ему много дополнительных данных из очереди rsyslog.

Итак, что я хочу сделать:

Попробуйте временно очистить эту очередь (например, postfix flush) или, если это невозможно, что мне следует попробовать сделать?

Моя конфигурация rsyslog:

$ActionSendTCPRebindInterval 500
$ActionQueueType LinkedList
$ActionQueueFileName kibana
$ActionQueueMaxFileSize 100m
$ActionQueueMaxDiskSpace 100g
$ActionQueueTimeoutEnqueue 0
$ActionResumeRetryCount -1
$ActionQueueSaveOnShutdown on

решение1

Очередь диска Rsyslog может зависнуть из-за некорректного завершения работы, что приведет .qiк рассинхронизации файла в каталоге спула с файлами спула.

В таком случае очистка/удаление очереди диска может потребовать выполнения дополнительного скрипта, предоставляемого Rsyslog (но не входящего в дистрибутивные пакеты). Согласноhttps://www.rsyslog.com/doc/concepts/queues.html#disk-queues

Если вы случайно потеряли или вам понадобились служебные структуры и у вас есть все ваши фрагменты очереди, вы можете использовать скрипт perl, включенный в пакет rsyslog, чтобы сгенерировать его. Использование:

recover_qi.pl -w $WorkDirectory -f QueueFileName -d 8 > QueueFileName.qi

Где $WorkDirectoryесть значение queue.spoolDirectory, а QueueFileNameесть значение queue.fileName. Смотрите также:https://www.rsyslog.com/doc/rainerscript/queue_parameters.html

Пример:

./recover_qi.pl -w /var/spool/rsyslog -f rsyslog_backlog -d 8 > /var/spool/rsyslog/rsyslog_backlog.qi

(Возможно, будет хорошей идеей остановить rsyslog перед выполнением скрипта.)

Вот recover_qi.plв репозитории git Rsyslog (нажмите «raw», чтобы получить файл):https://github.com/rsyslog/rsyslog/blob/master/tools/recover_qi.pl

Связанный контент