Ukraine flag 我们与在乌克兰的朋友和同事们同在。如需支持乌克兰,请访问此页面

API

版本  1.71 最新 前往最新的 2.x 版本

Jaeger 组件实现了各种用于保存或检索追踪数据的 API。

以下标签用于描述 API 兼容性保证。

  • 稳定 - API 保证向后兼容性。如果将来会进行破坏性更改,它们将导致新的 API 版本,例如 /api/v2 URL 前缀或 IDL 中的不同命名空间。
  • 内部 - 这些 API 旨在用于 Jaeger 组件之间的内部通信,不建议外部组件使用。
  • 已弃用 - 这些 API 仅出于兼容旧版本而维护,将来会被淘汰。

自 Jaeger v1.32 起,服务 gRPC 端点的 **jaeger-collector** 和 **jaeger-query** 服务端口启用了 gRPC 反射external link - Jaeger 分布式追踪平台。不幸的是,内部使用的 gogo/protobuf 与官方的 golang/protobuf 存在兼容性问题external link - Jaeger 分布式追踪平台,因此目前只有 list 反射命令能正常工作。

Span 报告 API

**jaeger-collector** 是 Jaeger 后端中能够接收 Span 的组件。目前它支持两组不重叠的 API。

OpenTelemetry 协议 (稳定)

自 v1.35 起,Jaeger 后端可以从 OpenTelemetry SDKs 接收其原生 OpenTelemetry 协议 (OTLP)external link - Jaeger 分布式追踪平台 追踪数据。不再需要为 OpenTelemetry SDKs 配置 Jaeger 导出器,也无需在 OpenTelemetry SDKs 和 Jaeger 后端之间部署 OpenTelemetry Collector。

OTLP 数据支持以下格式:(1) 二进制 gRPC,(2) HTTP Protobuf,(3) HTTP JSON。有关 OTLP 接收器的更多详细信息,请参阅官方文档external link - Jaeger 分布式追踪平台。请注意,**jaeger-collector** 并非支持所有配置选项(请参阅 --collector.otlp.* CLI 标志),并且由于 Jaeger 不存储其他遥测类型,因此只接受追踪数据。

端口协议端点格式
4317gRPC不适用Protobuf
4318HTTP/v1/tracesProtobuf 或 JSON

通过 gRPC 的 Protobuf (稳定)

**已弃用**:我们推荐使用 OpenTelemetry 协议。

自 Jaeger v1.11 起,用户应用程序与 **jaeger-collector** 之间的官方协议是 collector.protoexternal link - Jaeger 分布式追踪平台 IDL 文件中定义的 jaeger.api_v2.CollectorService gRPC 端点。同一个端点可用于将追踪数据从 SDK 直接提交到 **jaeger-collector**。

通过 HTTP 的 Thrift (稳定)

**已弃用**:我们推荐使用 OpenTelemetry 协议。

jaeger.thriftexternal link - Jaeger 分布式追踪平台 格式的 payload 可以通过 HTTP POST 请求提交到 /api/traces 端点,例如 https://jaeger-collector:14268/api/tracesBatch 结构需要使用 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.protoexternal link - Jaeger 分布式追踪平台 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 远程存储 APIexternal link - Jaeger 分布式追踪平台,Jaeger 组件就可以使用自定义存储后端。

远程采样配置 (稳定)

此 API 支持 Jaeger 的远程采样协议,该协议在 sampling.protoexternal link - Jaeger 分布式追踪平台 IDL 文件中定义。

**jaeger-collector** 实现了此 API。有关如何使用采样策略配置 Collector 的详细信息,请参见远程采样

下表列出了可用于查询采样策略的不同端点和格式。官方的 HTTP/JSON 端点使用标准的 Protobuf 到 JSON 映射external link - Jaeger 分布式追踪平台

组件端口端点格式说明
收集器14268/api/samplingHTTP/JSON推荐用于大多数 SDK
收集器14250sampling.protoexternal link - Jaeger 分布式追踪平台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 文档