rsyslog – 正则expression式的麻烦

我正在设置logentries服务。 如果日志条目有一个令牌,那么我想把它发送到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 

我检查了rsyslogdebugging日志和我的正则expression式不匹配,但我不知道为什么或如何解决它:

 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是一个在正则expression式中不接受大括号的垃圾文件中完全没有提到的事实。 因此,下面的正则expression式:

 [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] 
  $味精,正则expression式,yourRegEx @ api.logentries.com:10000 / /过滤出并发送
 &〜//丢弃与规则匹配的任何内容

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

我没有testing它,但它会是这样的

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中): (?: ... )
  • 在ERE中,零或更多( x? )必须写为: x{0,1}

这个string
fb1c507f-2ede-4d7f-a140-2bd8d56e133
在ERE模式下被匹配:
([[:alnum:]]{8}(-[[:alnum:]]{4}){3}-[[:alnum:]]{11})