Почему происходит сбой фильтра rsyslog isequal? - PullRequest
0 голосов
/ 25 апреля 2019

Я хочу записать все, от rsyslogd исполняемого файла (демона) в файл.

# /etc/rsyslog.conf
if $syslogtag isequal 'rsyslogd' then /tmp/foo.log 
if $syslogtag isequal 'rsyslogd:' then /tmp/foo.log
if $syslogtag isequal ' rsyslogd' then /tmp/foo.log
if $syslogtag isequal ' rsyslogd:' then /tmp/foo.log

В отдельной оболочке:

sv down /root/service/rsyslog/
sv up /root/service/rsyslog/
tail -F /tmp/foo.log

Результат: bupkus

Поэтому я редактирую rsyslog.conf:

# /etc/rsyslog.conf
if $syslogtag contains 'rsyslogd' then /tmp/foo.log 

Прополоскать и повторить;в отдельной оболочке:

sv down /root/service/rsyslog/
sv up /root/service/rsyslog/
tail -F /tmp/foo.log

Тада: 20190424_195027 linuxbox info rsyslogd: [origin software="rsyslogd" swVersion="8.28.0" x-pid="27384" x-info="http://www.rsyslog.com"] start

Что дает?Я не понимаю, почему попытки использовать isequals терпят неудачу.

%syslogtag% выглядит как некоторая вариация "rsyslogd" либо с пробелом, либо с двоеточием, прикрепленным куда-то - но яКажется, я прошел через все разумные изменения, так почему же сравнение isequal не удается?

1 Ответ

1 голос
/ 25 апреля 2019

Вам нужно искать сообщения об ошибках во время анализа вашей конфигурации (например, с rsyslogd -N1), поскольку ваши строки игнорируются.Оператор isequal используется с синтаксисом такого типа:

:syslogtag, isequal, "rsyslogd:"  ./output1

, тогда как синтаксис if..then требует оператора ==:

if $syslogtag == 'rsyslogd:' then ./output2

Оператор contains работаетс обоими синтаксисами.

...