elasticsearch 如何从Logstash获取消息数组中的字段?,elasticsearch,logstash,logstash-grok,logstash-configuration,elasticsearch,Logstash,Logstash Grok,Logstash Configuration" /> elasticsearch 如何从Logstash获取消息数组中的字段?,elasticsearch,logstash,logstash-grok,logstash-configuration,elasticsearch,Logstash,Logstash Grok,Logstash Configuration" />

elasticsearch 如何从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 {

我一直在尝试配置输入类型为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 {
        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数据并对其进行解析,而不是侦听数据。