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 数据源配置步骤

  1. 添加数据源:Configuration → Data Sources → Add data source → 选择 "Jaeger"
  2. URL 配置:填写 Jaeger Query 的 HTTP 地址,例如 http://jaeger-query:16686
  3. 访问模式:选择 "Server"(Grafana 后端代理请求,避免跨域问题)
  4. 超时设置:建议设置为 30s,避免大 Trace 查询超时
  5. 保存并测试:验证 "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)的完整集成链路:

Jaeger 数据源与台账系统集成架构 应用集群 (服务 A/B/C) Jaeger Agent Jaeger Collector 存储 (ES/Cassandra) Jaeger Query gRPC:16685 / HTTP:16686 台账系统 Prometheus / Grafana 协议说明 gRPC(实线) HTTP API(虚线)

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 和连接池大小。