Назад | Перейти на главную страницу

Rsyslog: из настраиваемого файла журнала пересылать только сообщения, соответствующие шаблону

Я хочу пересылать сообщения, соответствующие шаблону (HELLO в данном случае) из обычай лог-файл (/home/ubuntu/test.log) на удаленный сервер rsyslog.

Вот конфигурация:

# cat /etc/rsyslog.d/05-forwarding.conf
*.* @@rsyslogserver.mycompany.com:10514

# cat /etc/rsyslog.d/10-custom.conf
$ModLoad imfile
$InputFilePollInterval 1
$InputFileName /home/ubuntu/test.log
$InputFileTag testlogs:
$InputFileStateFile testlogs
$InputRunFileMonitor
:msg, contains, "HELLO" /var/log/testlog_error.log
& stop
:msg, !contains, "HELLO" stop

Проблема:

  1. Все сообщения, идущие в /var/log/syslog остановился. << НЕ ХОРОШО
  2. Сообщения, содержащие HELLO слово в /home/ubuntu/test.log собираются /var/log/testlog_error.log а также перенаправляются на удаленный сервер rsyslog, << ХОРОШО
  3. Сообщения НЕ содержащий HELLO слово в /home/ubuntu/test.log не собираемся /var/log/testlog_error.log который ХОРОШО но эти сообщения пересылаются на удаленный сервер rsyslog. << ПЛОХОЙ

Моя идеальная ситуация должна быть:

  1. Системные и все другие сообщения должны продолжать отправляться на /var/log/syslog
  2. Никаких изменений здесь. Это работает, как ожидалось.
  3. Сообщения НЕ содержащий HELLO слово в /home/ubuntu/test.log следует полностью выбросить. Не записывать в локальный файл, а также не пересылать такие сообщения на удаленный сервер.

Мне нужна помощь в решении пунктов 1 и 3 выше.

Как есть, ваш файл /etc/rsyslog.d/05-forwarding.conf пересылает все сообщения, передающие мысли, а не только сообщения из вашего пользовательского файла /home/ubuntu/test.log. Так что вы можете Удалить это, как вы сказали, вы хотите пересылать сообщения только из вашего пользовательского файла.

Ваш файл /etc/rsyslog.d/10-custom.conf должно выглядеть так:

$ModLoad imfile
$InputFilePollInterval 1
$InputFileName /home/ubuntu/test.log
$InputFileTag testlogs:
$InputFileStateFile testlogs
$InputFileFacility local0
$InputRunFileMonitor

:syslogtag, isequal, "testlogs:" {
  :msg, contains, "HELLO" {
    local0.* /var/log/testlog_error.log
    local0.* @@rsyslogserver.mycompany.com:10514
  }
  stop
}

Как видите, я добавил следующее:

$ InputFileFacility local0

Теперь ваш пользовательский файл будет отслеживаться, и его сообщения будут записываться в средство local0. Сообщения от local0 будут иметь связанный с ним тег.

: syslogtag, isequal, "тестовые журналы:"

Это правило будет соответствовать только сообщению, которое содержит тег testlogs :, то есть именно те сообщения, которые вам нужны. Таким образом, все остальные сообщения будут пропускать его и будут регистрироваться в / var / log / syslog и всем остальном из 50-default.conf.

: msg, содержит "HELLO"

Теперь все сообщения из вашего файла, который содержит HELLO, будут регистрироваться в /var/log/testlog_error.log и перенаправляться на @@ rsyslogserver.mycompany.com: 10514.

А затем «стоп» отбросит все сообщения из вашего файла, которые записываются в local0.