У меня есть программа, которая выводит данные в системный журнал с заданным именем тега / программы. Я хотел бы иметь возможность фильтровать трафик системного журнала из этой программы и отправлять его на удаленный сервер системного журнала, оставляя весь остальной трафик системного журнала локальным.
Я могу отправить весь трафик на удаленный сервер с помощью
Конфигурационные файлы 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& ~
Мы также можем попробовать это. У меня это прекрасно работает.
$template Incoming-logs,"/var/log/testing_docker/%PROGRAMNAME%.log"if $programname startswith 'docker' then -?Incoming-logs
ПРИМЕЧАНИЕ: здесь testing_docker право собственности на папку должно быть предоставлено пользователю системного журнала. Следуйте приведенной ниже команде, чтобы установить разрешения.