【问题标题】:Add custom field to logstash [closed]将自定义字段添加到 logstash [关闭]
【发布时间】:2015-03-26 19:52:14
【问题描述】:

我正在使用 Twitter 输入和 Elasticsearch 输出到 Logstash。在 logstash 中,我想分析传入的推文并基于某种算法添加一个新字段。我知道我需要编写一个新插件,但我遇到的示例都是 Ruby 中的。

是否可以用 Python 编写插件?如果没有,请分享任何关于如何用 Ruby 编写教程的好教程。

【问题讨论】:

  • 插件不能用 Python 编写。您是否知道文档的Extending Logstash 部分和adding a new filter 的具体示例?
  • 我确实看过这两个,但我不精通 Ruby,所以想问一下是否有任何方法可以在 Python 中做到这一点。

标签: python ruby twitter elasticsearch logstash


【解决方案1】:

我个人不会使用 ruby​​ 代码,而是使用 mutate 插件 (http://logstash.net/docs/1.4.2/filters/mutate)

对于配置,您还可以使用提供的条件。示例可以在这里找到:http://logstash.net/docs/1.4.2/configuration#conditionals

if [type] == 'tweet' {
    mutate {
        add_field => { "newfield" => "value can contain variables from the entire message" }
    }
}

【讨论】:

  • 您建议不要使用 Ruby 插件的任何特殊原因? (很抱歉几个月后又回到这个问题)
  • 如果它已经作为模块可用,为什么要使用核心 ruby​​ 版本?可能没有速度差异(不知道),但信任函数比代码更高。模块也有健全性检查。
  • 谢谢@volker。我尝试使用 mutate 但它不起作用:(我已经提出了another question
【解决方案2】:

如果你的算法不复杂,你可以使用Ruby过滤插件来做你的要求。

例如,

filter {
    ruby {
        code => "
            if event['type'] == 'tweet' 
                event['newfield'] = 'Come from Twitter'
            end 
        "
    }
}

这将添加一个名称为newfield 的字段,值为Come from Twitter

【讨论】:

  • 非常酷。我的算法不会很复杂。引号中的 Ruby 代码的大小/复杂程度是否有限制?
  • 另外,这个add_field 在所有过滤器中都看到了什么?
  • 任何算法都可以在 ruby​​ 代码中运行,如果您可以在 ruby​​ 中实现它。哈哈。学习红宝石并不难。您可以尝试实现自己的算法。此外,添加的新字段可以在 ruby​​ 过滤器下方的以下过滤器中看到。所以,如果你想让 new_field 可以看到,你可以把 ruby​​ 插件作为第一个过滤器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
  • 2019-01-01
  • 1970-01-01
相关资源
最近更新 更多