从 logstash grok 过滤器中的消息中获取可选字段
Getting optional field out of message in logstash grok filter
我正在尝试提取此日志行中的毫秒数
20190726160424 [INFO]
[concurrent/forasdfMES-managedThreadFactory-Thread-10] -
Metricsdceptor: ## End of call: Historirrtory.getHistrrOrder took 2979
ms
问题是,并非所有日志行都包含该字符串
现在我想有选择地将它提取到持续时间字段中。我试过了,但什么也没发生....没有错误,但也没有结果。
grok
{
match => ["message", "(took (?<duration>[\d]+) ms)?"]
}
我做错了什么?
谢谢大家!
我无法解释为什么,但如果你锚定它,它就会起作用
grok { match => { "message" => "(took (?<duration>\d+) ms)?$" } }
一个解决方案是只在以 ms 结尾的日志行上应用 grok 过滤器。可以在您的配置中使用 conditionals 来完成。
if [message] =~ /took \d+ ms$/ {
grok {
match => ["message", "took %{NUMBER:duration} ms"]
}
}
我正在尝试提取此日志行中的毫秒数
20190726160424 [INFO] [concurrent/forasdfMES-managedThreadFactory-Thread-10] - Metricsdceptor: ## End of call: Historirrtory.getHistrrOrder took 2979 ms
问题是,并非所有日志行都包含该字符串 现在我想有选择地将它提取到持续时间字段中。我试过了,但什么也没发生....没有错误,但也没有结果。
grok
{
match => ["message", "(took (?<duration>[\d]+) ms)?"]
}
我做错了什么?
谢谢大家!
我无法解释为什么,但如果你锚定它,它就会起作用
grok { match => { "message" => "(took (?<duration>\d+) ms)?$" } }
一个解决方案是只在以 ms 结尾的日志行上应用 grok 过滤器。可以在您的配置中使用 conditionals 来完成。
if [message] =~ /took \d+ ms$/ {
grok {
match => ["message", "took %{NUMBER:duration} ms"]
}
}