У меня есть программа, которая выводит в системный журнал с заданным тегом / именем программы. Я хотел бы иметь возможность фильтровать трафик системного журнала из этой программы и отправлять его на удаленный сервер системного журнала, оставляя весь другой трафик системного журнала локальным.
Я могу отправить весь трафик на удаленный сервер с помощью
*.* @remote_server
Как его отфильтровать?
Конфигурационные файлы Rsyslog находятся в: /etc/rsyslog.d/*.conf
Rsyslog последовательно читает файлы conf, поэтому важно, чтобы вы называли свой конфигурационный файл так, чтобы конкретная конфигурация загружалась до того, как что-либо еще произойдет. Итак, назовите ваш файл, начиная с нуля, то есть 00-my-file.conf
. Лучше создать новый файл, чтобы обновления и т. Д. Не перезаписывали вашу локальную конфигурацию.
Пример:
if $programname == 'programname' and $msg contains 'a text string' and $syslogseverity <= '6' then /var/log/custom/bind.log
Или, если вы просто хотите отменить определенные записи:
if $programname == 'programname' then ~
В вашем случае: (UDP)
[ 112]Или (TCP)
if $programname == 'programname' then @@remote.syslog.server
& ~
& ~
означает дальнейшую остановку обработки совпадающих (только в предыдущей строке!) Записей.
Немного более общей информации:
Кроме того, всегда проверяйте, чтобы фильтры были на одной строке:
# Example: Log mail server control messages to mail-queue.log
if $hostname == 'titus'\
and $programname == 'smtp.queue.'\
and $syslogseverity <= '6' then /var/log/titus/mail-queue.log
& ~
Полезные фильтры:
$hostname
$programname
$msg
$syslogseverity
Операторы:
== (equals)
contains
and
or
Дополнительная информация: http://wiki.rsyslog.com/index.php/Configuration_Samples
Мы также можем попробовать это. Это хорошо работает для меня.
$template Incoming-logs,"/var/log/testing_docker/%PROGRAMNAME%.log"
if $programname startswith 'docker' then -?Incoming-logs
ПРИМЕЧАНИЕ: здесь testing_docker
владение папкой должно быть предоставлено пользователю системного журнала. Следуйте приведенной ниже команде, чтобы установить разрешения.
chown syslog:syslog testing_docker