Я пытаюсь создать фильтр rsyslogd, который пересылает сообщения системного журнала с удаленного хоста с уровнем серьезности выше определенного. Я могу сделать это на другом сервере с rsyslogd v8.24. Но я застрял, пытаясь сделать это со старым синтаксисом rsyslogd v5.8.
Единственный фильтр, с которым я добился успеха, это app-name
и в настоящее время мои правила:
:app-name, isequal, "app1" @192.168.100.200:514
:app-name, isequal, "app2" @192.168.100.200:514
Как я могу добавить фильтр уровня серьезности, чтобы перенаправлялись только сообщения, соответствующие именам приложений И превышающие определенный уровень?
С rsyslogd v8.24 мой фильтр выглядит следующим образом. Было бы еще лучше, если бы был способ воспроизвести это в версии 5.8.
if $fromhost-ip == "192.168.0.50" and $syslogseverity <= 4 then @192.168.200.200:514
Я загрузил и собрал исходные коды 5.8, провел некоторое тестирование и, в общем, все, что вам нужно сделать, это перейти от использования двойных кавычек к одинарным кавычкам для строковых констант в RainerScript. Т.е. пытаться
if $fromhost-ip=='192.168.0.50' and $syslogseverity<=4 then ...
Для других читателей, которым может потребоваться аналогичная сборка, я скачал 5.8 источники и настроил их с помощью debug и imfile (для использования в качестве ввода):
./configure --enable-debug --enable-diagtools --enable-imfile
make
Поскольку я не хотел устанавливать файлы в /usr/local
, Я настроил DESTDIR на создание дерева установки в каталоге сборки.
make install DESTDIR=$PWD/x
Затем двоичный файл rsyslogd находится в x/usr/local/sbin/
. Аргументы для использования в автономной тестовой конфигурации необходимы -u2
не делать chdir("/")
, и -c5
заставляет синтаксический анализ оставаться в синтаксисе версии 5, поэтому запустите с:
rsyslogd -c5 -u2 -i /tmp/pidfile -f my.conf
к которому вам нужно добавить -M$PWD/x/usr/local/lib/
найти модули. Вы можете выполнить проверку синтаксиса файла конфигурации с помощью -N1
и запустить с отладкой с -dn
.