如果存在上游响应,如何在grok / logstash中设置条件,而不是

时间:2016-09-19 16:03:40

标签: logstash logstash-grok

如果有上游响应和没有上游响应,如何使用grok过滤器在logstash中设置条件。

我想在有的时候使用它。

 match => { "message" => "%{COMBINEDAPACHELOG}  %{NUMBER:request_time:float} %{NUMBER:upstream_time:float}" }

没有回应时。

match => { "message" => "%{COMBINEDAPACHELOG}  %{NUMBER:request_time:float}"}

2 个答案:

答案 0 :(得分:0)

match => { "message" => "%{COMBINEDAPACHELOG}  %{NUMBER:request_time:float}( %{NUMBER:upstream_time:float})?" }

应该工作!的?该字段意味着它是可选的。确保通过( )?%{NUMBER:upstream_time:float}?或将其与upstream_time ( %{NUMBER:upstream_time:float})?

分组,以包含其前面的空格是可选的

答案 1 :(得分:0)

您还可以使用conditionals

if [message] =~ /\d+\s+\d+$/ {
  grok {
     match => { "message" => "%{COMBINEDAPACHELOG}  %{NUMBER:request_time:float} %{NUMBER:upstream_time:float}" }
  }
} else {
  grok {
     match => { "message" => "%{COMBINEDAPACHELOG}  %{NUMBER:request_time:float}" }
  }
}

正则表达式\d+\s+\d+$检查字符串末尾($锚点)是否存在任意大小的两组数字(\d)(+)由任意数量的空格(\s+)分隔。