API
Jaeger 组件实现了各种 API 用于保存或检索追踪数据。
以下标签用于描述 API 兼容性保证。
- stable - 此 API 保证向后兼容。如果将来会进行破坏性更改,将导致新的 API 版本,例如 URL 前缀变为
/api/v2
或 IDL 中使用不同的命名空间。 - internal - 这些 API 用于 Jaeger 组件之间的内部通信,不建议外部组件使用。
- deprecated - 这些 API 仅因兼容遗留系统而维护,将来会被逐步淘汰。
自 Jaeger v1.32 起,服务 gRPC 端点的 jaeger-collector 和 jaeger-query 服务端口启用了gRPC 反射 。不幸的是,内部使用的 gogo/protobuf
与官方的 golang/protobuf
存在兼容性问题 ,因此目前只有 list
反射命令正常工作。
Span 上报 API
jaeger-collector 是 Jaeger 后端用于接收 span 的组件。目前它支持两组不重叠的 API。
OpenTelemetry Protocol (稳定)
自 v1.35 起,Jaeger 后端可以接收 OpenTelemetry SDK 以其原生OpenTelemetry Protocol (OTLP) 格式发送的追踪数据。不再需要使用 Jaeger exporter 配置 OpenTelemetry SDK,也不需要在 OpenTelemetry SDK 和 Jaeger 后端之间部署 OpenTelemetry Collector。
OTLP 数据支持以下格式接收:(1) 二进制 gRPC,(2) Protobuf over HTTP,(3) JSON over HTTP。有关 OTLP 接收器的更多详细信息,请参阅官方文档 。请注意,并非所有配置选项都在 jaeger-collector 中受支持(参阅 --collector.otlp.*
CLI 标志),且只接受追踪数据,因为 Jaeger 不存储其他类型的遥测数据。
端口 | 协议 | 端点 | 格式 |
---|---|---|---|
4317 | gRPC | 不适用 | Protobuf |
4318 | HTTP | /v1/traces | Protobuf 或 JSON |
Protobuf via gRPC (稳定)
已弃用:我们推荐使用 OpenTelemetry 协议。
自 Jaeger v1.11 起,用户应用程序与 jaeger-collector 之间的官方协议是 collector.proto IDL 文件中定义的 jaeger.api_v2.CollectorService
gRPC 端点。同一个端点可用于将 SDK 中的追踪数据直接提交到 jaeger-collector。
Thrift over HTTP (稳定)
已弃用:我们推荐使用 OpenTelemetry 协议。
以 jaeger.thrift 格式承载的数据可以通过 HTTP POST 请求提交到 /api/traces
端点,例如 https://jaeger-collector:14268/api/traces
。Batch
结构体需要使用 Thrift 的 binary
编码进行编码,并且 HTTP 请求应指定内容类型头。
Content-Type: application/vnd.apache.thrift.binary
JSON over HTTP (不适用)
jaeger-collector 没有官方接受的 Jaeger JSON 格式。Jaeger 确实支持通过 JSON 接收 OpenTelemetry 协议数据(参阅上文)。
Zipkin 格式 (稳定)
jaeger-collector 也可以接收几种 Zipkin 数据格式的 span,即 JSON v1/v2 和 Thrift。需要配置 jaeger-collector 以启用 Zipkin HTTP 服务器,例如在 Zipkin collector 使用的端口 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 映射 。
组件 | 端口 | 端点 | 格式 | 备注 |
---|---|---|---|---|
Collector | 14268 | /api/sampling | HTTP/JSON | 推荐用于大多数 SDK |
Collector | 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 "http://localhost: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 文档