我遇到了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并为值添加新字段?
有人可以告诉我如何解决这个问题吗?
答案 0 :(得分:0)
我很惊讶你的配置甚至编译。你应该更多地了解一下grok是如何工作的。例如,您通常不需要将add_field与grok一起使用。
grok模式包含您要捕获的数据之前和之后的内容。这些项目“锚定”您的正则表达式。在你的情况下,它是'@ source_ip =''开始和'''结束。中间的东西是你真正想要捕捉到新领域的东西。
你的模式看起来更像是这样:
match => { "message" => "@source_ip=\\\"%{IP:source_ip}\\\"" }
这会给你一个包含值的新“source_ip”字段。
\\\“转义斜杠和引号,并匹配\”。