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