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

Logstash 1.5迁移至6.8.0:Ruby代码拆分data字段键值对问题求助

解决Logstash 6.8.0中拆分data数组内键值对的问题

嘿,我一眼就看出问题所在啦!你当前的代码没法正常工作,核心原因是你的data字段是数组类型,而不是直接的哈希对象。看你的日志示例:

{"data":[{"key1":"value1","key2":"value2","key3":"value3"}]}

这里data的值是一个包含单个哈希的数组,而你之前写的代码直接对event.get('data')做each遍历,其实遍历的是数组里的元素(也就是那个哈希),但你需要先把数组里的哈希取出来再处理。

修正后的Ruby代码

直接用这段代码替换你原来的配置:

ruby {
    code => "
        # 获取data字段的数组值
        data_array = event.get('data')
        # 先做安全校验:确保是数组且不为空
        if data_array.is_a?(Array) && !data_array.empty?
            # 取出数组里的第一个哈希对象
            data_hash = data_array.first
            # 遍历哈希的键值对,添加到event中
            data_hash.each {|k, v| event.set(k, v) }
            # 删除原data字段
            event.remove('data')
        end
    "
}

代码说明

  • 先做了安全判断:避免因为data不是数组或者为空导致报错
  • 针对你的日志结构,取出数组的第一个元素(也就是存储键值对的哈希)
  • 遍历哈希的每个键值对,用event.set(k, v)把它们添加到顶层事件中
  • 最后移除原来的data字段

扩展说明

如果你的data数组里可能包含多个哈希对象,你可以根据业务需求调整:

  • 如果需要把所有哈希的键值对都合并到顶层,要注意键名重复会覆盖的问题
  • 如果需要保留数组结构,只是展开每个元素,可以考虑用split过滤器或者其他方式处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 19:07:32