Как настроить rsyslog для отправки журналов из определенной программы на удаленный сервер системного журнала?

У меня есть программа, которая выводит данные в системный журнал с заданным именем тега / программы. Я хотел бы иметь возможность фильтровать трафик системного журнала из этой программы и отправлять его на удаленный сервер системного журнала, оставляя весь остальной трафик системного журнала локальным.

Я могу отправить весь трафик на удаленный сервер с помощью

*.* @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)

if $programname == 'programname' then @remote.syslog.server& ~

Или (TCP)

if $programname == 'programname' then @@remote.syslog.server& ~

То & ~ означает дальнейшую остановку обработки совпадающих (только в предыдущей строке!) записей.

Еще немного общей информации:

Кроме того, всегда следите за тем, чтобы фильтры находились в одной строке:

# Example: Log mail server control messages to mail-queue.logif $hostname == 'titus'\and $programname == 'smtp.queue.'\and $syslogseverity <= '6' then /var/log/titus/mail-queue.log& ~

Полезные фильтры:

$hostname$programname$msg$syslogseverity

Операторы:

== (equals)containsandor

Дополнительная информация: 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

Это ответило на мой вопрос.