Rsyslog 模板捕获组

Rsyslog template capture groups

我正在创建一个 Rsyslog 模板来将 Apache 日志解析为 JSON,以便发送到 Elastic Search。

我目前正在尝试从 access_log 捕获请求时间,但似乎无法让我的正则表达式正常工作。

模板常量的Rsyslog配置:

constant(value="\",\"request_time\":\"")     property(name="msg" regex.expression="(\[(.*)\])" regex.type="ERE" regex.match="2")

即使正则表达式似乎在 rsyslog 正则表达式测试页上工作,我也不断从中得到 "NO MATCH"。如果我用 0 替换 regex.match,我会得到完整的时间戳,但它包含我希望避免的 []。

示例请求:

192.168.33.1 - - [30/Mar/2016:08:45:38 +0000] "GET /TEST HTTP/1.1" 404 281 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36"

如有任何建议,我们将不胜感激。 谢谢!

我设法通过缩小我想要的特定数据而不是 "anything in between those square braces":

来让它工作
  constant(value="\",\"request_time\":\"")     property(name="msg" regex.expression="([0-9]*\/[a-zA-Z]*\/[0-9]*:[0-9]*:[0-9]*:[0-9]{2})" regex.type="ERE" regex.match="0")