1. 监控体系总览:为什么需要监控?监控的黄金信号

大家好,我是这次课程的主讲。在调度系统这个领域摸爬滚打了十几年,踩过的坑比走过的路还多。今天咱们聊聊监控体系总览——说白了,就是回答两个问题:为什么要监控?以及到底该监控什么?

我记得刚入行那会儿,有个老前辈跟我说过一句话,我一直记到现在:「没有监控的系统,就像闭着眼睛开车。」你想想看,调度系统是业务的中枢神经,一旦出问题,影响面往往是全站的。所以,监控不是可选项,而是基础设施。

1.1 为什么需要监控?

先说说最根本的问题。很多人觉得监控就是「出问题了报警」,其实远不止这些。我个人习惯把监控的价值分成四个层次:

  • 发现故障——系统挂了你能第一时间知道,而不是等用户投诉
  • 定位根因——出问题后能快速缩小范围,知道是哪里出了岔子
  • 容量规划——通过趋势数据预判资源瓶颈,提前扩容
  • SLA 保障——量化服务质量,给业务方一个交代

我在项目中遇到过不止一次,因为监控缺失导致故障从几分钟拖到几小时。有一次调度集群的某个节点内存泄漏,因为没有设置内存使用率的告警,直到整个集群 OOM 才被发现。嗯,那次事故之后,我连夜把全量节点的资源监控补上了。

核心观点:监控不是为了「看」,而是为了「做」。没有 actionable 的监控,就是一堆数字垃圾。

1.2 监控的黄金信号(The Four Golden Signals)

好,既然要监控,那到底该监控哪些指标?Google 的 SRE 团队总结了一套方法论,叫做「黄金信号」。一共四个维度:延迟、流量、错误、饱和度。我这些年做过的调度系统,无论规模大小,这套框架基本都能覆盖。

下面我逐个拆解,每个信号我都会结合调度系统的场景来讲。

1.2.1 延迟(Latency)

延迟,就是请求从发出到收到响应的时间。在调度系统里,这个指标尤其敏感。比如一个任务提交到调度器,到它真正被分配到 worker 执行,中间经历了多少毫秒?

我建议把延迟拆成两部分来看:

  • 服务端延迟——调度器处理请求本身的时间
  • 网络延迟——请求在网络传输中的耗时

为什么要拆?因为有一次我们线上发现调度延迟飙升,一开始以为是调度器性能问题,查了半天发现是某个机房的交换机出了问题。如果不拆开看,很容易被表象误导。

避坑指南:我曾经犯过一个错误——只监控平均延迟。结果平均延迟看起来正常,但 P99 延迟已经高得离谱。记住,平均延迟会掩盖长尾问题。建议至少监控 P50、P90、P99 三个分位值。

1.2.2 流量(Traffic)

流量,就是系统承载的请求量。对于调度系统来说,流量指标包括:

  • 每秒提交的任务数(TPS)
  • 同时运行的任务数(并发数)
  • 队列中的等待任务数

流量监控的意义在于:它能告诉你系统当前的压力有多大。我记得有一次大促期间,流量突然暴涨到平时的 10 倍,如果没有流量监控,我们根本不知道调度器已经快扛不住了。

这里有个小技巧:流量指标最好跟历史数据做对比。比如设置一个告警规则——「当前流量超过上周同期的 200%」,这样能提前发现异常流量。

1.2.3 错误(Errors)

错误,就是请求失败的比率。但「错误」的定义需要仔细斟酌。我把它分成两类:

错误类型 说明 调度系统示例
显式错误 HTTP 5xx、超时、异常抛出 任务提交返回 503、worker 连接超时
隐式错误 返回成功但结果不对 任务被调度到错误的节点、数据丢失但无报错

显式错误好抓,隐式错误才是真正的坑。我曾经遇到过一个 case:调度器返回了 200,但任务实际上没有被执行,因为 worker 注册信息过期了。这种错误,光靠 HTTP 状态码是抓不到的,必须结合业务层面的校验。

注意:错误率告警不要只设一个固定阈值。比如「错误率 > 5%」就报警,但流量低的时候 5% 可能只是几个请求,流量高的时候 5% 可能是几千个。建议用数量 + 相对比例双重判断。

1.2.4 饱和度(Saturation)

饱和度,就是系统资源被用到了什么程度。调度系统里常见的饱和度指标:

  • CPU 使用率
  • 内存使用率
  • 磁盘 I/O 等待时间
  • 网络带宽占用
  • 线程池/连接池的活跃度

饱和度监控的核心价值在于预测。当资源使用率达到 70% 的时候,你就该开始关注了,而不是等到 100% 才报警。因为系统在接近饱和时,性能会急剧下降——这叫「拐点效应」。

我个人习惯给每个资源设两个阈值:

  • 警告阈值(70%)——需要关注,准备扩容
  • 严重阈值(90%)——立即处理,否则马上出问题

1.3 黄金信号在调度系统中的落地

说了这么多理论,咱们看看实际怎么用。下面这张图是我自己总结的调度系统黄金信号框架,你可以对照着搭建自己的监控体系。

调度系统黄金信号监控框架 调度系统 延迟 流量 错误 饱和度 延迟子指标 • P50/P90/P99 延迟 • 调度耗时 • 队列等待时间 流量子指标 • 任务提交 TPS • 并发任务数 • 队列深度 错误子指标 • HTTP 5xx 比率 • 任务失败率 • 隐式错误检测 饱和度子指标 • CPU/内存使用率 • 线程池活跃度 • 磁盘 I/O 等待 核心原则 1. 每个信号至少设置 2 个告警阈值(警告 + 严重) 2. 结合历史基线做动态告警,避免静态阈值误报

1.4 一个真实的案例

最后分享一个我亲身经历的案例,帮你理解这四个信号是怎么协同工作的。

有一次,我们的调度系统在高峰期突然变慢。从延迟指标看,P99 从 200ms 飙升到了 5s。但流量指标显示 TPS 并没有明显变化。这说明问题不在请求量上,而是系统内部出了状况。

接着看错误指标,HTTP 错误率正常,但任务失败率从 0.1% 涨到了 3%。嗯,这里有问题。再查饱和度,发现数据库连接池的使用率达到了 95%。

真相大白了:数据库连接池接近饱和,导致部分任务获取连接超时,任务失败率上升。而成功获取连接的任务也因为排队等待,延迟飙升。

你看,四个信号缺一不可。如果只监控延迟,你只知道「慢了」,但不知道为什么慢。只有四个信号一起看,才能快速定位根因。

我的建议:刚开始搭建监控体系时,不要贪多。先把这四个黄金信号的核心指标落地,跑通之后再逐步细化。我见过太多团队一上来就搞几百个指标,结果没人看得过来,反而淹没了真正重要的告警。