Logstash - take 2 - 过滤器将消息从 IntelMQ/python/redis 发送到 ELK

Logstash - take 2 - 过滤器将消息从 IntelMQ/python/redis 发送到 ELK

紧接着这个问题,https://stackoverflow.com/questions/40768603/logstash-trying-to-make-sense-of-strings-passed-by-intelmq-in-elasticsearch我正在尝试创建一个细化/创建一个过滤器来接收从logstash 到kibana 的消息。

虽然最初的要求和答案几乎是零散的,但添加到 IntelMQ 的一些新机器人现在在字段上放置了空格。显然,他们完全破坏了过滤器,更糟糕的是在 Elastic Search 中创建了虚假的新字段和日期。

我还发现所提到的线程中的解决方案确实很好地考虑了字符串的开头和结尾。

字符串本身类似于:

{u'feed': u'openbl', u'reported_source_ip': u'115.79.215.79', u'source_cymru_cc': u'VN', u'source_time': u'2016-06-25T11:15:14+00:00', u'feed_url': u'http://www.openbl.org/lists/date_all.txt', u'taxonomy': u'Other', u'observation_time': u'2016-11-20T22:51:25', u'source_ip': u'115.79.215.79', u'source_registry': u'apnic', u'source_allocated': u'2008-07-17', u'source_bgp_prefix': u'115.79.192.0/19', u'type': u'blacklist', u'source_as_name': u'VIETEL-AS-AP Viettel Corporation, VN', u'source_asn':u'7552'}

该怎么办?

答案1

显而易见的解决方案是要求logstash将每个字段的记录括在 '[] with the optioninclude_brackets => true` 中,然后添加过滤器来处理它。

归根结底,考虑到来自 Redis 的字符串,导入数据的正确过滤器/etc/logstash/conf.d/filter.conf是:

filter {
  mutate {
    gsub => [
       "message", "{u'", "",
       "message", "': u'", ": [",
       "message", "', u'", "], ",
       "message", "'}", "]"
    ]
  }
  kv {
    source => "message"
    field_split => ", "
    value_split => ": "
    remove_tag => [ "_jsonparsefailure" ]
    include_brackets => true
  }
}

相关内容