可观测性与动态追踪
1. 三层监控体系
业务层
- 成功率、吞吐、p95/p99;
- 核心转化或任务完成量;
- 按区域、租户、版本、实例拆分。
应用层
- 请求队列、线程池、连接池;
- GC、锁、缓存、下游调用;
- 错误码与分阶段耗时;
- trace、profile 和结构化日志。
系统层
- CPU/调度/PSI;
- 内存/回收/OOM;
- I/O 延迟与队列;
- 网络丢包、重传和连接;
- cgroup 限制与节流。
三层必须使用统一时间和实例标签,才能关联。
2. 工具选择阶梯
mermaid
flowchart LR
A["指标/日志"] --> B["进程与协议统计"]
B --> C["采样 profiler"]
C --> D["火焰图"]
D --> E["定向动态追踪"]
E --> F["源码/内核验证"]越往右信息越细、成本和专业要求越高。只在左侧无法回答问题时继续深入。
3. perf 与火焰图
适合:
- CPU hotspot;
- 用户态/内核态调用栈;
- 对比优化前后热点宽度;
- 低频采样线上短时取证。
bash
perf record -F 49 -g -p <PID> -- sleep 30
perf script > perf.script解读:
- 自下而上看调用路径;
- 横向宽度代表采样占比,不是时间轴;
- 最宽函数可能是“等待发生处”,不一定是业务根因;
[unknown]先检查符号、JIT 和栈展开。
4. ftrace、eBPF/BCC 与 SystemTap
| 工具 | 优势 | 约束 |
|---|---|---|
| ftrace | 内核自带、函数/事件追踪 | 数据量大,需熟悉内核 |
| perf | 通用、稳定、采样成本可控 | 定制事件关联能力有限 |
| eBPF/BCC/bpftrace | 灵活聚合、低侵入定向观测 | 内核/BTF/权限/验证器/版本 |
| SystemTap | 旧企业内核生态可用 | 模块与调试符号部署复杂 |
| 语言 profiler | 能理解运行时和业务符号 | 只覆盖对应语言与进程 |
课程评论反复出现 BCC 安装和符号问题。工具不可用时,回到原理和相邻证据,不要把“装不上新工具”当作无法排障。
5. 生产使用安全
- 限定 PID/cgroup/端口/设备;
- 限定采样频率和持续时间;
- 优先内核侧聚合,不逐事件输出;
- 监控工具 CPU、内存和落盘;
- 避免记录业务敏感参数;
- 先在相同内核的预生产环境验证。
6. 自动证据包
告警时自动保留:
text
业务 SLI 与发布事件
主机/容器资源快照
关键累计计数的时间差
进程/线程列表
cgroup events/stat
内核 OOM、hung task、conntrack、驱动日志
30 秒低频 profile(高严重度且满足安全条件时)7. 监控常见误区
- 只看均值,不看分位数;
- 只看资源利用率,不看饱和与错误;
- 把累计 counter 当成当前速率;
- 容器只看主机平均值;
- 告警没有实例、版本和变更标签;
- 只采集“结果”,没有分阶段指标;
- 高基数标签让监控系统先成为瓶颈。