Logstash _grokparsefailure问题?

时间:2016-04-08 05:44:26

标签: logstash grok

我遇到了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 }


      }

我的输入如下所示。

  

"消息" => "#@ enterprise = [1.3.6.1.3.92.1.1.7],@ timestamp =#@ value = 802993822&gt ;, @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 = \& #34; \ xC0 \ xA8 \ a \ f \">,@ generic_trap = 6>",

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

有人可以告诉我如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

我很惊讶你的配置甚至编译。你应该更多地了解一下grok是如何工作的。例如,您通常不需要将add_field与grok一起使用。

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

你的模式看起来更像是这样:

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

这会给你一个包含值的新“source_ip”字段。

\\\“转义斜杠和引号,并匹配\”。