日志内容如下:
[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)?.*)