Получение сообщений пересылки rsyslog после перезапуска удаленного сервера

У меня системный журнал успешно перенаправляет журналы на вышестоящий сервер, например:

$MainMsgQueyeType LinkedList
$MainMsgQueueSize 10000
$MainMsgQueusDiscardMark 8000
$MainMsgQueueDiscardSeverity 1
$MainMsgQueueSaveOnShutdown off
$MainMsgQueueTimeoutEnqueue 0

$ActionQueueType LinkedList    # in memory queue
$ActionQueueFileName fwdRule1  # unique name prefix for spool files
$ActionQueueSize 10000         # Only allow 10000 elements in the queue
$ActionQueueDiscardMark 8000   # Only allow 8000 elements in the queue before dropping msgs
$ActionQueueDiscardSeverity 1  # Discard Alert,Critical,Error,Warning,Notice,Info,Debug, NOT Emergency
$ActionQueueSaveOnShutdown off # save messages to disk on shutdown
$ActionQueueTimeoutEnqueue 0
$ActionResumeRetryCount -1     # infinite retries if host is down

$RepeatedMsgReduction off

*.* @@remoteserver.mynetwork.com:5544

На удаленном сервере у меня есть что-то, что ведет системный журнал и прослушивает этот порт. Для тестирования у меня есть простой клиент журнала, который регистрирует в системный журнал 100 сообщений в секунду.

Все это работает нормально, и я настроил указанные выше очереди так, что в случае, если удаленный сервер недоступен, очереди начинают заполняться, а затем, в конечном итоге, сообщения отбрасываются, тем самым защищая системный журнал от блокировки его клиентов ведения журнала.

Когда я останавливаю удаленный приемник журнала на удаленном сервере: 5544, системный журнал все еще стабилен (очереди заполняются / заполняются), но когда я перезапускаю удаленный приемник журнала через некоторое время, rsyslog снова обнаруживает сервер, восстанавливает TCP-соединение

ОДНАКО - системный журнал пересылает ему только 1 сообщение, несмотря на то, что очередь содержит много тысяч сообщений, а клиент ведения журнала продолжает регистрировать 100 сообщений в секунду.

Как я могу заставить системный журнал снова начать пересылку сообщений после обнаружения резервной копии удаленного сервера? (Без перезапуска системного журнала).

Я использую rsyslog 4.6.2-2

Я использую и хочу использовать TCP


person gmsharky    schedule 30.10.2013    source источник


Ответы (1)


Проблема в том, что кто-то сталкивался с этим, заключалась в том, что рабочий каталог был установлен на:

$WorkDirectory /var/spool/rsyslog  

И приведенная выше конфигурация делает это:

$ActionQueueFileName fwdRule1

Хотя это должна быть очередь в памяти. Из-за этого, когда очередь достигла 800 (как ни странно, не 8000), был активирован режим поддержки диска, и syslog попытался записать сообщения в / var / spool / rsyslog. Этого каталога не существует. Случайным образом (следовательно, должно существовать состояние гонки и ошибка в rsyslog), после непрерывных попыток открыть файл очереди на диске в этом каталоге, rsyslog перешел в искаженное состояние, отказался и продолжал ставить сообщения в очередь до тех пор, пока не достигнет максимума. 10 000 марок. Перезапуск нижестоящего сервера журналов не помог его восстановить.

Удаление всех ссылок на ActionQueueFileName и создание WorkDirectory решило эту проблему.

person gmsharky    schedule 01.11.2013
comment
Спасибо за это. Мне любопытно, как прошла отладка этого? Я сталкиваюсь с подобными проблемами и плохо разбираюсь в отладке rsyslog. - person Jeff Cutler-Stamm; 09.01.2014