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-elasticsearchLogstashから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各フィールドのレコードを '[] include_brackets => true` で囲んで、with the optionそれを処理するためのフィルタを追加するように要求することです。

最終的に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
  }
}

おすすめ記事