Debian
logstash - 採取 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'}
該怎麼辦?
顯而易見的解決方案是要求
logstash
將每個欄位的記錄包含在 '$$ $$
with the option
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 } }