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

如何通过Logstash将Kafka数据传入REST API的HTTP请求体?

问题解答

当然可行,你的需求可以通过Logstash的正确配置实现,先指出你现有配置里的几个关键问题:

  • Input块语法错误:elasticsearch和kafka插件不能嵌套,input下每个数据源插件是平级配置的
  • 错误使用http filter:http filter的作用是调用API拉取数据并添加到当前事件,而不是把当前事件数据推送到API。要推送事件数据到外部API,应该用http output插件

场景1:从Kafka获取数据,发送到REST API(同时可选存入Elasticsearch)

如果你的核心需求是从Kafka拿到浮点数值,塞进REST API的请求体,同时把结果存入ES,配置应该这样写:

input {
  # 直接用kafka input获取数据,不需要嵌套elasticsearch
  kafka {
    bootstrap_servers => 'kafka:9094'
    topics => ["你的Kafka主题名"]
    client_id => "自定义客户端ID"
    group_id => "消费组ID"
    codec => json {}
  }
}

filter {
  # 如果需要对Kafka来的浮点数据做处理,比如提取字段、格式转换,在这里添加filter
  # 假设Kafka传来的字段是"float_value",要放到API请求体的"instances"字段里
  mutate {
    add_field => {
      # 这里可以直接引用Kafka事件里的字段,比如%{float_value}
      "api_body_instances" => "%{float_value}"
    }
  }
}

output {
  # 第一个output:发送数据到REST API
  http {
    verb => "POST"
    url => "http://你的API地址"
    body_format => "json"
    # 这里直接构造请求体,引用filter里处理好的字段或者原始Kafka字段
    body => {
      "instances" => "%{api_body_instances}"
      # 如果需要其他字段,直接添加即可
      # "other_field" => "%{original_field}"
    }
    # 可选:如果API有认证,添加headers配置
    # headers => {
    #   "Authorization" => "Bearer 你的令牌"
    # }
  }

  # 第二个output:把数据存入Elasticsearch
  elasticsearch {
    hosts => ["elasticsearch:9200"]
    index => "demo_results"
  }
}

场景2:从Elasticsearch查询数据,发送到REST API

如果你的需求是先从ES查询数据,再把这些数据发送到API,那需要用elasticsearch input插件来查询ES,再用http output发送:

input {
  elasticsearch {
    hosts => ["elasticsearch:9200"]
    # 配置查询条件,比如查询demo_results索引里的所有数据
    index => "demo_results"
    query => '{ "query": { "match_all": {} } }'
    # 可选:设置查询间隔,比如每1分钟查一次
    schedule => "* * * * *"
    codec => json {}
  }
}

filter {
  # 对ES查询出来的数据做处理,比如提取需要的字段
  mutate {
    # 假设ES里的目标字段是"float_value",准备放到API请求体
    add_field => {
      "api_instances" => "%{float_value}"
    }
  }
}

output {
  http {
    verb => "POST"
    url => "http://你的API地址"
    body_format => "json"
    body => {
      "instances" => "%{api_instances}"
    }
  }
}

关键注意点

  • 字段引用:Logstash里用%{字段名}来引用事件中的字段,确保你的字段名和Kafka/ES里的实际字段一致
  • HTTP插件配置:如果API返回响应,你可以在output的http插件里添加response_code => 200来判断请求是否成功,或者用tags标记失败的事件
  • 语法检查:配置文件要严格遵循YAML语法,注意缩进,每个键值对的冒号后面要有空格

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 00:55:16