Я пытаюсь настроить журналы служба. Если в записи журнала есть токен, я хотел бы отправить его на 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:
.*?
(?: ... )
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
Я не тестировал ... но будет примерно так