elasticsearch 如何使用grok模式匹配此日志?
日志内容如下所示:elasticsearch 如何使用grok模式匹配此日志?,elasticsearch,logstash,logstash-grok,elasticsearch,Logstash,Logstash 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 \[%{TIMESTAMP_ISO8601:timestamp}\] \[%{NUMBER:process_id}\]
[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
\[%{TIMESTAMP_ISO8601:timestamp}\] \[%{NUMBER:process_id}\] \[%{LOGLEVEL:loglevel}\] \[%{UUID:request_id}\] %{DATA:message}(\s%{NUMBER:use_time}ms)?
第一行记录函数调用信息和执行时间,另一行记录正常日志
现在,我想匹配所有这些,如果行中有exec时间,我想匹配它
我写的格洛克模式如下:
[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
\[%{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更改为greedyddata:message,则无法匹配执行时间。我通过使用原始regexp替换总消息字段解决了此问题:
\[%{TIMESTAMP\u ISO8601:TIMESTAMP}\]\[%{NUMBER:process\u id}\]\[%{LOGLEVEL:LOGLEVEL}\]\[%{UUID:request\u id}\](?。+(?:(?\d+(?:\.\d+))ms)*/code>我的模式不能只匹配一个字,其他测试正常