Я использую 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