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
  }
}

관련 정보