匹配双引号并使用grok获取内容

时间:2018-05-09 13:30:51

标签: logstash logstash-grok

我的服务器上有以下格式的日志,开始将日志注入我的ELK服务器,并且卡在匹配日志模式中。

2018-04-20T21:51:13.677291071-0400 level=7 [Common] [Common] [ID=22] [0001232700011fde] [00943 01248] [Thread1] "[key1:N/A key2:0 key3:N/A]: Completed flow"

我能够匹配Thread1,如何获得双引号内key1的值。

目前我使用下面的模式并将整个消息存储在单个字符串中。

%{TIMESTAMP_ISO8601:logTimestamp} level=%{NUMBER:severity} \[Common\] \[Common] \[ID=%{BASE10NUM:logId}] \[%{WORD:taskId1}] \[%{DATA:taskId2}] \[%{DATA:taskName}]%{GREEDYDATA:logString}

我使用http://grokdebug.herokuapp.com/来检查语法,是否有其他免费实用程序根据输入字符串提供grok模式?

1 个答案:

答案 0 :(得分:0)

您可以简单地在grok模式之外指定双引号,如下所示, "\[key1:%{DATA:key1}

这也会匹配key1

%{TIMESTAMP_ISO8601:logTimestamp} level=%{NUMBER:severity} \[Common\] \[Common] \[ID=%{BASE10NUM:logId}] \[%{WORD:taskId1}] \[%{DATA:taskId2}] \[%{DATA:taskName}] "\[key1:%{DATA:key1}

上述方法的问题在于,由于正斜杠,它不会与N/A匹配。如果/key1并且还接受该字段的其他字符,则更好的方法是从key值中写custom pattern以逃避N/A

"\[key1:(?<key1>(N\/A|\w+))

<{1}}的完整模式将是

key1

它会产生以下输出,

%{TIMESTAMP_ISO8601:logTimestamp} level=%{NUMBER:severity} \[Common\] \[Common] \[ID=%{BASE10NUM:logId}] \[%{WORD:taskId1}] \[%{DATA:taskId2}] \[%{DATA:taskName}] "\[key1:(?<key1>(N\/A|\w+))

希望这会有所帮助。