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

如何将JSON格式OTLP请求转为Protobuf并发送至Elastic APM?

解决Elastic APM OTLP/HTTP Protobuf格式转换与请求问题

正确的Content-Type

发送OTLP/HTTP Protobuf格式的追踪事件时,Content-Type必须设置为application/x-protobuf。

JSON转Protobuf并发送的几种方法

方法1:使用OpenTelemetry CLI(otel-cli)

这是最简便的方式,无需手动转换格式,工具会自动生成Protobuf负载并发送:

otel-cli span create \
  --endpoint https://REDACTED.apm.ap-southeast-2.aws.found.io:443/v1/traces \
  --header "Authorization: ApiKey REDACTED" \
  --name "test" \
  --trace-id 00000000000000000000000000000001 \
  --span-id 0000000000000001 \
  --start 1544712660300000000 \
  --end 1544712660600000000

注意:OTLP标准端点是/v1/traces,而非原请求中的/intake/v2/events,Elastic APM的OTLP端点使用这个标准路径。

方法2:使用protoc工具手动转换

  1. 获取OTLP的Protobuf定义文件:包括trace.proto以及依赖的common.proto、resource.proto文件
  2. 将JSON数据转换为二进制Protobuf文件:
protoc --proto_path=. --encode=opentelemetry.proto.trace.v1.TracesData trace.proto < your-trace.json > trace.pb
  1. 用curl发送二进制文件:
curl --location --request POST 'https://REDACTED.apm.ap-southeast-2.aws.found.io/v1/traces' \
--header 'Content-Type: application/x-protobuf' \
--header 'Authorization: ApiKey REDACTED' \
--data-binary '@trace.pb'

方法3:在Postman中使用Protobuf插件

  1. 安装Postman的「Protobuf Support」插件
  2. 将OTLP的trace.proto定义文件导入插件
  3. 请求中设置Content-Type为application/x-protobuf,通过插件可视化界面填入追踪数据(对应原JSON中的字段),插件会自动生成Protobuf负载
  4. 添加Authorization: ApiKey REDACTED请求头,发送到https://REDACTED.apm.ap-southeast-2.aws.found.io/v1/traces端点

关键注意事项

  • Elastic APM的OTLP端点不需要kbn-xsrf请求头,可直接移除
  • trace_id和span_id需符合OTLP规范:trace_id是16字节(32位十六进制字符串),span_id是8字节(16位十六进制字符串),原示例中的"1"需补全为符合长度的值(如00000000000000000000000000000001对应trace_id)

内容的提问来源于stack exchange,提问作者Ryan.Bartsch

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 09:20:25