统计系统进程负载趋势需将进程数转化为时间序列并分析变化节奏、持续时间及关联特征;监控node_processes_total等四项指标,用promql计算均值、速率、偏移量和超阈值时长,并结合cpu、内存等指标交叉验证,在grafana中组合多图与分级告警。

统计系统进程负载趋势,核心是把“进程数”这个离散指标转化为可分析的时间序列,并结合上下文判断是否异常。它不是简单看一个数字,而是关注变化节奏、持续时间和关联特征。
明确要监控的进程指标类型
Node Exporter 默认不暴露总进程数,必须启用 --collector.processes 才能获取:
- node_processes_total:当前系统总进程数(Gauge 类型,可增可减)
- node_processes_running:正在 CPU 上运行的进程数(反映瞬时调度压力)
- node_processes_blocked:因等待 I/O 而阻塞的进程数(常是磁盘或网络瓶颈信号)
- node_processes_zombie:僵尸进程数(需重点关注,长期存在说明父进程未回收)
用 PromQL 计算关键趋势
直接查 node_processes_total 只能看到当前值。真正有用的是它的动态特征:
- 过去 5 分钟平均值:
avg_over_time(node_processes_total[5m]) - 每分钟增长速率:
rate(node_processes_total[1m])(单位:个/秒,注意结果需乘以 60 得到每分钟增量) - 相比 1 小时前的变化量:
node_processes_total - node_processes_total offset 1h - 连续 10 分钟高于阈值(如 500)的时长:
count_over_time((node_processes_total > 500)[10m:1m])
结合其他指标交叉验证
孤立看进程数容易误判。比如 fork 爆炸式增长,通常伴随:
- CPU 系统态(sy)飙升 →
100 * (irate(node_cpu_seconds_total{mode="system"}[5m]) / ignoring(mode) group_left() irate(node_cpu_seconds_total[5m])) - 上下文切换激增 →
irate(node_context_switches_total[5m]) - 平均负载(load1)持续高于 CPU 核心数 →
node_load1 / count by(instance) (node_cpu_seconds_total{mode="idle"}) - 内存分配失败或 OOM killer 活跃 → 查
node_vmstat_pgpgin、node_vmstat_oom_kill
在 Grafana 中构建有效视图
不要只放一条折线图。建议组合展示:
- 主图:node_processes_total(粗线) + node_processes_running(细线,虚线)+ node_load1(浅色填充背景)
- 辅助图:右侧 Y 轴叠加 irate(node_context_switches_total[1m]) 和 irate(node_cpu_seconds_total{mode="system"}[1m])
- 告警面板:用
node_processes_zombie > 0触发 P1 告警;用avg_over_time(node_processes_total[15m]) > 800 and rate(node_processes_total[5m]) > 2触发 P2 告警











