Grok 将负数解析为 Kibana 自定义字段

Grok parsing negative numbers into Kibana custom fields

我一直在用头撞墙 - 2 天前开始使用 logstash 和 Grok 并取得了一些进展,但我整个晚上都在研究这个特殊问题。

我从正在摄取到 logstash 的日志文件中获得以下输入行。

'John Pence ':'decrease':-0.01:-1.03093: 0.96: 0.97

'Dave Pound':'increase':0.04:1.04000: 0.97: 0.93

与以下 grok 过滤器匹配:

match => { "message" => "%{QS:name}:%{QS:activity}:%{BASE16FLOAT:Change}:%{BASE16FLOAT:Percentage}: %{BASE16FLOAT:CurrentPrice}: %{BASE16FLOAT:PreviousPrice}" }
match => { "message" => "%{QS:Name}:%{QS:Activity}:-%{BASE16FLOAT:Change}:-%{BASE16FLOAT:Percentage}: %{BASE16FLOAT:CurrentPrice}: %{BASE16FLOAT:PreviousPrice}" }

这会在 Kibana 中产生以下输出:

如您所见 - 我无法正确显示负数,如何在 grok 过滤器中正确显示减号? 非常感谢您的帮助!

您可以简单地使用 NUMBER grok 模式而不是 BASE16FLOAT

以下 grok 模式非常适合您的输入:

grok {
    "match" => {"message" => "%{QS:name}:%{QS:activity}:%{NUMBER:Change}:%{NUMBER:Percentage}: %{NUMBER:CurrentPrice}: %{NUMBER:PreviousPrice}"}
}