Logstash yaml中的Grok条件模式(if..else)

qxsslcnc  于 2022-12-09  发布在  Logstash
关注(0)|答案(1)|浏览(200)

我想使用if-else根据筛选条件进行grok模式。我试过了,但是得到了错误的输出。请帮助我识别这里的错误。

filter {
  if ([service] =~ /service-name/) {
    grok {
      match => { "message" => "\[%{TIMESTAMP_ISO8601:time}\] "}
    }
 }
 else{
   grok {
     match => { "message" => "\[%{TIMESTAMP_ISO8601:time}\] \[%{WORD:logLevel}\] \[\{\"id\":%{DATA:id},\"data\":%{DATA:response}\]"}
     }
   }
 }
}

下面是我想做grok模式的日志

[11/Jul/2022:09:20:09 +0000]|| 00.0.0.000 || "-" || "POST /api/v1/path/subpath HTTP/1.1" || 200 || 630 || 0.005 || "okhttp/4.9.0"
guicsvcw

guicsvcw1#

在你的第一个grok中时间戳是HTTPDATE格式而不是ISO8601格式,你必须改变它。也删除\]后面白色
我的建议

filter {
  if ([service] =~ /service-name/) or ([service] =~ /service-name1/) {
    grok {
      match => { "message" => "\[%{HTTPDATE:time}\]\|\| %{IP:ip} \|\| "%{DATA}" \|\| "(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion}))" \|\| %{NUMBER:response} \|\| (?:%{NUMBER:bytes}|-) \|\| (?:%{NUMBER:duration}|-) \|\| %{QS:user-agent}"}
    }
 }
 else{
   grok {
     match => { "message" => "\[%{TIMESTAMP_ISO8601:time}\] \[%{WORD:logLevel}\] \[\{\"id\":%{DATA:id},\"data\":%{DATA:response}\]"}
     }
   }
 }
}

相关问题