【问题标题】:Evaluate field as expression in Logstash filter将字段评估为 Logstash 过滤器中的表达式
【发布时间】:2016-11-11 14:03:48
【问题描述】:

我在 Logstash 事件中有一个自定义字段定义为表达式:

{ "customIndex" => "my-service-%{+YYYY.MM}" }

以及为 elasticsearch 输出插件计算索引名称的过滤器:

filter {
  if [customIndex] {
    mutate {
      add_field => { "indexName" => "custom-%{customIndex}" }
    } 
  } else {
    mutate {
      add_field => { "indexName" => "common-%{+YYYY.MM.dd}" }
    }
  }
}

但对于自定义索引,它会创建 invalid 名称 custom-my-service-%{+YYYY.MM} 并且不会评估 %{+YYYY.MM} 表达式。

是否可以评估字段并获得custom-my-service-2016.11

【问题讨论】:

    标签: logstash


    【解决方案1】:

    如果您可以将创建的字段重新格式化为:

    { "customIndex" => "my-service-%Y.%m" }
    

    那么这个 Ruby 过滤器就可以解决问题:

    ruby {
        init => "require 'date'"
        code => "event['indexName'] = 'custom-' + Date.today.strftime(event['customIndex'])"
    }
    

    Here 是关于您可以使用的占位符的文档。

    【讨论】:

    • 我对 else 部分没有任何问题。我对if部分感兴趣。即使您的建议对我不起作用,因为它需要 Logstash 级别的硬编码时间模式并且使其不灵活。我的观点是让 Logstash 更加灵活,并将日期模式作为收入部分。因此,一个应用程序将每小时使用索引,每天使用另一个等。
    • @moleksyuk 更新了答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-09
    • 2012-02-16
    • 2018-05-19
    • 2012-01-18
    • 2011-06-03
    相关资源
    最近更新 更多