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

Logstash Filter:如何用字段值作为解析JSON后新字段的名称?

Logstash动态生成嵌套字段结构解决方案

问题场景

输入Logstash的JSON事件结构如下(字段值动态变化):

{ 
  "metadata":{
     "app_type":"Foo",
     "app_namespace":"System.Bar",
     "json_string":"{\"test\":true}"
  }
}

需要输出到Elasticsearch的目标结构(保留原始字段):

{
  "metadata":{
     "app_type":"Foo",
     "app_namespace":"System.Bar",
     "json_string":"{\"test\":true}"
  },
  "app_event":{
    "foo":{
      "system_bar":{
        "test":true
      }
    }
  }
}

正确过滤器配置

使用json过滤器解析JSON字符串,再通过ruby过滤器实现动态字段路径的创建:

filter {
  # 先将json_string解析到临时字段,避免直接操作复杂路径
  json {
    source => "[metadata][json_string]"
    target => "[temp_parsed]"
  }

  # 用ruby过滤器处理动态字段逻辑
  ruby {
    code => '
      # 提取并处理app_type:转小写
      app_type = event.get("[metadata][app_type]").downcase
      # 提取并处理app_namespace:转小写+替换点号为下划线
      app_namespace = event.get("[metadata][app_namespace]").downcase.gsub(".", "_")
      # 构建目标字段路径数组
      target_path = ["app_event", app_type, app_namespace]
      # 将解析后的内容写入目标路径
      event.set(target_path, event.get("[temp_parsed]"))
      # 可选:删除临时字段,减少冗余
      event.remove("[temp_parsed]")
    '
  }
}

之前配置的问题分析

  1. 第一种配置的问题:
    json过滤器的target参数不支持直接使用%{}插值语法生成动态字段路径,且未处理大小写转换和点号替换的需求。

  2. 第二种配置的问题:
    Logstash的filter块无法直接使用普通Ruby变量赋值语法,所有字段处理逻辑必须放在ruby过滤器的code代码块内执行,否则会触发配置语法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:10:33