rsyslog-正则表达式问题

rsyslog-正则表达式问题

我正在尝试设置日志条目服务。如果日志条目中包含令牌,那么我想将其发送到 api.logentries.com:10000。令牌是格式为 aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee 的 guid。

我现在正在做的事情:

# 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

答案1

Rsyslog 支持 POSIX BRE 和 ERE 语法。这两种语法在当今都有些不常见。不过,两者之间的一个区别是,字符{}需要在 BRE 中进行转义 - 这也是使用这些模板时 rsyslogs 的默认语法。

看: https://en.wikibooks.org/wiki/Regular_Expressions/POSIX-Extended_Regular_Expressionshttp://www.regular-expressions.info/posix.html

此外,与 PCRE 相比:

  • BRE/ERE 总是贪婪的;没有非贪婪标志.*?
  • 没有非分组组(在 Rsyslog 中):(?: ... )
  • 在 ERE 中,零或多个(x?)必须写为:x{0,1}

在 ERE 模式下,此字符串
fb1c507f-2ede-4d7f-a140-2bd8d56e133
的匹配方式如下:
([[:alnum:]]{8}(-[[:alnum:]]{4}){3}-[[:alnum:]]{11})

答案2

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]

答案3

$msg , regex, yourRegEx @api.logentries.com:10000 // 过滤并发送
& ~ // 丢弃与规则匹配的内容

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

我还没有测试过……但应该是这样的

相关内容