4. 数据采集架构:Prometheus + Grafana + Loki + OpenTelemetry 的采集链路设计

在容器运行时治理场景中,跨环境迁移的性能曲线对账依赖一套完整、可靠、低延迟的数据采集链路。本章设计以 Prometheus 为核心指标存储,Grafana 为可视化与告警层,Loki 负责日志聚合,OpenTelemetry 作为统一的可观测性数据采集与传输标准。四者组合形成“指标-日志-链路”三位一体的采集架构,确保发布流水线在开发、测试、预发、生产环境间的性能数据可追溯、可对比。

4.1 整体采集链路架构

下图展示了从容器运行时到最终可视化与对账分析的完整数据流。OpenTelemetry Collector 作为统一接入层,将指标、日志、链路数据分别路由至 Prometheus、Loki 和 Jaeger/Tempo,最终由 Grafana 统一呈现。

架构要点: 所有环境(开发/测试/预发/生产)均部署相同的采集 Agent 与 Exporter,确保数据格式一致;通过 Prometheus Remote Write 与 Loki Push API 实现跨集群数据汇聚。
容器运行时数据采集链路架构 容器运行时数据采集链路架构 容器运行时 Kubelet / cAdvisor Node Exporter 应用自定义 Exporter OpenTelemetry Collector OTLP Receiver Batch Processor Memory Limiter Attributes Processor Exporters Prometheus 指标存储 + 告警 Loki 日志聚合 Jaeger / Tempo 链路追踪 Grafana 仪表盘 告警 对账分析 说明:OpenTelemetry Collector 支持通过 OTLP 协议接收数据,并利用 Processor 进行采样、过滤、批处理, 最终通过 Prometheus Remote Write Exporter、Loki Exporter、Jaeger Exporter 分别写入对应后端。

4.2 组件职责与数据流

每个组件在采集链路中承担明确职责,下表列出核心功能与数据流向。

组件 职责 数据来源 数据去向 协议/接口
OpenTelemetry Collector 统一接收、处理、导出可观测性数据 应用 SDK、Exporter、Agent Prometheus / Loki / Jaeger OTLP gRPC/HTTP
Prometheus 指标存储、查询、告警规则评估 OTel Collector (Remote Write) Grafana / Alertmanager PromQL / Remote Write
Loki 日志聚合、标签索引、日志查询 OTel Collector (Loki Exporter) Grafana (Explore) Loki HTTP API / LogQL
Jaeger / Tempo 分布式链路追踪存储与查询 OTel Collector (Jaeger Exporter) Grafana (Tempo 数据源) Jaeger Thrift / gRPC
Grafana 统一仪表盘、告警、对账分析 Prometheus / Loki / Tempo 用户界面 / 告警通知 Grafana Data Source API

4.3 OpenTelemetry Collector 配置示例

以下为生产环境推荐的 Collector 配置片段,包含接收器、处理器、导出器三个核心模块。注意启用 batch 处理器以提升吞吐,memory_limiter 防止 OOM。

receivers:
  otlp:
    protocols:
      grpc:
        endpoint: 0.0.0.0:4317
      http:
        endpoint: 0.0.0.0:4318

processors:
  batch:
    timeout: 1s
    send_batch_size: 1024
  memory_limiter:
    check_interval: 1s
    limit_mib: 512
  attributes:
    actions:
      - key: environment
        value: "${ENV}"
        action: upsert

exporters:
  prometheusremotewrite:
    endpoint: "http://prometheus-server:9090/api/v1/write"
    resource_to_telemetry_conversion:
      enabled: true
  loki:
    endpoint: "http://loki-gateway:3100/loki/api/v1/push"
    labels:
      attributes:
        - job
        - instance
        - environment
  jaeger:
    endpoint: "jaeger-collector:14250"
    tls:
      insecure: true

service:
  pipelines:
    metrics:
      receivers: [otlp]
      processors: [memory_limiter, batch, attributes]
      exporters: [prometheusremotewrite]
    logs:
      receivers: [otlp]
      processors: [memory_limiter, batch, attributes]
      exporters: [loki]
    traces:
      receivers: [otlp]
      processors: [memory_limiter, batch, attributes]
      exporters: [jaeger]
实践建议: 在跨环境迁移场景中,务必在 attributes 处理器中注入 environment、release_version、pipeline_id 等标签,以便在 Grafana 中按环境、版本、流水线维度进行性能曲线对账。

4.4 指标、日志、链路关联策略

性能曲线对账的核心挑战在于将同一请求的指标、日志、链路数据关联起来。推荐使用 Trace ID 作为统一关联键,通过以下方式实现:

  • 指标侧: 在 Prometheus 指标中增加 trace_id 标签(仅采样部分请求,避免基数爆炸)。
  • 日志侧: 应用日志输出 Trace ID,Loki 通过日志标签或日志内容提取关联。
  • 链路侧: Jaeger/Tempo 天然以 Trace ID 为索引。
  • Grafana 联动: 使用 Grafana Explore 的“从日志到链路”、“从指标到日志”的跳转功能,实现一键下钻。

4.5 跨环境数据隔离与汇聚

在发布流水线中,开发、测试、预发、生产环境的数据需要既隔离又可对比。架构设计如下:

跨环境数据隔离与汇聚 跨环境数据隔离与汇聚设计 开发环境 测试环境 预发环境 生产环境 OTel Collector (dev) OTel Collector (test) OTel Collector (staging) OTel Collector (prod) 统一 Prometheus / Loki 集群
注意: 生产环境的采集链路必须与其它环境物理隔离或使用独立的 Tenant/Org,避免敏感数据泄露。Grafana 中通过数据源标签或文件夹权限实现环境级访问控制。

4.6 性能曲线对账的关键指标采集

为支撑发布流水线跨环境迁移的性能曲线对账,以下指标必须纳入采集范围:

指标类别 指标名称 来源 对账用途
容器资源 container_cpu_usage_seconds_total
container_memory_working_set_bytes
cAdvisor / Kubelet 对比迁移前后容器资源消耗曲线
应用性能 http_request_duration_seconds
http_requests_total
应用自定义 Exporter / OTel SDK 对比迁移前后请求延迟与吞吐量
流水线元数据 pipeline_build_info
pipeline_deploy_timestamp
CI/CD 系统 Exporter 标记每次部署的时间窗口与版本
错误率 http_requests_errors_total
log_error_count
应用 Exporter / Loki 识别迁移引入的异常

4.7 采集链路高可用与容量规划

生产级采集链路需考虑以下高可用与容量设计要点:

  • Prometheus 高可用: 采用 Thanos 或 VictoriaMetrics 实现全局视图与长期存储;每个环境部署独立的 Prometheus 实例,通过 Remote Write 写入中心化存储。
  • Loki 水平扩展: 使用 Loki 微服务模式(ingester、distributor、querier),根据日志量动态扩缩容;配置 retention 策略,生产环境保留 30 天,测试环境保留 7 天。
  • Collector 冗余: 每个环境至少部署 2 个 OTel Collector 实例,前端通过 Load Balancer 分发;启用 batch 和 memory_limiter 防止背压。
  • 网络带宽: 跨环境数据传输需评估带宽,建议指标数据压缩后传输(Prometheus Remote Write 默认支持 snappy 压缩),日志数据可启用 loki_push 的 gzip 压缩。
容量估算示例: 假设每个容器每秒产生 100 个指标样本,100 个容器共 10,000 样本/秒,每个样本约 200 字节,则 Prometheus 写入带宽约为 2 MB/s;日志按每个容器 50 行/秒,每行 500 字节,共 2.5 MB/s。建议预留 2x 余量。

4.8 本章小结