可观测性建设 = 用信息论指导观测
一、业务问题
监控系统建了一堆,但"出问题时仍找不到根因"——这是工程团队最常见的痛点。具体表现:
- "指标太多,关键时刻不知道看哪个"
- "告警准确率低,狼来了效应严重"
- "日志打了海量,关键事件淹没在噪声中"
- "链路追踪有数据,但关联不到业务影响"
- "监控做完了,故障定位还是很慢"
根本问题:没有用信息论指导观测——监控覆盖率 ≠ 监控有效性。
二、控制论视角
可观测性的数学基础 = 信息论(Shannon 1948)。
可观测性的本质:
系统的内部状态 = 从输出(观测)反推
可观测性条件:
- 输出携带足够的信息量(I > 阈值)
- 信号能被从噪声中分离(S/N > 阈值)
- 测量有合适的频率(采样定理)信息论三大对位:
| 信息论概念 | 可观测性对位 |
|---|---|
| 信息量 I = -log₂(P) | 监控指标的"重要性"(罕见 = 重要) |
| 熵 H(X) | 监控指标的随机性(业务活动范围) |
| 互信息 I(X, Y) | 指标间的因果性(联合监控价值) |
| 信道容量 C = B·log₂(1+S/N) | 监控系统的极限带宽 |
| 信噪比 S/N | 业务信号 vs 噪声(流量/异常) |
钱学森 Ch 20 的判断:
"1948 年美国科学家香农总结了实践工作中的经验和前人的工作,成功地创立了关于信号和信息传输的精确理论即信息论。这个理论出现以后极大地促进了通信理论和技术的发展,同时也给控制理论提供了一个新的有力的工具。"
三、方法论编排
3.1 编排总图
┌────────────────────────┐
│ 理论基础(信息论) │
│ communication- │
│ information-theory │
│ I、H、I(X,Y)、C、S/N │
└───────────┬────────────┘
↓ 提供数学工具
┌─────────────────────────────────────────┐
│ 三大支柱(观测手段) │
│ log-metric-trace (L/M/T) │
│ vibration-linearization (心跳) │
│ wiener-filter (信号去噪) │
└────────────┬────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ 频域分析(高级诊断) │
│ spectral-analysis (频谱) │
└────────────┬────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ 业务对齐(观测价值) │
│ slo (服务等级目标) │
└─────────────────────────────────────────┘3.2 方法论分工表
| 方法论 | 在可观测性中的角色 | 控制结构对位 |
|---|---|---|
| communication-information-theory | 理论层:信息量、熵、互信息、信道容量 | 通信系统 |
| log-metric-trace | 手段层:三大观测支柱 | 闭环反馈(测量) |
| vibration-linearization | 增强层:心跳机制 | 闭环反馈(高频探测) |
| wiener-filter | 增强层:信号去噪 | 最优滤波 |
| spectral-analysis | 诊断层:频域分析 | 最优控制(频域视角) |
| slo | 目标层:业务对齐 | 闭环反馈(目标) |
3.3 监控的三个层次
L1 业务观测:
- GMV、订单量、转化率
- 业务异常 = 直接影响
- 信息量最高(罕见 + 关键)
L2 服务观测:
- QPS、错误率、延迟
- 服务异常 = 间接影响
- 信息量中等
L3 资源观测:
- CPU、内存、磁盘
- 资源异常 = 潜在影响
- 信息量最低(最常见)信息论原则:
- 业务观测信息量最高,应优先建设
- 资源观测信息量最低,作为最后一道防线
- 跨层次互信息高的指标 = 强相关(联合监控)
四、端到端案例:API 服务的可观测性建设
第 1 步:信息量分析 — 决定观测什么
用信息量评估候选指标:
候选指标:
"API 被调用" P = 1.0 I = 0 bits ← 0 信息
"API 返回 200" P = 0.999 I = 0.001 bits ← 几乎 0 信息
"API 返回 500" P = 0.0001 I = 13.3 bits ← 高信息
"API 延迟 > 1s" P = 0.01 I = 6.6 bits ← 中信息
"API 响应时间变化" P = 0.5 I = 1 bit ← 低信息
"API 调用异常断开" P = 0.0001 I = 13.3 bits ← 高信息
决策:
0 信息量:删除(节省存储)
低信息量:DEBUG 级别
中信息量:INFO 级别
高信息量:WARN/ERROR 级别控制论对位:高信息量 = 高优先级告警。
第 2 步:互信息分析 — 决定联合监控
评估哪些指标应该联合告警:
候选指标对:
(CPU使用率, 响应时间) I(CPU, RT) = 2.5 bits ← 强相关
(CPU使用率, 错误率) I(CPU, Err) = 0.3 bits ← 弱相关
(内存使用率, 错误率) I(Mem, Err) = 1.8 bits ← 中等相关
(网络流量, 错误率) I(Net, Err) = 0.1 bits ← 弱相关
决策:
强相关 (I > 2):联合告警(CPU 高 → 响应慢是预期内)
中等相关 (1 < I < 2):分别告警 + 综合分析
弱相关 (I < 1):分别告警控制论对位:互信息 = 业务因果性。
第 3 步:信号噪声分离 — wiener-filter 应用
问题:监控数据有大量噪声(节假日波动、灰度发布等)。
# 用维纳滤波分离信号和噪声
from scipy import signal
# 原始 CPU 数据
cpu_raw = get_cpu_timeseries()
# 维纳滤波去噪
cpu_filtered = signal.wiener(cpu_raw, noise=2.0)
# 信号 = 业务负载的真实变化
# 噪声 = 临时波动、测量误差控制论对位:wiener-filter = 频域最优滤波。
第 4 步:频域分析 — spectral-analysis 应用
问题:CPU 使用率在 50% 附近波动,怎么判断是"正常波动"还是"潜在问题"?
# 频谱分析
from scipy.fft import fft
# CPU 时序数据
cpu = get_cpu_timeseries(period='24h')
# 傅里叶变换
freqs = fftfreq(len(cpu))
power = np.abs(fft(cpu))**2
# 分析
# - 1/24h 频率有强峰 → 正常业务周期
# - 1/h 频率有强峰 → 每小时定时任务
# - 高频段噪声功率高 → 测量问题或异常控制论对位:spectral-analysis = 频域视角找周期。
第 5 步:心跳机制 — vibration-linearization 应用
问题:如何探测对端服务是否活着?
传统方式:TCP 长连接
问题:NAT 超时、防火墙阻断、无法探测应用层
心跳机制:
- 客户端定时发送"心跳"消息
- 服务端响应"心跳"确认
- 缺失 N 个心跳 = 服务异常
频率选择:
- 太频繁:网络开销大
- 太稀疏:故障发现慢
- 最优频率:基于业务容忍度(典型 1-10s)控制论对位:vibration-linearization = 高频小信号探测系统状态。
第 6 步:SLO 对齐 — 业务观测的目标
用 SLO 把观测和业务挂钩:
SLO 定义(业务可观测性):
- API 可用性 ≥ 99.95%
- P99 延迟 < 200ms
- 错误率 < 0.1%
观测指标:
- 可用性 → SLI = (1 - 错误率) × 100%
- 延迟 → SLI = P99(latency)
- 错误率 → SLI = 错误请求数 / 总请求数
告警阈值:
- 错误预算消耗速率:1 小时内消耗 > 20% 触发
- 错误预算剩余:< 50% 警告,< 10% 紧急控制论对位:SLO = 闭环反馈的目标值。
五、监控设计原则
5.1 信息量原则
3 个 80/20 法则:
80% 的价值来自 20% 的指标
→ 找到那 20%(用信息量+互信息筛选)
80% 的告警是噪声
→ 告警分级(按信息量)
80% 的根因藏在 20% 的链路中
→ 链路追踪聚焦关键路径5.2 三支柱原则
日志 (Logs):离散事件
- 用于:故障定位、行为审计
- 信息量:高(具体事件)
- 成本:高(存储大)
指标 (Metrics):聚合数值
- 用于:实时监控、告警
- 信息量:中(聚合丢失细节)
- 成本:低
链路 (Traces):请求路径
- 用于:性能分析、依赖关系
- 信息量:高(完整路径)
- 成本:中(采样可降本)
决策:
- 必选:Metrics(实时告警)
- 必选:Logs(故障定位)
- 必选:Traces(性能分析)5.3 黄金信号原则
Google SRE 4 个黄金信号:
Latency(延迟):服务响应时间
Traffic(流量):请求速率
Errors(错误):错误率
Saturation(饱和度):资源利用率信息论解读:
- Latency:直接反映用户感受(高信息量)
- Traffic:业务负载(中信息量)
- Errors:故障信号(高信息量)
- Saturation:资源瓶颈(低信息量,但预警用)
5.4 告警分级原则
P0:业务不可用(信息量最高)
- 触发:5 分钟内 P99 > 1s 且错误率 > 5%
- 响应:电话 + 立即处理
P1:业务受损(信息量高)
- 触发:5 分钟内错误率 > 1%
- 响应:钉钉 + 1 小时处理
P2:性能下降(信息量中)
- 触发:CPU > 80% 持续 10 分钟
- 响应:邮件 + 工作时间处理
P3:资源预警(信息量低)
- 触发:磁盘使用率 > 90%
- 响应:工单 + 计划内处理反模式:
- 所有告警都 P0 → 告警疲劳
- 告警太多看不过来 → 必须分级
- 没有软硬激发 → 告警风暴
六、可观测性成熟度模型
Level 1:黑盒
- 知道系统挂了,但不知道为什么
- 无监控或仅有基本监控
Level 2:白盒基础
- 有指标和日志
- 知道出问题的位置
- 但定位慢
Level 3:白盒完整
- L/M/T 三大支柱完整
- 关联分析
- 告警分级
Level 4:智能可观测性
- 频域分析
- 信号去噪
- 异常检测(ML)
Level 5:可观测性驱动开发
- 监控先于代码(observability-driven development)
- 自动生成监控
- 反馈到产品决策
七、反模式
| 反模式 | 症状 | 缺什么方法论 | 应该改用 |
|---|---|---|---|
| 指标大而全 | 几千个指标,告警疲劳 | information-theory | 用信息量筛选 |
| 告警不分级 | 半夜被告警轰炸 | alert | 加告警分级 |
| 日志当垃圾桶 | 日志太多,存储爆炸 | information-theory | 按信息量打日志 |
| 指标互不相关 | 看不出因果 | information-theory | 用互信息分析 |
| 监控无业务 | 业务故障技术 OK | slo | SLO 对齐 |
| 链路追踪没采样 | 存储爆炸 | communication-info | 用信道容量指导采样 |
| 只看平均 | 长尾问题被掩盖 | spectral-analysis | 频域 + P99 |
八、与其他主题的关系
| 主题 | 与可观测性的关系 |
|---|---|
| 系统稳定性 | 可观测性是稳定性的前提 |
| 性能调优 | 调优需要频域分析能力 |
| 架构演进 | 微服务化必须先建可观测性 |
| 数据一致性 | 一致性问题需要链路追踪定位 |
九、控制结构引用
| 控制结构 | 在可观测性中的位置 |
|---|---|
| 闭环反馈 | 监控-告警-调节链路 |
| 串级控制 | 多级 SLO 分层 |
| 最优控制 | 频域最优滤波(wiener-filter) |
| 复合控制 | 业务观测(慢)+ 资源观测(快) |
十、钱学森原话
Ch 20 引言: "1948 年美国科学家香农总结了实践工作中的经验和前人的工作,成功地创立了关于信号和信息传输的精确理论即信息论。这个理论出现以后极大地促进了通信理论和技术的发展,同时也给控制理论提供了一个新的有力的工具。"
Ch 15 引言(信号噪声): "在通信和控制系统中,信号和噪声的分离是一个基本问题。"
Ch 7 §7.5(心跳机制): "非线性效应仍然可以和线性项的数量级相同……级数展开式就不能成立了。"(→ 微小的高频探测信号在平衡点附近的线性展开)
十一、总结
可观测性 = 信息论指导的工程实践:
| 信息论概念 | 可观测性方法论 |
|---|---|
| 信息量 I | 监控指标分级、日志分级 |
| 互信息 I(X,Y) | 指标联合告警 |
| 熵 H | 业务活动范围分析 |
| 信道容量 C | 采样策略、存储成本 |
| 信噪比 S/N | 维纳滤波、异常检测 |
| 频域视角 | spectral-analysis |
核心原则:
- 少而精:用信息量筛选监控
- 三支柱:L/M/T 缺一不可
- 业务对齐:观测必须服务 SLO
- 告警分级:避免疲劳
- 频域思维:找周期、找异常
一句话总结:可观测性不是"看得见",而是"看到关键"——这是信息论的根本任务。
与 cybernetics 升格页面的联系
观测性 = 反馈 + 信号 + 控制:
| 观测能力 | cybernetics 来源 | IDDD 对位 |
|---|---|---|
| 信号检测 | 频谱分析 | 事件分发 |
| 噪声过滤 | 维纳滤波 | 事件流过滤 |
| 通信极限 | 信息论 | BC 边界协议 |
| 告警 | 告警阈值 | 不变量破坏 |
| 偏差 | 协调偏差 | BC 间偏差 |