如何使用grok模式来匹配这些日志



日志内容如下:

[2018-07-09 11:30:59] [13968] [INFO] [1e74b6b7-fcb2-4dde-a259-7db1de0350ea] run entry() 11ms
[2018-07-09 11:30:59] [13968] [INFO] [1e74b6b7-fcb2-4dde-a259-7db1de0350ea] entry done

第一行记录了带有exec时间的函数调用信息,另一行是正常日志。

现在,我想匹配所有这些,如果行中有exec时间,我想进行匹配。

我这样写grok模式:

[%{TIMESTAMP_ISO8601:timestamp}] [%{NUMBER:process_id}] [%{LOGLEVEL:loglevel}] [%{UUID:request_id}] %{DATA:message}(s%{NUMBER:use_time}ms)?

它不起作用。匹配结果为:

{
"process_id": "13968",
"loglevel": "INFO",
"message": "",
"request_id": "1e74b6b7-fcb2-4dde-a259-7db1de0350ea",
"timestamp": "2018-07-09 11:30:59"
}

如果将DATA:message更改为GREEDDATA:message,则无法匹配exec时间。

我通过使用原始regexp替换总消息字段来解决它:

[%{TIMESTAMP_ISO8601:timestamp}] [%{NUMBER:process_id}] [%{LOGLEVEL:loglevel}] [%{UUID:request_id}] (?<message>.+ (?:(?<use_time>d+(?:.d+)?)ms)?.*)

相关内容

  • 没有找到相关文章

最新更新