我是Grok和logstash的新手。
2016/02/18 - 03:52:08|service|Info|some message in different format
2016/02/18 - 03:52:08|service|Info|Time to process "tweet_name" is 40.1081357 second(s)
我会收到上述格式的消息。我想要的是,我想提取以下内容,
只有当邮件以Time to process
我写了一个grok,但我不知道如何提取第5项和第6项。因为#5和#6只能在特定的日志消息行中使用。
filter {grok { match => { "message" => "(?<datetime>(([0-9]+)\/*)+ - ([0-9]+:*)+)\|%{WORD:service}\|%{WORD:loglevel}\|%{GREEDYDATA:message}" }}}
如何获得第5项和第6项并应用grok?
答案 0 :(得分:1)
我建议使用两个grok节。首先,拉掉常见的东西(你的#1-#3)。使用&#39;覆盖&#39;将剩余的内容重新放回[消息]中。 grok {}的参数。这与您提供的grok中的内容非常相似,但如果您使用内置模式,例如%{YEAR}
,它会更清晰然后,使用带匹配模式的第二个grok节来处理剩下的其他类型的值。像这样:
grok {
match => { "message" => "Time to process \"%{DATA:tweet_name}\" is %{NUMBER:tweet_sec} second\(s\)" }
}
如果您还有其他要创建字段的消息,请在grok节中添加更多模式。它将按顺序处理它们,直到找到匹配然后退出。
答案 1 :(得分:0)
您必须为不同的消息添加新的grok。 它将按顺序处理它们,在匹配正确的模式后退出。