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

Logstash v8.12.1中mutate split无法解析AccessList为数组的问题

解决Logstash split过滤器无法生成数组的问题

问题根源

xml插件的xpath提取返回的是数组类型(即便只有一个值),后续的mutate操作(如gsub、convert)未正确处理数组类型,导致split无法将字符串拆分为数组。

修复方案1:调整mutate过滤器逻辑

修改配置,先将xpath返回的数组转为单个字符串,再执行后续处理:

filter {
  xml {
    xpath => ["//Data[@Name='AccessList']/text()", "access_text"]
  }
  # 将xpath返回的数组转为单个字符串
  mutate {
    replace => { "access_text" => "%{access_text}" }
  }
  # 合并多个gsub操作到一个mutate块(提升效率)
  mutate {
    gsub => [
      "access_text", "\s+", "",
      "access_text", "%%", ",",
      "access_text", "^,", ""
    ]
  }
  # 拆分字符串为数组
  mutate {
    split => { "access_text" => "," }
  }
}

修复方案2:使用Ruby过滤器直接处理(更简洁高效)

用Ruby代码直接提取并转换数据,避免多个mutate块的潜在问题:

filter {
  xml {
    xpath => ["//Data[@Name='AccessList']/text()", "access_text"]
  }
  ruby {
    code => '
      # 取数组第一个元素并去除首尾空白
      access_content = event.get("access_text").first.strip
      # 按空白分割,再去掉每个元素的%%前缀,生成数组
      access_array = access_content.split(/\s+/).map { |item| item.delete_prefix("%%") }
      # 将结果存入新字段(或覆盖原字段)
      event.set("access_list", access_array)
    '
  }
  # 可选:删除原始的access_text字段
  mutate {
    remove_field => ["access_text"]
  }
}

验证结果

配置生效后,在Kibana中查看对应字段,会显示为数组类型,格式为:

["4416","4417","4418","4419","4420","4423","4424","1538"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 17:13:13