向OpenTelemetry collector发送追踪数据的JSON请求示例咨询
OTLP Collector 接收JSON格式Trace数据的请求规范
OTLP 原生支持 HTTP + JSON 传输协议,不需要依赖官方SDK做Protobuf序列化,你直接按规范构造JSON发HTTP请求即可,注意不要把请求发到gRPC的4317端口,JSON请求走HTTP默认端口4318即可。
基础请求规则
- 请求方法固定为
POST - Trace数据请求路径固定为
/v1/traces,指标数据对应路径/v1/metrics,日志数据对应路径/v1/logs - 请求头必须携带
Content-Type: application/json
可直接参考的请求示例
下面是最小可运行的curl示例,你可以对照结构在Smalltalk里组装对应JSON结构:
curl -X POST http://<你的OTLP Collector地址>:4318/v1/traces \ -H "Content-Type: application/json" \ -d '{ "resourceSpans": [ { "resource": { "attributes": [ { "key": "service.name", "value": { "stringValue": "your-smalltalk-service" } } ] }, "scopeSpans": [ { "scope": { "name": "custom-smalltalk-otel-integration" }, "spans": [ { "traceId": "32位十六进制字符串格式的Trace ID,对应16字节原始TraceID,例如4bf92f3577b34da6a3ce929d0e0e4736", "spanId": "16位十六进制字符串格式的Span ID,对应8字节原始SpanID,例如00f067aa0ba902b7", "name": "your-span-name", "kind": 2, "startTimeUnixNano": "1718000000000000000", "endTimeUnixNano": "1718000001200000000", "attributes": [ { "key": "biz.tag", "value": { "stringValue": "test-value" } } ], "status": { "code": 1 } } ] } ] } ] }'
常见踩坑点
- 所有时间字段必须传纳秒级Unix时间戳,传秒、毫秒会导致时间解析异常
- Trace ID、Span ID必须是定长十六进制字符串,不要传原始二进制值,不要加
0x前缀 - Span的kind字段是数字枚举值,不要传字符串:
1=内部调用、2=服务端、3=客户端、4=生产者、5=消费者 - 如果Collector配置了鉴权、CORS规则,对应在请求头加
Authorization、Origin字段即可,Payload结构不需要调整 - 本地调试时可以把Collector日志级别调到debug,收到格式错误的请求会直接打印具体字段的报错信息,不用盲目排查结构问题
内容的提问来源于stack exchange,提问作者Apollo
相关产品推荐
相关产品推荐

