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


17

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

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

*.* @remote_server

Как мне это отфильтровать?


1
Это ответило на мой вопрос. stackoverflow.com/questions/4042115/ruby-syslog-custom-facility
Симмо

Ответы:


37

Конфигурационные файлы 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.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


1
мы можем исправить неработающую ссылку?
Марк Уолш

1

Мы также можем попробовать это. Это работает нормально для меня.

$template Incoming-logs,"/var/log/testing_docker/%PROGRAMNAME%.log"
if $programname startswith 'docker' then -?Incoming-logs

ПРИМЕЧАНИЕ: здесь testing_dockerвладение папками должно быть предоставлено пользователю системного журнала. Следуйте приведенной ниже команде, чтобы установить разрешения.

chown syslog:syslog testing_docker
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.