Logstash定义字段中的字段

时间:2017-10-27 14:11:30

标签: logstash kibana logstash-grok

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

1 个答案:

答案 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}" ] } 
   }
}