Logstash _grokparsefailure 问题?

Logstash _grokparsefailure issues?

我在 grok 解析方面遇到问题。在 ElasticSearch/Kibana 中,我匹配的行带有标记 _grokparsefailure。

这是我的 logstash 配置:

input { 
 snmptrap {
 yamlmibdir => "/opt/logstash/vendor/bundle/jruby/1.9/gems/snmp- 1.2.0/data/ruby/snmp/mibs"
 codec => plain {
 charset => "BINARY"
         }
 type => "snmptrap"
         }
       }

filter {

   if [type] == "snmptrap"
          {
              grok {
              match => { "message" => "%{IP:@source_ip=\""}" }
              add_field => { "source_ip" =>"%{@source_ip=\"}" }
          }
       }

     }

    output {elasticsearch { hosts => localhost }


      }

我的输入如下所示。

"message" => "#@enterprise=[1.3.6.1.3.92.1.1.7], @timestamp=#@value=802993822>, @varbind_list=[#@name=[1.3.6.1.3.92.1.1.5.1.3.202.169.174.90], @value=#@value=1>>], @specific_trap=2, @source_ip=\"10.10.10.12\", @agent_addr=#@value=\"\xC0\xA8\a\f\">, @generic_trap=6>",

如何获取 @source_ip 并为该值添加一个新字段?

有人可以提示我如何解决这个问题吗?

我很惊讶你的配置竟然能编译。您应该多了解一下 grok 的工作原理。例如,您通常不需要将 add_field 与 grok 一起使用。

grok 模式包括您要捕获的数据之前和之后的内容。这些项目 "anchor" 您的正则表达式。在你的情况下,它是 '@source_ip="' 开始和 '"' 结束。中间的东西是你真正想要捕捉到一个新领域的东西。

您的模式看起来更像这样:

match => { "message" => "@source_ip=\\"%{IP:source_ip}\\"" }

这应该会为您提供一个包含该值的新 "source_ip" 字段。

\\\" 对斜杠和引号进行转义并将匹配 \"。