Logstash在字段中定义字段

Logstash在字段中定义字段,logstash,kibana,logstash-grok,Logstash,Kibana,Logstash Grok,grok是否有办法从已定义的字段中保存字段 我有以下过滤器: grok { match => [ "message", "\[%{TIMESTAMP_ISO8601:timestamp}\]\s+\[%{DATA:homebridge_app}\]\s+%{GREEDYDATA:log_message}" ] } 这会导致“日志消息”中填充以下内容: Current temperature for Entryway Thermostat is: 20.5 C Current humi

grok是否有办法从已定义的字段中保存字段

我有以下过滤器:

grok {
  match => [ "message", "\[%{TIMESTAMP_ISO8601:timestamp}\]\s+\[%{DATA:homebridge_app}\]\s+%{GREEDYDATA: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_消息包含如上所述的完整字符串。有没有一种方法可以保存log_消息字段中的整数,而不将该字段一分为二


我使用的完整堆栈是Filebeat->Logstash->Elasticsearch->Kibana

您可以在
log\u消息
字段中添加第二个grok过滤器:

grok { 
    match => { "log_message" => [ 
        "%{NUMBER:humidity}%$", 
        "%{NUMBER:temperature} C$" 
    ] } }
}
见:

如果需要针对单个字段匹配多个模式,则 值可以是一个模式数组

filter {
   grok {     
      match => { "message" => [ "Duration: %{NUMBER:duration}", "Speed: %{NUMBER:speed}" ] } 
   }
}

这正是我想要的;谢谢当然,我还需要将break_on_match=>false设置为有效。@RCross我不知道这个选项。但是我不明白为什么你需要在匹配时中断,因为如果某个模式与第一个模式匹配,它就不会与第二个模式匹配。或者我遗漏了什么。对不起,我不知道如何突出显示这些注释框中的命令,因此它可能不干净,但关键是它被设置为“false”,以防止在第一个匹配为true时日志存储中止。默认情况下,Logstash会在看到匹配项时立即中止。谢谢,我明白这个选项的作用