2017-02-24 84 views
0

如果已經詢問此問題,但我無法在任何地方找到它,我表示歉意。如何在Logstash中將json拆分爲多個事件,其中事件是散列的一部分(唯一)

在Logstash我有JSON輸入,看起來像這樣:

{ 
    common_field: "commonValue", 
    events: { 
     ID_1: { 
      name: "name1", 
      other_field: "value1", 
      ... 
     }, 
     ID_2: { 
      name: "name2", 
      other_field: "value2", 
      ... 
     }, 
     ID_3: { 
      name: "name3", 
      other_field: "value3", 
      ... 
     }, 
     ID_4: { 
      name: "name4", 
      other_field: "value4", 
      ... 
     } 
    } 
} 

什麼是logstash最好的方式來爲每一個「ID」獨立的事件? Logstash不允許我分割「事件」,並且我得到一個標籤:[0] "_split_type_failure"。任何指導都會非常有幫助!

回答

1

如果ID_1/ID_2/ID_3總是相同,則可以使用clone篩選器克隆事件,然後刪除克隆上的其他字段。如果他們不是,據我所知,唯一的方法就是使用自定義插件。

我上次檢查時(幾年前),那麼clone使用的機制(yield)不適用於ruby過濾器。

要使用克隆,你可以這樣做:

clone { 
    clones => ["ID_1","ID_2"..,"ID_n"] 
} 
if [type] == "ID_1" { 
    mutate { 
    remove_field => ["[events][ID_2]","[events][ID_3]",..."[events][ID_n]"] 
    rename => { 
     "[events][ID_1][name]" => "name", 
     "[events][ID_1][other_field]" => "other_field" 
    } 
    } 
} else if [type] == "ID_2" { 
    mutate { 
    remove_field => ["[events][ID_1]","[events][ID_3]",..."[events][ID_n]"] 
    rename => { 
     "[events][ID_2][name]" => "name", 
     "[events][ID_2][other_field]" => "other_field" 
    } 
    } 
} ... 
+0

非常感謝您!我試圖使用紅寶石過濾器,它不工作。我會嘗試克隆過濾器! –

+0

再次感謝您的幫助。因此,當我使用克隆過濾器時,我製作的每個克隆事件都具有包含所有ID及其字段的「事件」字段。如何從我不想要的「events」字段中刪除數據,並將每個事件的數據放入他們自己的字段中? –

+0

非常感謝您的幫助!這工作! –

0

怎麼樣的哈希值轉換成數組,然後數組拆分?

我會做類似

ruby { code => "event.set('events_array', event.get('events').to_a) "} 
split {field => "events_array" 
     target => "new_object" 
     } 
相關問題