elasticsearch 如何从Logstash获取消息数组中的字段?
我一直在尝试配置输入类型为snmptrap和yamlmibdir的logstash管道。这是密码elasticsearch 如何从Logstash获取消息数组中的字段?,elasticsearch,logstash,logstash-grok,logstash-configuration,elasticsearch,Logstash,Logstash Grok,Logstash Configuration,我一直在尝试配置输入类型为snmptrap和yamlmibdir的logstash管道。这是密码 input { snmptrap { host => "abc" port => 1062 yamlmibdir => "/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/snmp-1.3.2/data/ruby/snmp/mibs" } } filter { mutate {
input {
snmptrap {
host => "abc"
port => 1062
yamlmibdir => "/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/snmp-1.3.2/data/ruby/snmp/mibs"
}
}
filter {
mutate {
gsub => ["message","^\"{","{"]
gsub => ["message","}\"$","}"]
gsub => ["message","[\\]",""]
}
json { source => "message" }
split {
field => "message"
target => "evetns"
}
}
output {
elasticsearch {
hosts => "xyz"
index => "logstash-%{+YYYY.MM.dd}"
}
stdout { codec => rubydebug }
}
结果以Kibana JSON格式显示
{
"_index": "logstash-2019.11.18-000001",
"_type": "_doc",
"_id": "Y_5zjG4B6M9gb7sxUJwG",
"_version": 1,
"_score": null,
"_source": {
"@version": "1",
"@timestamp": "2019-11-21T05:33:07.675Z",
"tags": [
"_jsonparsefailure"
],
"1.11.12.13.14.15": "teststring",
"message": "#<SNMP::SNMPv1_Trap:0x244bf33f @enterprise=[1.2.3.4.5.6], @timestamp=#<SNMP::TimeTicks:0x196a1590 @value=55>, @varbind_list=[#<SNMP::VarBind:0x21f5e155 @name=[1.11.12.13.14.15], @value=\"teststring\">], @specific_trap=99, @source_ip=\"xyz\", @agent_addr=#<SNMP::IpAddress:0x5a5c3c5f @value=\"xC0xC1xC2xC3\">, @generic_trap=6>",
"host": "xyz"
},
"fields": {
"@timestamp": [
"2019-11-21T05:33:07.675Z"
]
},
"sort": [
1574314387675
]
}
正如您在message字段中看到的,它是一个数组,因此如何获取数组中的所有字段。也可以选择这些字段显示在Kibana上
ps1。如果在扩展文档中选择类型“Table”,仍然会得到标记\u jsonparsefailure
ps2。即使使用gsub从预期的json结果中删除“\”,为什么仍然得到带有“\”的结果?也许您可以使用kv过滤器,它可以解析键值结构,就像您的消息中的键值结构一样。您的消息的哪一部分是json格式的?您的原始消息不是json,为什么要使用json文件管理器?您需要构建一个grok筛选器来解析snmp消息,或者您可以尝试使用snmp输入筛选器,这将使logstash轮询来自设备的snmp数据并对其进行解析,而不是侦听数据。