2017-02-09 103 views
0

我使用logstash從csv文件解析數據並將其推送到elasticsearch。我有一個帶有600k行的字典,它使用其中一個字段作爲鍵將其映射到一串值。我目前使用的翻譯插件,這樣來實現我需要什麼在logstash中優化字典轉換

filter { 
     translate { 
      dictionary_path => "somepath" 
      field => "myfield" 
      override => false 
      destination => "destinationField" 
     } 
    } 

我得到了我的destinationField逗號分隔字符串,我讀使用

filter{ 
    csv { 
     source => "destinationField" 
     columns => ["col1","col2","col3"]    
     separator => "," 
     } 

} 

加入這2塊的結果有所增加我的處理時間縮短了3倍。如果過去需要1分鐘處理並推送所有數據,則現在需要3分鐘才能完成任務。

這是預期的行爲(這是一個大字典)?或者有什麼辦法可以進一步優化這些代碼?

+0

那麼,如果您在流水線中包含額外的處理步驟,則只能預期處理時間會增加,對嗎? – Val

+0

真的!但是處理時間提高3倍似乎很多。很想知道是否有更優化的方法去實現這個 – Vignesh

+0

只需一條線就可以使其達到10倍以上。最後,這一切都取決於如何實施這些過濾器。我並不太擔心'csv',但你可能想研究'translate'。 – Val

回答

0

csv過濾器可能很昂貴。我寫了一個插件logstash-filter-augment,它的工作方式與translate幾乎完全相同,但更好地處理本機CSV文檔。您可以使用真實的CSV而不是csv篩選器來分析字段。

+0

謝謝!我會試試這個。使用這個比使用兩個過濾塊更清潔 – Vignesh