我有看起来像这样的日志条目......
2014-02-25 00:00:03,936 INFO - something happened...bla bla bla
2014-02-25 00:00:03,952 INFO - ***Request Completed*** [ 78.002] mS [http://cloud.mydomain.local/schedule/search?param=45]
2014-02-25 00:00:04,233 INFO - something else happened...bla bla bla
我有一个正确解析行的 grok 过滤器......
grok {
match => [ "message", "%{TIMESTAMP_ISO8601:logdate} %{WORD:severity}%{SPACE}- %{GREEDYDATA:body}" ]
}
如果“body”以“***Request Completed***”开头,我想从“body”中解析更多数据。即“esaspsedms”和“uri”。我怎样才能做到这一点?
在其他地方,有人建议我像这样向 grok 过滤器添加另一个消息条目......
grok {
match => [
"message", "%{TIMESTAMP_ISO8601:logdate} %{WORD:severity}%{SPACE}- \*\*\*Request Completed\*\*\* \[%{SPACE}%{NUMBER:elaspedms}\] mS \[%{URI:uri}\]",
"message", "%{TIMESTAMP_ISO8601:logdate} %{WORD:severity}%{SPACE}- %{GREEDYDATA:body}"
]
}
...这可行,但对于时间线,'body' 的值没有设置。理想情况下,我希望正文始终包含条目的最后一部分,并且当条目是时间线时,执行 elapsedms 和 uri 的附加解析。
任何想法我怎么能做到这一点?
有没有办法解析字段?这样我就可以尝试将“body”解析为 elapsedms/uri,如果失败,请继续。或者有没有办法在 grok 表达式中嵌套字段匹配?
想法?
编辑:如果设置了“elaspedms”,我是否可以只从“elaspedms”和“uri”创建主体,而不是确保始终设置“body”?