3. 基础设施层阈值(一):CPU使用率、内存使用率、磁盘IO延迟的阈值设定与告警级别

基础设施层是质量门禁体系的最底层,承载着所有上层应用的运行环境。CPU、内存、磁盘IO是三大核心资源,其阈值设定直接影响业务稳定性和故障响应效率。本节将围绕这三个指标,给出分层阈值设计原则、告警级别划分以及Grafana面板可视化调优建议。

3.1 阈值分层设计总则

基础设施层阈值采用“三区两线”模型:安全区(正常)、预警区(关注)、危险区(告警)。每条指标设定两条关键线:Warning线和Critical线。告警级别对应P4(通知)、P3(警告)、P2(严重)、P1(紧急)。

告警级别 P4(通知) P3(警告) P2(严重) P1(紧急)
响应要求 工作日处理 4小时内 1小时内 15分钟内
CPU使用率 >70%持续5min >85%持续3min >92%持续2min >98%持续30s
内存使用率 >75%持续5min >85%持续3min >92%持续2min >97%持续30s
磁盘IO延迟 >20ms持续5min >50ms持续3min >100ms持续2min >200ms持续30s
设计原则:阈值设定需考虑“误报率”与“漏报率”的平衡。持续时长条件(如持续5min)可有效过滤瞬时毛刺,避免告警风暴。同时,不同业务场景(如数据库节点 vs Web节点)应允许差异化调整。

3.2 CPU使用率阈值详解

CPU使用率是衡量计算资源饱和度的核心指标。阈值设定需区分用户态(user)、系统态(system)、IO等待(iowait)和空闲(idle)。单纯看整体使用率可能掩盖IO瓶颈。

  • 安全区(<70%):系统负载正常,预留30%缓冲应对突发流量。
  • 预警区(70%~85%):触发P4通知,建议检查是否存在异常进程或计划任务。
  • 危险区(85%~92%):触发P3警告,需排查CPU热点函数或扩容评估。
  • 严重区(92%~98%):触发P2严重告警,服务可能出现响应劣化,需立即介入。
  • 紧急区(>98%):触发P1紧急告警,系统接近死锁,需强制干预或重启。
Grafana面板调优建议:使用rate(node_cpu_seconds_total{mode!="idle"}[5m])计算CPU使用率,叠加avg by (instance)聚合。面板颜色映射:绿色(0-70%)、黄色(70-85%)、橙色(85-92%)、红色(92-98%)、深红(98-100%)。建议添加CPU饱和度线(如85%水平线)作为视觉参考。

3.3 内存使用率阈值详解

内存使用率需关注实际使用量与可用量,避免被缓存(cache/buffer)误导。推荐使用(total - available) / total * 100计算真实内存压力。

区间 使用率范围 告警级别 典型表现
安全区 0%~75% 无 系统响应正常,swap使用为0
预警区 75%~85% P4 开始使用swap,但量很小
危险区 85%~92% P3 swap持续增长,OOM Killer风险上升
严重区 92%~97% P2 频繁swap交换,应用响应变慢
紧急区 97%~100% P1 OOM Killer触发,进程被强制终止
避坑提示:不要直接使用node_memory_MemTotal_bytes - node_memory_MemFree_bytes计算内存使用率,因为Linux会将空闲内存用作缓存,导致计算值虚高。务必使用node_memory_MemAvailable_bytes指标。

3.4 磁盘IO延迟阈值详解

磁盘IO延迟是衡量存储性能的关键指标,直接影响数据库、日志系统等IO密集型服务的吞吐量。延迟指标通常包括平均等待时间(await)和服务时间(svctm),阈值设定以await为主。

  • 安全区(<20ms):IO性能良好,适合大多数在线业务。
  • 预警区(20ms~50ms):触发P4通知,建议检查磁盘队列长度(avgqu-sz)是否异常。
  • 危险区(50ms~100ms):触发P3警告,应用层可能出现IO等待,需排查慢查询或日志刷盘频率。
  • 严重区(100ms~200ms):触发P2严重告警,数据库事务延迟明显增加,需考虑IO限流或扩容。
  • 紧急区(>200ms):触发P1紧急告警,存储子系统接近饱和,可能导致服务超时。
Grafana面板调优建议:使用rate(node_disk_io_time_seconds_total[5m]) / rate(node_disk_io_time_weighted_seconds_total[5m])计算平均IO延迟。面板建议使用热力图(Heatmap)展示延迟分布,配合百分位线(p99/p95)更直观反映尾部延迟。阈值线使用虚线+标签标注,避免遮挡数据曲线。

3.5 阈值联动与告警抑制

单一指标告警容易产生误报,建议引入多指标联动规则:

# 示例:CPU + 内存联动告警规则(PromQL)
# 当CPU使用率 > 85% 且 内存使用率 > 85% 时,提升告警级别
(
  avg by (instance) (rate(node_cpu_seconds_total{mode!="idle"}[5m])) > 0.85
  and
  (1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) > 0.85
) or
# 当CPU使用率 > 92% 或 内存使用率 > 92% 时,直接触发P2
(
  avg by (instance) (rate(node_cpu_seconds_total{mode!="idle"}[5m])) > 0.92
  or
  (1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) > 0.92
)
告警抑制策略:当同一主机触发CPU P1告警时,自动抑制该主机的磁盘IO延迟P3告警(因为CPU饱和可能导致IO等待虚高)。抑制时长建议设置为告警恢复后5分钟,避免告警风暴。
基础设施层阈值分层与告警联动流程 基础设施层阈值分层与告警联动流程 CPU使用率 70%/85%/92%/98% 内存使用率 75%/85%/92%/97% 磁盘IO延迟 20ms/50ms/100ms/200ms 阈值判断 P4/P3/P2/P1 阈值判断 P4/P3/P2/P1 阈值判断 P4/P3/P2/P1 多指标联动规则 CPU+内存双高 → 提升告警级别 | 同主机抑制 告警输出 P1紧急 / P2严重 / P3警告 / P4通知 告警抑制 CPU P1时抑制IO延迟告警

3.6 Grafana面板可视化调优要点

将阈值分层设计落地到Grafana面板时,需关注以下调优要点:

  1. 阈值线可视化:使用thresholds功能为面板添加水平参考线,不同级别使用不同颜色(绿/黄/橙/红/深红)。
  2. 告警级别标签:在面板图例中显示当前告警级别,使用value mapping将数值区间映射为文字标签(如“安全”、“预警”、“危险”)。
  3. 联动视图:创建复合面板,将CPU、内存、磁盘IO延迟放在同一行,便于快速定位资源瓶颈。
  4. 时间窗口自适应:根据告警级别动态调整时间窗口,P1告警自动切换到最近15分钟视图,P4告警保持1小时视图。
  5. 告警事件叠加:在时间序列图上叠加告警事件标记(使用annotations),直观展示告警触发与资源变化的关系。
实战案例:某电商平台在双11大促期间,将CPU使用率P1阈值从98%下调至95%,并增加“持续30秒”条件,成功提前5分钟发现扩容需求,避免了服务雪崩。调优后,P1告警准确率从72%提升至94%。