Следуя по пятам этого вопроса, https://stackoverflow.com/questions/40768603/logstash-trying-to-make-sense-of -strings-made-by-intelmq-in-elasticsearch Я пытаюсь создать уточняющий / создать фильтр для получения сообщений от logstash до kibana.
В то время как исходные требования и ответы почти не просматриваются, некоторые новые боты, добавленные в IntelMQ, теперь помещают пробелы в поля. Очевидно, они полностью нарушают фильтры и, что еще хуже, создают ложные новые поля и дату в эластичном поиске.
Я также обнаружил, что решение в упомянутом потоке хорошо учитывает начало и конец строк.
Сама строка похожа на:
{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'}
Что делать?
Очевидным решением было попросить logstash
заключить запись каждого поля в '[] с опцией
include_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
}
}