You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Logstash管道中用Ruby过滤器获取动态字段数据?

Logstash处理动态字段名的正确配置方案

原配置的核心问题是Ruby过滤器的代码块中错误使用了Logstash的字段插值语法(%{}),这个语法仅在Logstash的配置参数(如mutate的add_field)中生效,无法在Ruby代码里直接解析。

方案一:直接使用原指定字段(推荐)

不需要额外通过mutate复制字段,直接从your_data_is_in获取动态字段名:

filter {
  ruby {
    tag_on_exception => '_my_exception'
    code => '
      # 获取动态字段的名称
      dynamic_field_name = event.get("your_data_is_in")
      # 校验字段是否存在,避免异常
      if dynamic_field_name && event.include?(dynamic_field_name)
        # 根据动态字段名提取目标数据
        event.set("the_data_i_need", event.get(dynamic_field_name))
      else
        # 动态字段不存在时打标签,方便后续排查
        event.tag("_dynamic_field_not_found")
      end
    '
  }
}

方案二:保留mutate字段复制的版本

如果需要保留dynamic_fieldname这个中间字段,修正Ruby代码的字段获取逻辑即可:

filter{
  mutate {
    add_field => { "dynamic_fieldname" => "%{your_data_is_in}" }
  }
  ruby {
    tag_on_exception => '_my_exception'
    code => '
      # 先获取中间字段存储的动态字段名
      target_field = event.get("dynamic_fieldname")
      if target_field && event.include?(target_field)
        event.set("the_data_i_need", event.get(target_field))
      else
        event.tag("_dynamic_field_not_found")
      end
    '
  }
}

关键注意点

  • Ruby代码块中必须通过event.get("字段名")获取字段值,不能使用%{字段名}的插值语法。
  • 添加event.include?(字段名)的判断可以避免因动态字段不存在导致的异常,同时通过tag标记异常场景便于排查。

内容的提问来源于stack exchange,提问作者gl4ssiest

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 06:23:28