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 实现跨集群数据汇聚。
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 跨环境数据隔离与汇聚
在发布流水线中,开发、测试、预发、生产环境的数据需要既隔离又可对比。架构设计如下:
注意: 生产环境的采集链路必须与其它环境物理隔离或使用独立的 Tenant/Org,避免敏感数据泄露。Grafana 中通过数据源标签或文件夹权限实现环境级访问控制。
4.6 性能曲线对账的关键指标采集
为支撑发布流水线跨环境迁移的性能曲线对账,以下指标必须纳入采集范围:
| 指标类别 | 指标名称 | 来源 | 对账用途 |
|---|---|---|---|
| 容器资源 | container_cpu_usage_seconds_totalcontainer_memory_working_set_bytes |
cAdvisor / Kubelet | 对比迁移前后容器资源消耗曲线 |
| 应用性能 | http_request_duration_secondshttp_requests_total |
应用自定义 Exporter / OTel SDK | 对比迁移前后请求延迟与吞吐量 |
| 流水线元数据 | pipeline_build_infopipeline_deploy_timestamp |
CI/CD 系统 Exporter | 标记每次部署的时间窗口与版本 |
| 错误率 | http_requests_errors_totallog_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 余量。