4、数据源对接:配置Jaeger数据源(gRPC/HTTP API)与台账系统(如Prometheus、Grafana)的集成方式
数据源对接是构建误差预算台账系统的关键环节。Jaeger 作为分布式追踪系统,提供了 gRPC 和 HTTP API 两种标准数据访问接口;台账系统(如 Prometheus、Grafana)需要从 Jaeger 拉取链路数据,转换为 SLO 指标和误差预算消耗记录。本节详细说明两种协议的配置方法、适用场景及集成步骤。
4.1 Jaeger 数据源协议对比
| 协议 | 端口 | 数据格式 | 适用场景 | 性能特征 |
|---|---|---|---|---|
| gRPC | 16685 | Protobuf | 高吞吐、实时流式查询 | 低延迟、二进制编码、支持双向流 |
| HTTP API | 16686 | JSON | 低频率查询、调试、跨语言集成 | 文本编码、适合小数据量 |
推荐策略:台账系统的实时误差预算计算建议使用 gRPC 协议;Grafana 面板展示和历史数据回溯可使用 HTTP API。两种协议可同时启用,互不冲突。
4.2 gRPC 数据源配置(高吞吐台账集成)
gRPC 是 Jaeger 与台账系统之间最推荐的数据通道。Jaeger Query 服务默认在 16685 端口暴露 gRPC 端点,支持 FindTraces、GetTrace、GetServices 等核心 RPC 方法。
4.2.1 Jaeger Query 端启用 gRPC
# Jaeger 部署环境变量(Docker / Kubernetes)
SPAN_STORAGE_TYPE=elasticsearch
COLLECTOR_GRPC_SERVER_MAX_MESSAGE_SIZE=4194304
QUERY_GRPC_SERVER_MAX_MESSAGE_SIZE=4194304
QUERY_PORT_GRPC=16685
4.2.2 台账系统 gRPC 客户端配置示例(Python)
import grpc
from jaeger_proto.api_v2 import query_pb2_grpc, query_pb2
channel = grpc.insecure_channel("jaeger-query:16685")
stub = query_pb2_grpc.QueryServiceStub(channel)
# 查询最近 1 小时所有服务
request = query_pb2.GetServicesRequest()
response = stub.GetServices(request)
print("服务列表:", response.services)
台账集成要点:台账系统应使用 gRPC 流式接口批量拉取 Trace,避免逐条查询造成 Jaeger Query 负载过高。建议设置
max_message_size 为 4MB 以上,以支持包含大量 Span 的 Trace 传输。
4.3 HTTP API 数据源配置(Grafana 面板集成)
Grafana 通过内置的 Jaeger 数据源插件使用 HTTP API 进行查询。该方式适合可视化面板、手动诊断和低频率的台账数据验证。
4.3.1 Grafana 数据源配置步骤
- 添加数据源:Configuration → Data Sources → Add data source → 选择 "Jaeger"
- URL 配置:填写 Jaeger Query 的 HTTP 地址,例如
http://jaeger-query:16686 - 访问模式:选择 "Server"(Grafana 后端代理请求,避免跨域问题)
- 超时设置:建议设置为 30s,避免大 Trace 查询超时
- 保存并测试:验证 "Success" 状态码返回
4.3.2 HTTP API 关键端点(台账系统直接调用)
| 端点 | 方法 | 用途 |
|---|---|---|
/api/services |
GET | 获取所有服务名称 |
/api/traces?service=…&limit=… |
GET | 按服务和时间范围查询 Trace 列表 |
/api/traces/{traceID} |
GET | 获取单个 Trace 的完整 Span 数据 |
/api/dependencies |
GET | 获取服务依赖拓扑(用于台账影响分析) |
4.4 集成架构总览
下图展示了 Jaeger 数据源与台账系统(Prometheus + Grafana)的完整集成链路:
4.5 Prometheus 对接 Jaeger 数据(误差预算指标采集)
Prometheus 本身不直接支持 Trace 查询,但可以通过 Jaeger gRPC Metrics Exporter 或 OpenTelemetry Collector 将链路指标转换为 Prometheus 格式。
4.5.1 使用 OpenTelemetry Collector 桥接
# otel-collector-config.yaml
receivers:
jaeger:
protocols:
grpc:
endpoint: 0.0.0.0:14250
processors:
batch:
timeout: 1s
exporters:
prometheus:
endpoint: 0.0.0.0:8889
namespace: jaeger_slo
service:
pipelines:
traces:
receivers: [jaeger]
processors: [batch]
exporters: [prometheus]
注意:直接使用 Jaeger 原生 Prometheus 指标(如
jaeger_query_requests_total)仅反映查询性能,不包含 Trace 级别的 SLO 数据。必须通过 OpenTelemetry Collector 或自定义 Exporter 将 Trace 延迟、错误率转换为 Prometheus 指标,才能用于误差预算计算。
4.6 Grafana 面板配置示例(台账可视化)
在 Grafana 中创建 Jaeger 数据源后,可构建以下台账面板:
| 面板类型 | 查询语句(Jaeger DSL) | 展示内容 |
|---|---|---|
| 服务延迟分布 | service:payment duration > 500ms |
高延迟 Trace 数量趋势 |
| 错误率仪表盘 | service:payment error=true |
错误 Trace 占比(SLO 违规指标) |
| 误差预算消耗 | service:payment duration > 200ms | error=true |
预算消耗速率(每分钟违规数) |
4.7 集成验证清单
- 连通性验证:使用
grpcurl -plaintext jaeger-query:16685 list确认 gRPC 服务可用 - 数据完整性:对比 HTTP API 和 gRPC 返回的同一 Trace 数据,确保字段一致
- 性能基线:记录 gRPC 批量拉取 1000 条 Trace 的耗时,作为台账系统性能基准
- Grafana 探活:在 Grafana 数据源设置页面执行 "Save & Test",确认 HTTP 200 响应
- 指标映射:验证 Prometheus 中
jaeger_slo_trace_duration_seconds等自定义指标是否正常上报
生产建议:台账系统应优先使用 gRPC 协议进行批量数据拉取,HTTP API 仅用于 Grafana 交互式查询和临时诊断。两种协议同时启用时,注意 Jaeger Query 的内存和连接数限制,建议设置
--query.max-clock-skew-adjustment 和连接池大小。