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

rsyslog - проблема с регулярным выражением

Я пытаюсь настроить журналы служба. Если в записи журнала есть токен, я хотел бы отправить его на api.logentries.com:10000. Токен представляет собой гид в формате aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee.

Прямо сейчас делаю:

# If there's a logentries token then send it directly to logentries 
:msg, regex, ".*[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}.*"
& @@api.logentries.com:10000 

Я проверил журналы отладки rsyslog, и мое регулярное выражение не соответствует, но я не могу понять, почему и как это исправить:

5245.961161378:7fb79b514700: Filter: check for property 'msg' (value ' fb1c507f-2ede-4d7f-a140-2bd8d56e133 - application - [play-akka.actor.default-dispatcher-1] - Found user: 4fb11ea5e4b00a1aeebe2800') regex '.*[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}.*': FALSE

rsyslog, являющийся дымящейся грудой мусора, не принимает фигурные скобки в регулярных выражениях, что совершенно не упоминается в документации. Таким образом, следующее регулярное выражение:

[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}

Необходимо переписать как:

[a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9]-[a-z0-9][a-z0-9][a-z0-9][a-z0-9]-[a-z0-9][a-z0-9][a-z0-9][a-z0-9]-[a-z0-9][a-z0-9][a-z0-9][a-z0-9]-[a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9]

Rsyslog поддерживает синтаксис POSIX BRE и ERE. Оба сейчас немного необычны. Тем не менее одно различие между ними заключается в том, что символы { и } должны быть экранированы в BRE - который также является синтаксисом по умолчанию rsyslogs, когда используются эти шаблоны.

Видеть: https://en.wikibooks.org/wiki/Regular_Expressions/POSIX-Extended_Regular_Expressions и http://www.regular-expressions.info/posix.html

Кроме того, по сравнению с PCRE:

  • BRE / ERE всегда жадны; нет не жадного флага .*?
  • Нет негрупповых групп (в Rsyslog): (?: ... )
  • Ноль или больше (x?) должен быть записан как: x{0,1} в ERE

Эта строка
fb1c507f-2ede-4d7f-a140-2bd8d56e133
соответствует в режиме ERE следующим образом:
([[:alnum:]]{8}(-[[:alnum:]]{4}){3}-[[:alnum:]]{11})

$msg , regex, yourRegEx @api.logentries.com:10000 // Filter out and send
& ~ // Discard whatever matched the rule

$template myTemplate,"TOKEN %msg%" 
*.* @api.logentries.com:10000?myTemplate

Я не тестировал ... но будет примерно так