grok是否可以在已经定义的字段中保存字段?
我有以下过滤器:
grok {
match => [ "message", "\[%{TIMESTAMP_ISO8601:timestamp}\]\s+\[%{DATA:homebridge_app}\]\s+%{GREEDYDATA:log_message}" ]
}
导致" log_message"充满了以下的东西:
Current temperature for Entryway Thermostat is: 20.5 C
Current humidity for Entryway Thermostat is: 60%
Current temperature for Entryway Thermostat is: 21 C
Current temperature for Entryway Thermostat is: 21.5 C
Current humidity for Entryway Thermostat is: 61%
等等。那里可以有其他数据,但以上是我感兴趣的行。
我希望能够使用Kibana在图表上绘制湿度和温度与时间的关系,但我仍然希望log_message包含如上所示的完整字符串。有没有办法可以从log_message字段中保存整数,而不将该字段拆分为两个?
我正在使用的完整堆栈是Filebeat-> Logstash-> Elasticsearch-> Kibana
答案 0 :(得分:2)
您可以在log_message
字段上添加第二个grok过滤器:
grok {
match => { "log_message" => [
"%{NUMBER:humidity}%$",
"%{NUMBER:temperature} C$"
] } }
}
请参阅the grok plugin documentation:
如果您需要将多个模式与单个字段匹配,则 value可以是一个模式数组
filter { grok { match => { "message" => [ "Duration: %{NUMBER:duration}", "Speed: %{NUMBER:speed}" ] } } }