Rsyslog模板捕获组

时间:2016-03-30 08:48:20

标签: elasticsearch rsyslog

我正在创建一个Rsyslog模板来将apache日志解析为JSON,以便发送到弹性搜索。

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

模板常量的Rsyslog配置:

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

我不断得到"没有比赛"即使正则表达式似乎在rsyslog正则表达式测试页面上工作。如果我用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"

任何建议将不胜感激。 谢谢!

1 个答案:

答案 0 :(得分:1)

我设法通过缩小我想要的特定数据而不是"在这些方括号之间的任何内容"来实现它的工作:

  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")