繁体   English   中英

logstash未能匹配grok过滤器

[英]logstash fails to match a grok filter

我被卡住了。 我不明白为什么grok在logstash下无法匹配简单的正则表达式。 grok可以作为独立的东西很好地工作。 对我有用的唯一模式是“。*”,其他所有内容都会失败。

$ cat ./sample2-logstash.conf
input {
    stdin {}
}

filter {
    grok {
        match => [ "message1", "foo.*" ]
        add_tag => [ "this_is_foo" ]
        tag_on_failure => [ "STUPID_LOGSTASH" ]
    }
}

output {
    stdout { codec => json_lines }
}

这是输出:

$ echo "foo" |~/bin/logstash-1.4.0/bin/logstash -f ./sample2-logstash.conf 
{"message":"foo","@version":"1","@timestamp":"2014-05-07T00:32:49.915Z","host":"serega-sv","tags":["STUPID_LOGSTASH"]}

好像我错过了用logstash做某事的原因,因为香草味很好用:

$ cat grok.conf
program {
    file "./sample.log"
    match {
        pattern: "foo.*"
        reaction: "LINE MATCHED! %{@LINE}"
    }
}

Plain grok的输出:

$ echo "foo" > ./sample.log; grok -f grok.conf 
LINE MATCHED! foo

谢谢!

您的配置有错误。 grok匹配字段是message ,而不是message1

然后,在logstash grok 页面上,有一个示例演示如何使用grok。 我想你误会了。 例如,如果您的日志是

55.3.244.1 GET /index.html 15824 0.043

Logstash的grok模式是

%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}

对于%{IP:client} ,第一个参数(IP)是grok模式,第二个参数(client)是您要放置此消息的字段。

@本林说的一切。 该文档的下一部分显示了如何将语义应用于通用正则表达式语法:

filter {
  grok {
    match => [ "message", 
      "^(?<ip>\S+) (?<verb>\S+) (?<request>\S+) (?<bytes>\S+) (?<delay>\S+)$"
    ] 
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM