1. 课程导论:云原生可观测性三支柱概述

在云原生架构中,微服务、容器化与动态编排带来了前所未有的弹性与复杂度。传统的“登录机器查日志”模式已无法应对分布式系统的故障定位与性能分析需求。可观测性(Observability) 成为现代运维的核心能力,其理论基石由三大支柱构成:日志(Logs)、指标(Metrics) 与 链路(Traces)。

1.1 三支柱定义与核心价值

支柱 定义 核心价值 典型数据示例
日志(Logs) 离散的、带时间戳的事件记录,描述系统在特定时刻发生了什么。 提供故障根因分析的“最后一公里”细节,支持关键词检索与模式匹配。 2025-03-21 10:00:00 ERROR [order-svc] DB connection timeout
指标(Metrics) 可聚合的、数值型的时序数据,反映系统在时间维度上的状态与趋势。 快速发现异常、设置告警阈值、进行容量规划与长期趋势分析。 http_requests_total{status="500"} 120
链路(Traces) 端到端的请求执行路径,记录请求在分布式系统中的完整流转过程。 定位跨服务性能瓶颈、识别依赖关系、分析请求延迟分布。 span: /checkout → 320ms → span: /payment → 180ms
关键认知: 三支柱并非孤立存在。一个高延迟的指标告警(Metrics)可以驱动你查看对应的链路(Traces),再通过链路中的 Span ID 关联到具体的错误日志(Logs),形成“告警 → 定位 → 根因”的闭环。

1.2 三支柱协同关系图

下图展示了在云原生环境中,日志、指标、链路如何围绕一个用户请求协同工作,共同构建完整的可观测性视图。

云原生可观测性三支柱协同关系图 可观测性三支柱协同关系 用户请求 微服务集群(Service Mesh) 服务A → 服务B → 服务C 日志 (Logs) 事件记录 · 关键词检索 指标 (Metrics) 时序聚合 · 告警阈值 链路 (Traces) 请求路径 · 延迟分布 统一可观测性平台

1.3 OpenTelemetry 与 Prometheus 的角色定位

在云原生生态中,OpenTelemetry(OTel) 与 Prometheus 分别扮演着“数据采集与标准化”和“指标存储与告警”的核心角色。两者并非竞争关系,而是互补协同。

1.3.1 OpenTelemetry:可观测性数据的事实标准

  • 定位: 一个厂商中立的、开源的可观测性框架,用于生成、采集、导出日志、指标和链路数据。
  • 核心能力:
    • 统一 API 与 SDK: 提供跨语言的 instrumentation 库,开发者只需接入一次,即可同时输出三支柱数据。
    • 协议与格式: 定义 OTLP(OpenTelemetry Protocol),支持 gRPC/HTTP 传输,是云原生计算基金会(CNCF)的孵化项目。
    • Collector: 一个独立的代理或网关,负责接收、处理、转发遥测数据,支持过滤、采样、增强等中间处理逻辑。
  • 在生态中的角色: 作为“数据源”与“标准化层”,将异构系统的遥测数据转化为统一格式,向下游的存储与分析系统(如 Prometheus、Jaeger、Elasticsearch)投递。

1.3.2 Prometheus:云原生指标监控的事实标准

  • 定位: 一个开源的系统监控和告警工具包,专注于指标(Metrics) 的采集、存储、查询与告警。
  • 核心能力:
    • Pull 模型: 主动从目标端点(/metrics)拉取指标数据,天然适合 Kubernetes 动态环境。
    • PromQL: 强大的查询语言,支持多维数据聚合、计算与预测。
    • Alertmanager: 处理告警路由、去重、静默与通知。
  • 在生态中的角色: 作为“指标存储与告警引擎”,接收来自 OpenTelemetry Collector 或其他 Exporter 的指标数据,提供长期存储、可视化(Grafana)与告警能力。

1.4 OpenTelemetry 与 Prometheus 协同架构图

下图展示了在 Kubernetes 集群中,OpenTelemetry 与 Prometheus 如何协同工作,覆盖从数据采集到告警通知的完整链路。

OpenTelemetry 与 Prometheus 协同架构图 OTel + Prometheus 协同架构 微服务应用 A OTel SDK 注入 微服务应用 B OTel SDK 注入 微服务应用 C OTel SDK 注入 OpenTelemetry Collector 接收 → 处理(采样/过滤)→ 导出 日志存储 Elasticsearch / Loki Prometheus 指标存储 + PromQL 链路存储 Jaeger / Tempo Alertmanager 告警通知(钉钉/邮件/PagerDuty)
协同要点:
  • 数据流: 应用通过 OTel SDK 产生 Logs、Metrics、Traces → OTel Collector 统一接收、处理 → 将 Metrics 导出到 Prometheus,Logs 导出到 Elasticsearch/Loki,Traces 导出到 Jaeger/Tempo。
  • 告警闭环: Prometheus 对存储的指标进行规则评估,触发告警后发送给 Alertmanager,最终通过多渠道通知运维人员。
  • 优势: OTel 解决了数据标准化与多后端适配问题,Prometheus 则专注于指标领域的极致性能与生态成熟度。两者结合,避免了厂商锁定,同时保留了 Prometheus 在指标监控领域的统治地位。

1.5 本章小结