2014-09-27 1 views
3

logstash (1.4.2) 이벤트를 여러 다른 이벤트로 분할하는 방법이 있습니까?Logstash 동적으로 이벤트를 분할

{ "parts" => ["one", "two"], 
    "timestamp" => "2014-09-27T12:29:17.601Z" 
    "one.key=> "1", "one.value"=>"foo", 
    "two.key" => "2", "two.value"=>"bar" 
} 

그리고 나는 다음과 같은 내용으로 두 가지 이벤트를 생성하고 싶습니다 :

내 입력은 다음과 같습니다

{ "key" => "1", "value" => "foo", "timestamp" => "2014-09-27T12:29:17.601Z" } 
{ "key" => "2", "value" => "bar", "timestamp" => "2014-09-27T12:29:17.601Z" } 

문제는 내가 실제 "부분을 알 수 없다는 것입니다 "...

감사합니다.

답변

8

사용자 정의 필터를 사용해야합니다. 새 이벤트를 생성하는 데 필요한 루비 코드 필터에서 yield을 호출 할 수 없습니다. 당신의 config 파일에 filter { custom_split {} }을 넣어 다음

# encoding: utf-8 
require "logstash/filters/base" 
require "logstash/namespace" 

# custom code to break up an event into multiple 
class LogStash::Filters::CustomSplit < LogStash::Filters::Base 
    config_name "custom_split" 
    milestone 1 

    public 
    def register 
    # Nothing 
    end # def register 

    public 
    def filter(event) 
    return unless filter?(event) 
    if event["parts"].is_a?(Array) 
     event["parts"].each do |key| 
     e = LogStash::Event.new("timestamp" => event["timestamp"], 
      "key" => event["#{key}.key"], 
      "value" => event["#{key}.value"]) 
     yield e 
     end 
     event.cancel 
    end 
    end 
end 

을 그리고이 같은

뭔가 (lib 디렉토리/logstash/필터/custom_split.rb 삭제).

+0

와우 - 감사합니다. 도커 이미지 "docker.elastic.co/logstash/logstash:5.5.0"에있는 경우 – pagid

+0

,이 * .rb 파일을 어디에 넣어야합니까? –