API
Jaeger 支持各种用于保存或检索追踪数据的 API。
以下标签用于描述 API 兼容性保证。
- 稳定(stable) - 此 API 保证向后兼容。如果将来会进行破坏性更改,则将产生新的 API 版本,例如
/api/v2
URL 前缀或 IDL 中的不同命名空间。 - 内部(internal) - 此 API 用于 Jaeger 组件之间的内部通信,不推荐由外部组件使用。
- 已弃用(deprecated) - 此 API 仅出于向后兼容原因而维护,未来将被逐步淘汰。
默认端口
下表列出了 Jaeger 组件使用的默认端口。用户可以通过配置覆盖它们。
写入 API
端口 | 协议 | 端点 | 格式 |
---|---|---|---|
4317 | gRPC | ExportTraceServiceRequest | OTLP Protobuf |
4318 | HTTP | /v1/traces | OTLP Protobuf 或 OTLP JSON |
6831 | UDP | 原始端口 | Legacy Thrift 在 compact Thrift 协议中 |
6832 | UDP | 原始端口 | Legacy Thrift 在 binary Thrift 协议中 |
9411 | HTTP | /api/v1/spans | Zipkin v1 JSON 或 Thrift |
HTTP | /api/v2/spans | Zipkin v2 JSON 或 Protobuf | |
14250 | gRPC | jaeger.api_v2.CollectorService | Legacy Protobuf |
14268 | HTTP | /api/traces | Legacy Thrift |
读取 API
端口 | 协议 | 端点 | 格式 |
---|---|---|---|
16685 | gRPC | jaeger.api_v3.QueryService | 基于 OTLP 的 Protobuf |
gRPC | jaeger.api_v2.QueryService | Legacy Protobuf | |
16686 | HTTP | /api/v3/* | 基于 OTLP 的 JSON over HTTP |
HTTP | /api/* | 内部(非官方)JSON API |
远程采样 API
端口 | 协议 | 端点 | 格式 |
---|---|---|---|
5778 | HTTP | /sampling | sampling.proto via Protobuf 到 JSON 映射 |
5779 | gRPC | jaeger.api_v2.SamplingManager | Protobuf |
追踪接收 API
Jaeger 可以在不同的端口以多种格式接收追踪数据。
OpenTelemetry 协议
状态:稳定
Jaeger 可以从 OpenTelemetry SDK 接收原生格式的追踪数据 OpenTelemetry 协议 (OTLP) 。OTLP 数据接受以下格式
只接受追踪数据,因为 Jaeger 不存储其他遥测类型。有关 OTLP 接收器的更多详细信息,请参阅官方文档。官方文档 。
Legacy Protobuf via gRPC
状态:稳定,已弃用
Jaeger 的 Legacy Protobuf 格式在 collector.proto IDL 文件中定义。对这种格式的支持已从 OpenTelemetry SDK 中移除,仅为向后兼容而维护。
Legacy Thrift over HTTP
状态:稳定,已弃用
Jaeger 的 Legacy Thrift 格式在 jaeger.thrift IDL 文件中定义,仅为向后兼容而维护。Thrift 负载可以通过 HTTP POST 请求提交到 /api/traces
端点,例如 https://jaeger-collector:14268/api/traces
。Batch
结构需要使用 Thrift 的 binary
编码,并且 HTTP 请求应指定 content type header
Content-Type: application/vnd.apache.thrift.binary
Legacy Thrift over UDP
状态:稳定,已弃用
此 API 保留是为了与旧版 Jaeger 客户端向后兼容。
主要 API 是一个 UDP 包,其中包含在 [jaeger-idl] 仓库中的 jaeger.thrift IDL 文件中定义的 Thrift 编码的 Batch
结构。大多数 Jaeger 客户端使用 Thrift 的 compact
编码,但一些客户端库(特别是 Node.js)不支持它,并使用 Thrift 的 binary
编码(发送到不同的 UDP 端口)。
Zipkin 格式
状态:稳定
Jaeger 可以接受几种 Zipkin 数据格式的 Span,即 JSON v1/v2 和 Thrift。需要配置 jaeger-collector 以启用 Zipkin HTTP 服务器,例如在 Zipkin collector 使用的端口 9411 上。服务器启用两个期望 POST 请求的端点
/api/v1/spans
用于提交 Zipkin v1 JSON 或 Thrift 格式的 Span。/api/v2/spans
用于提交 Zipkin v2 JSON 或 Protobuf 格式的 Span。
追踪检索 API
保存在存储中的追踪数据可以通过调用 jaeger-query 服务进行检索。
Protobuf via gRPC 查询
状态:稳定
通过编程方式检索追踪数据和其他数据的推荐方法是通过 api_v3/query_service.proto IDL 文件中定义的 jaeger.api_v3.QueryService
gRPC 端点。在默认配置中,此端点可通过端口 :16685
访问。遗留的 api_v2 也受支持。
JSON over HTTP 查询
状态:稳定
这是上面 api_v3/query_service.proto 的 JSON/HTTP 版本(参见 Swagger 文件)。
内部 HTTP JSON
状态:内部
Jaeger UI 通过 JSON API 与 jaeger-query 服务通信。例如,可以通过 GET 请求访问 https://jaeger-query:16686/api/traces/{trace-id-hex-string}
来检索追踪。此 JSON API 故意未文档化,并且可能会更改。
远程存储 API
状态:稳定
当使用 grpc
存储类型(即远程存储)时,只要自定义存储后端实现了 gRPC 远程存储 API ,Jaeger 组件就可以使用它们。
远程采样配置
状态:稳定
此 API 支持 Jaeger 的远程采样协议,该协议在 sampling.proto IDL 文件中定义。有关如何使用采样策略配置 Jaeger 的详细信息,请参阅远程采样。
服务依赖图
状态:内部
可以从 /api/dependencies
端点检索。GET 请求期望两个参数
endTs
(自 epoch 以来的毫秒数)- 时间间隔的结束时间lookback
(毫秒)- 时间间隔的长度(即 start-time + lookback = end-time)。
返回的 JSON 是边的列表,表示为元组 (caller, callee, count)
。
对于对服务图进行编程访问,建议的 API 是上面描述的 gRPC/Protobuf。
服务性能监控
状态:内部
请参阅SPM 文档
gRPC 服务器自省
提供 gRPC 端点的服务端口启用 gRPC reflection 。不幸的是,内部使用的 gogo/protobuf
与官方的 golang/protobuf
存在兼容性问题 ,因此目前只有 list
reflection 命令正常工作,例如
grpc_cli ls localhost:16685
grpc.health.v1.Health
grpc.reflection.v1.ServerReflection
grpc.reflection.v1alpha.ServerReflection
jaeger.api_v2.QueryService
jaeger.api_v2.metrics.MetricsQueryService
jaeger.api_v3.QueryService