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

如何在Logstash HTTP Filter中以数组形式传递tags字段?

Logstash HTTP Filter传递数组字段的解决方案

你当前的配置中,使用%{tags}进行字段插值时,数组类型的tags会被转换为字符串传输,导致API无法收到原生数组格式。以下是两种可行的解决方法:


方法一:使用JSON格式插值(推荐)

利用Logstash sprintf语法的%{+json:字段名}格式,直接将字段以原生JSON结构插入请求体,保留数组类型。

修改后的HTTP Filter配置:

http {
    url => "${TAG_GENERATOR_URL}"
    body =>  {
        "previous_tags" => "%{+json:tags}"
    }
    verb => POST
    body_format => "json"
    ecs_compatibility => "disabled"
    target_body => tmp
    add_field => {
        "tag.version" => "${TAG_LATEST_VERSION}"
        "new_tags" => "%{[tmp][tags]}"
    }
}

方法二:通过Ruby Filter构造请求体

先使用Ruby Filter创建包含数组字段的请求体哈希,再在HTTP Filter中直接引用该哈希,避免字符串插值带来的类型转换。

步骤1:添加Ruby Filter

ruby {
    code => '
        event.set("[http_request_body][previous_tags]", event.get("tags"))
    '
}

步骤2:修改HTTP Filter配置

http {
    url => "${TAG_GENERATOR_URL}"
    body => "%{[http_request_body]}"
    verb => POST
    body_format => "json"
    ecs_compatibility => "disabled"
    target_body => tmp
    add_field => {
        "tag.version" => "${TAG_LATEST_VERSION}"
        "new_tags" => "%{[tmp][tags]}"
    }
}

原理说明

常规的%{tags}插值会将数组转换为字符串形式(如"foo,bar"或序列化后的JSON字符串),而%{+json:tags}会直接输出字段的原生JSON表示;通过Ruby Filter构造请求体则是直接将数组字段赋值给哈希,从根源上避免了类型转换问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 00:37:40