【问题标题】:Logstash _grokparsefailure issues?Logstash _grokparsefailure 问题?
【发布时间】:2016-07-29 06:58:56
【问题描述】:

我遇到了 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>,@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 并为该值添加一个新字段?

谁能告诉我如何解决这个问题?

【问题讨论】:

    标签: logstash grok


    【解决方案1】:

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

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

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

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

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

    \\\" 会转义斜杠和引号,并将匹配 \"。

    【讨论】:

    • 我敢打赌 \\" 只显示在调试输出中,您只需要匹配 IP 周围的(转义)引号。
    猜你喜欢
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-07
    相关资源
    最近更新 更多