Назад | Перейти на главную страницу

как фильтровать сообщения rsyslog по тегам

У меня есть несколько приложений и скриптов, которые я хочу перенаправить в пользовательские файлы.

Я запускаю эти приложения, используя

command | logger -t TAG

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

Я попытался добавить собственный фильтр в /etc/rsyslog.d/60-myfilter.conf;

if $syslogtag == 'giomanager' then /var/log/giomanager.log

Что я делаю не так ? Как правильно фильтровать по тегу или есть лучший вариант для получения аналогичного результата?

Я не использовал if like that (или syslogtag), но использовал :<blah>,<condition> ... (в частности: msg, contains, ...), но попробуйте

:syslogtag, isequal, "giomanager:" /var/log/giomanager.log
& stop

В & stop (Или, & ~ в rsyslog v6 и старше (например, в RHEL6)) приводит к тому, что совпавшее сообщение отбрасывается после регистрации, в противном случае оно будет проанализировано другими правилами.


Обновление: протестировано и

Системный журнал содержит : и должен быть заключен в "" скорее, чем ''

Итак, я наконец нашел решение своей проблемы.

Большое спасибо @lain за то, что мне помогли.

Решение, как указано ранее, состоит в том, чтобы включить ":" в имя тега. Кроме того, и это очень важно, имя файла должно быть перед 50-default.conf в алфавитном порядке.

Чтобы продолжить, введите следующее 30-giomanager.conf :

:syslogtag, isequal, "giomanager:" /var/log/giomanager.log
& stop

Обратите внимание, что файл /var/log/giomanager.log должен быть доступен для записи пользователю системного журнала.

Этот документ redhat подробно описывает, как фильтровать журналы rsyslog и выводить их в отдельные файлы, даже с динамическими именами файлов.