2017-02-09 51 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