この質問に続き、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
}
}