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

фильтрация rsyslog на основе содержимого сообщения

У меня есть приложение, которое пишет в системный журнал. Сообщения, записываемые в системный журнал, предназначены для различных сегментов, которые необходимо отфильтровать. Каждое сообщение начинается с номера корзины, поэтому сообщения записываются как:

1: Message for bucket 1
14: Message for bucket 14
123: Message for bucket 123

Я хочу отфильтровать эти сообщения на основе номера корзины, что, как я полагаю, можно сделать с помощью регулярного выражения. Эти сегменты являются числовыми и могут находиться в диапазоне от 1 до 999. Результатом для этих сегментов должны быть разные файлы, по одному для каждого сегмента. В приведенном выше примере это должно быть:

/var/log/myapp/1.log
/var/log/myapp/14.log
/var/log/myapp/123.log

Может ли кто-нибудь помочь мне с тем, как это можно сделать с помощью rsyslog?

Думаю, я немного опоздал с этим ответом, но на самом деле rsyslog позволяет динамически создавать имена файлов журнала, поэтому вы можете создать шаблон, который строит имя файла журнала на основе содержимого msg, используя либо field.number или regex.submatch свойства для извлечения номера ведра - см. http://www.rsyslog.com/doc/master/configuration/templates.html для подробностей.

Однако, если вас устраивают 999 строк, это, безусловно, проще, и вопрос, решенный Роналду Насименто, можно решить, используя contains_i вместо того содержит - contains_i нечувствителен к регистру.

Я делаю простой фильтр в конфиге rsyslog.

В моем случае это будет выглядеть так:

:msg, contains, "123: Message for bucket 123" -/var/log/myapp/123.log

Это будет искать эту строку в свойстве msg входящих сообщений системного журнала и записывать ее в указанный мной файл.

Если вы хотите узнать больше о настройке rsyslog, это отличное место для начала: http://www.rsyslog.com/doc/rsyslog_conf.html