可观测性三大支柱
可观测性(Observability)是指通过系统的外部输出推断其内部状态的能力。现代分布式系统的可观测性通常围绕三大支柱展开:
指标(Metrics)
指标是对系统状态的聚合度量,通常是数值型时间序列数据。例如:
- CPU 使用率、内存占用
- 请求 QPS、错误率、P99 延迟
- 队列深度、连接数
指标的特点是低维度、可聚合、适合告警和趋势分析。
链路(Traces)
链路追踪记录一次请求在分布式系统中的完整路径。每个请求被拆分为多个 Span,Span 之间通过 TraceID 关联,形成调用树。
链路数据的价值在于:
- 定位性能瓶颈
- 分析服务依赖
- 理解请求在微服务间的流转
日志(Logs)
日志是离散的事件记录,包含时间戳、级别、消息和上下文。日志适合记录详细的业务事件和错误信息,是故障排查的重要依据。
| 支柱 | 数据形态 | 典型问题 | 存储特点 |
|---|---|---|---|
| Metrics | 时间序列数值 | 系统是否健康? | 数据量小、保留时间长 |
| Traces | 请求调用链 | 请求慢在哪里? | 数据量大、采样存储 |
| Logs | 离散事件 | 具体发生了什么? | 数据量大、需索引 |
OpenTelemetry 简介
OpenTelemetry(简称 OTel)是 CNCF 孵化的开源项目,旨在为可观测性数据提供统一的采集、导出和传输标准。它由 OpenTracing 和 OpenCensus 合并而来,是目前云原生可观测性领域的事实标准。
OpenTelemetry 的核心理念:
- 统一标准:一套 API、SDK 和协议覆盖 Metrics、Traces、Logs。
- 供应商无关:采集端与后端存储解耦,可自由切换 Prometheus、Jaeger、Grafana、Datadog 等。
- 自动仪表化:支持多种语言的自动埋点,降低接入成本。
OpenTelemetry 架构
OpenTelemetry 的整体架构可分为四层:
应用层(Instrumentation)
|
v
SDK 层(API / SDK)
|
v
采集层(Collector)
|
v
后端存储(Backend)
Instrumentation
Instrumentation 是指对应用程序进行埋点,生成可观测数据。方式包括:
- 自动埋点:通过 Agent 或库自动注入,如 OpenTelemetry Java Agent。
- 手动埋点:在代码中显式创建 Span、记录 Metric。
SDK
SDK 负责管理数据的生成、处理和导出。关键组件:
- TracerProvider:管理 Tracer 实例。
- MeterProvider:管理 Metric 采集。
- Exporter:将数据发送到 Collector 或后端。
- Processor:对 Trace 数据进行批处理、采样。
OpenTelemetry Collector
Collector 是一个独立进程,负责接收、处理和导出可观测数据。其核心组件:
| 组件 | 作用 |
|---|---|
| Receiver | 接收来自应用或其他 Collector 的数据 |
| Processor | 对数据进行过滤、转换、批处理、采样 |
| Exporter | 将数据导出到后端存储 |
| Extension | 提供健康检查、性能分析等辅助能力 |
Collector 配置示例:
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
processors:
batch:
exporters:
prometheusremotewrite:
endpoint: http://prometheus:9090/api/v1/write
otlp/jaeger:
endpoint: jaeger:4317
tls:
insecure: true
service:
pipelines:
metrics:
receivers: [otlp]
processors: [batch]
exporters: [prometheusremotewrite]
traces:
receivers: [otlp]
processors: [batch]
exporters: [otlp/jaeger]
后端存储
常见后端组合:
- Metrics:Prometheus、Thanos、VictoriaMetrics、Mimir
- Traces:Jaeger、Tempo、Zipkin
- Logs:Loki、ELK、ClickHouse
基于可观测数据的 AIOps 实践
可观测数据是 AIOps 的"燃料"。基于 Metrics、Traces、Logs 可以实现:
- 异常检测:利用时序算法检测指标突变、周期性异常。
- 根因定位:通过 Trace 分析调用链,定位延迟或错误来源。
- 日志聚类:对海量日志进行模式识别,发现未知错误。
- 容量预测:基于历史指标预测资源需求。
- 智能告警:降低告警噪音,实现告警收敛与关联。
总结
OpenTelemetry 为云原生应用提供了一套统一、开放、可扩展的可观测性方案。掌握其架构与三大支柱数据,是进行 AIOps 异常检测、根因分析和自动化运维的基础。下一篇笔记将深入 OpenTelemetry 的开发实战。