【问题标题】:Optimizing dictionary translation in logstash优化logstash中的字典翻译
【发布时间】:2017-06-26 23:05:40
【问题描述】:

我正在使用 logstash 解析 csv 文件中的数据并将其推送到 elasticsearch。我有一个包含 600k 行的字典,它使用其中一个字段作为键将其映射到一串值。我目前正在使用这样的翻译插件来实现我所需要的

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 分钟才能完成任务。

这是预期的行为(它是一本大字典)吗?或者有什么办法可以进一步优化这段代码?

【问题讨论】:

  • 好吧,如果您在管道中包含额外的处理步骤,您只能期望处理时间增加,对吧?
  • 真的!但是处理时间增加了 3 倍似乎很多。很想知道是否有更优化的方法来解决这个问题
  • 只需一行,您就可以将其提高 10 倍以上。最后,这一切都取决于这些过滤器是如何实现的。我不太担心csv 一个,但您可能想调查translate 一个。
  • 感谢您的帮助!我正在研究插件实现,看看我是否能更好地理解它。关于我还能如何实现这一点的任何建议?
  • translate{} 应该是一个哈希查找,它应该有最小的开销。您可以通过注释掉 csv{} 并再次运行测试来确定每个过滤器造成的减速有多少。

标签: elasticsearch logstash logstash-file


【解决方案1】:

csv 过滤器可能很昂贵。我编写了一个插件logstash-filter-augment,它的工作原理与translate 几乎相同,但可以更好地处理原生 CSV 文档。您可以使用真正的 CSV 而不是 csv 过滤器来解析字段。

【讨论】:

  • 谢谢!我会试试这个。使用它似乎比使用两个过滤器块干净得多
猜你喜欢
  • 1970-01-01
  • 2018-11-26
  • 2018-06-25
  • 2020-02-05
  • 2022-01-17
  • 1970-01-01
  • 2022-11-30
  • 2022-10-04
相关资源
最近更新 更多