API
Jaeger 组件实现了各种用于保存或检索追踪数据的 API。
以下标签用于描述 API 兼容性保证。
- 稳定 - API 保证向后兼容性。如果将来会进行破坏性更改,它们将导致新的 API 版本,例如
/api/v2
URL 前缀或 IDL 中的不同命名空间。 - 内部 - 这些 API 旨在用于 Jaeger 组件之间的内部通信,不建议外部组件使用。
- 已弃用 - 这些 API 仅出于兼容旧版本而维护,将来会被淘汰。
自 Jaeger v1.32 起,服务 gRPC 端点的 **jaeger-collector** 和 **jaeger-query** 服务端口启用了 gRPC 反射 。不幸的是,内部使用的 gogo/protobuf
与官方的 golang/protobuf
存在兼容性问题 ,因此目前只有 list
反射命令能正常工作。
Span 报告 API
**jaeger-collector** 是 Jaeger 后端中能够接收 Span 的组件。目前它支持两组不重叠的 API。
OpenTelemetry 协议 (稳定)
自 v1.35 起,Jaeger 后端可以从 OpenTelemetry SDKs 接收其原生 OpenTelemetry 协议 (OTLP) 追踪数据。不再需要为 OpenTelemetry SDKs 配置 Jaeger 导出器,也无需在 OpenTelemetry SDKs 和 Jaeger 后端之间部署 OpenTelemetry Collector。
OTLP 数据支持以下格式:(1) 二进制 gRPC,(2) HTTP Protobuf,(3) HTTP JSON。有关 OTLP 接收器的更多详细信息,请参阅官方文档 。请注意,**jaeger-collector** 并非支持所有配置选项(请参阅 --collector.otlp.*
CLI 标志),并且由于 Jaeger 不存储其他遥测类型,因此只接受追踪数据。
端口 | 协议 | 端点 | 格式 |
---|---|---|---|
4317 | gRPC | 不适用 | Protobuf |
4318 | HTTP | /v1/traces | Protobuf 或 JSON |
通过 gRPC 的 Protobuf (稳定)
**已弃用**:我们推荐使用 OpenTelemetry 协议。
自 Jaeger v1.11 起,用户应用程序与 **jaeger-collector** 之间的官方协议是 collector.proto IDL 文件中定义的 jaeger.api_v2.CollectorService
gRPC 端点。同一个端点可用于将追踪数据从 SDK 直接提交到 **jaeger-collector**。
通过 HTTP 的 Thrift (稳定)
**已弃用**:我们推荐使用 OpenTelemetry 协议。
jaeger.thrift 格式的 payload 可以通过 HTTP POST 请求提交到 /api/traces
端点,例如 https://jaeger-collector:14268/api/traces
。Batch
结构需要使用 Thrift 的 binary
编码,并且 HTTP 请求应指定 Content-Type 头。
Content-Type: application/vnd.apache.thrift.binary
通过 HTTP 的 JSON (不适用)
**jaeger-collector** 不接受官方的 Jaeger JSON 格式。Jaeger 确实通过 JSON 接受 OpenTelemetry 协议(参见上文)。
Zipkin 格式 (稳定)
**jaeger-collector** 还可以接受多种 Zipkin 数据格式的 Span,即 JSON v1/v2 和 Thrift。需要配置 **jaeger-collector** 以启用 Zipkin HTTP 服务器,例如在 Zipkin 采集器使用的端口 9411 上。该服务器启用了两个接受 POST 请求的端点。
/api/v1/spans
用于提交 Zipkin JSON v1 或 Zipkin Thrift 格式的 Span。/api/v2/spans
用于提交 Zipkin JSON v2 格式的 Span。
跟踪检索 API
可以通过调用 **jaeger-query** 服务来检索存储中的追踪。
gRPC/Protobuf (稳定)
程序化检索追踪和其他数据的推荐方式是通过 query.proto IDL 文件中定义的 jaeger.api_v2.QueryService
gRPC 端点。在默认配置下,此端点可从 jaeger-query:16685
访问。
HTTP JSON (内部)
Jaeger UI 通过 JSON API 与 **jaeger-query** 服务通信。例如,可以通过向 https://jaeger-query:16686/api/traces/{trace-id-hex-string}
发送 GET 请求来检索追踪。此 JSON API 是有意未文档化的,并可能随时更改。
远程存储 API (稳定)
当使用 grpc
存储类型(又称远程存储)时,只要后端实现了 gRPC 远程存储 API ,Jaeger 组件就可以使用自定义存储后端。
远程采样配置 (稳定)
此 API 支持 Jaeger 的远程采样协议,该协议在 sampling.proto IDL 文件中定义。
**jaeger-collector** 实现了此 API。有关如何使用采样策略配置 Collector 的详细信息,请参见远程采样。
下表列出了可用于查询采样策略的不同端点和格式。官方的 HTTP/JSON 端点使用标准的 Protobuf 到 JSON 映射 。
组件 | 端口 | 端点 | 格式 | 说明 |
---|---|---|---|---|
收集器 | 14268 | /api/sampling | HTTP/JSON | 推荐用于大多数 SDK |
收集器 | 14250 | sampling.proto | gRPC | 适用于希望使用 gRPC 的 SDK(例如 OpenTelemetry Java SDK) |
示例
在一个终端中运行 all-in-one
$ go run ./cmd/all-in-one \
--sampling.strategies-file=cmd/all-in-one/sampling_strategies.json
在另一个终端中查询端点
$ curl "https://:14268/api/sampling?service=foo"
{"strategyType":"PROBABILISTIC","probabilisticSampling":{"samplingRate":1}}
服务依赖图 (内部)
可以从 **jaeger-query** 服务在 /api/dependencies
端点处检索。GET 请求需要两个参数。
endTs
(自 epoch 以来的毫秒数)- 时间间隔的结束时间lookback
(毫秒)- 时间间隔的长度(即 start-time + lookback = end-time)。
返回的 JSON 是一个边列表,表示为元组 (caller, callee, count)
。
对于服务图的程序化访问,推荐的 API 是上述的 gRPC/Protobuf。
服务性能监控 (内部)
请参考SPM 文档