巡检策略的设计原则:SLA、可靠性与成本的博弈

做巡检策略,本质上是在做一道“减法题”。

你不可能监控所有东西,也不可能每秒钟都去查一次。资源有限,机器会挂,网络会抖,人也会累。所以策略设计的第一课,就是搞清楚三个核心约束:SLA 指标、可靠性权衡、成本控制。

我个人习惯,拿到需求先问三个问题:
1. 这个系统挂了,用户多久能忍?
2. 我为了发现故障,把系统搞挂了咋办?
3. 老板给的预算,够不够买我想要的监控能力?

这三个问题,正好对应了上面三个原则。咱们一个个拆开聊。

1. SLA 指标:别拍脑袋,拿数字说话

SLA 是巡检策略的“北极星”。没有 SLA,你的巡检频率就是瞎定。我曾经接手过一套系统,运维同学拍脑袋设了 5 分钟一轮的巡检,结果业务方说他们的 SLA 是 99.9%,折算下来全年宕机时间不能超过 8.76 小时。你想想看,5 分钟一轮的巡检,检测到故障再告警,人工响应再处理——根本来不及。

设计原则其实很简单:巡检周期必须小于 SLA 要求的故障恢复时间(MTTR)。

具体怎么算?这里给一个我常用的速算表:

SLA 等级 年允许宕机时间 推荐巡检周期 备注
99.9%(3个9) 8.76 小时 5~10 分钟 适合核心数据库、支付链路
99.99%(4个9) 52.56 分钟 1~2 分钟 适合在线交易、实时通信
99.999%(5个9) 5.26 分钟 30 秒以内 电信级、金融核心
无 SLA(内部系统) 无约束 30~60 分钟 开发测试环境、非关键数据

不过我要提醒你:这个表只是起点,不是终点。SLA 还分为检测时间和修复时间。检测占用的时间越长,留给修复的窗口就越短。所以我的经验是:巡检周期不要超过 SLA 允许宕机时间的 1/10。举个例子,4个9的 SLA,允许宕机 52 分钟,那巡检周期最好控制在 5 分钟以内,给后续操作留出余量。

小技巧:拿到 SLA 后,先把自己关在屋里算一遍“最坏情况链路”。从故障发生 -> 巡检发现 -> 告警发出 -> 人工确认 -> 定位问题 -> 执行恢复,每一步都要浪费时间。你算出来的巡检周期,必须卡在这个链路的最前端。

2. 可靠性权衡:别巡检把自己检挂了

这又是一个血泪教训。我曾经见过一个团队,为了追求“零漏报”,给核心数据库配了每秒一次的资源巡检脚本。结果脚本本身调用了大量系统视图,直接导致数据库负载飙升,把业务拖死了。说白了,巡检本身也是一种“负载”。

可靠性权衡,核心就是平衡两个指标:

  • 检测覆盖率:你希望抓到多少比例的故障。
  • 巡检入侵性:巡检操作对业务的影响有多大。

这两者,天然冲突。你想想看,如果想 100% 检测到磁盘坏道,你得每秒钟读一次全盘数据——这机器还能用吗?

我个人习惯的做法是分三档:

  1. 轻量巡检(无侵入):读取系统已有指标(CPU idle、内存剩余、TCP 连接数)。频率可以高,不影响业务。
  2. 重量巡检(低侵入):执行测试连接、写入测试文件、模拟用户请求。频率要低,最好错峰执行。
  3. 破坏性巡检(高侵入):重启服务、切换主备、触发故障转移。这些只能安排在变更窗口,且必须有人盯着。

举个例子,我对数据库做巡检时:

  • 每 30 秒查一次 show global status(轻量)
  • 每 5 分钟执行一次 select 1 测试连通性(中量)
  • 每 24 小时做一次主备切换演练(重量,走变更流程)
避坑指南:我曾经犯过一个错,给硬盘做了“全字节校验巡检”,每天凌晨跑一次。结果跑了一个月,硬盘活活被读坏了三块。后来我才意识到:有些硬件,你越巡检它越容易坏。对机械硬盘、老旧 SSD,巡检策略要主动降级。

3. 成本控制:用最少的钱,办最多的事

做技术的人很容易陷入“完美主义”,觉得不漏检、1 秒一次才叫专业。但你得算账。

成本控制的三个大头:

  • 计算成本:巡检脚本消耗的 CPU、内存、网络流量。
  • 存储成本:巡检结果要落库吧?历史数据要保留吧?一年下来磁盘开销不小。
  • 人工成本:巡检结果谁看?告警谁处理?误报越多,人工浪费越严重。

我个人习惯,在确定巡检策略前,先画一个“成本-收益”矩阵:

巡检级别 单次成本(估算) 能发现的故障类型 建议频率
ping 连通性 极低(0.001 元/次) 机器宕机、网络中断 10 秒一次
系统资源指标 低(0.01 元/次) CPU/内存/磁盘接近瓶颈 1 分钟一次
业务接口探测 中(0.1 元/次) 服务假死、返回异常、超时 5 分钟一次
全链路压测 高(10 元+/次) 性能瓶颈、容量不足、配置错误 按需(周/月/季度)

你发现没有?越是昂贵的巡检,频率就要越低。这不是怕花钱,而是怕投入产出比失衡。我见过有人为了省成本,把所有巡检都拉到 10 分钟一次,结果故障发现延迟,损失比省下的监控费大几个数量级。也见过有人不计成本地堆巡检,结果监控系统比业务系统还吃资源。

真正的高手,会做“分层分级”:

  • 核心链路:高频率 + 中低成本的巡检组合。
  • 非核心链路:低频率 + 低成本巡检,甚至不做巡检,靠被动告警。
  • 硬件层:遵循厂商建议的巡检参数,不要自作聪明去刷寿命。
巡检策略设计原则三角权衡 SLA 指标 决定巡检频率上限 可靠性权衡 覆盖率 vs 入侵性 成本控制 计算/存储/人工 设计目标:最优巡检策略 频次合理 · 不干扰业务 · 成本可控 三个原则不是独立选择,而是互相制约 SLA 推高频率 → 可靠性要求降低入侵 → 成本需要压下来 最终落地方案,是三个约束下的“可行解”,不是“最优解” 每次调优,都是在三角里找一个新平衡点

嗯,这张图我放了很久。你看这三个节点,每个都在往外拉,你不去主动平衡,它们就会互相撕扯。我个人经验是:先定 SLA,再压成本,最后用可靠性来调节具体参数。先算清楚必须做到什么程度,然后找性价比最高的方案,最后用可靠性测试验证会不会出问题。

举个例子,我有一个核心支付系统,SLA 要求 4个9。我用轻量巡检每 30 秒看一次进程存活和端口监听,成本极低。每个 5 分钟用测试账号发起一笔小额支付请求,成本中等,但能真实验证业务链路。每 24 小时做一次主备切换,成本高,但能保证故障时你真的切的过去。你看,这就是按三角原则落地的实际策略。

小结一下我今天说的重点

  • SLA 指标:别凭感觉设巡检频率。用公式算,MTTR 除以 10。
  • 可靠性权衡:巡检不能成为故障本身。分轻中重三级,错峰执行。
  • 成本控制:算清楚每笔巡检的账,核心资源多投,边缘资源少管。

记住,没有完美的巡检策略,只有当前成本约束下最靠谱的策略。后面我会带你们一步步把这个三角落到具体代码和脚本里去。