自动化监控linux集群负载的核心是实现“自动查、比、报、动”,通过prometheus+node exporter采集原始指标,分层告警(基础/io/异常),结构化自动响应,并将巡检结果反哺ci/cd闭环。

直接用自动化流程监测 Linux 集群负载,核心是把“看一眼”变成“自动查、自动比、自动报、自动动”。不靠人盯屏,也不靠临时脚本,而是让监控成为集群运行的默认能力。
用 Prometheus + Node Exporter 统一采集指标
每台节点部署 Node Exporter,暴露 CPU、内存、磁盘 I/O、负载平均值(load1/load5/load15)、进程数、上下文切换等原始指标。Prometheus 主服务定时抓取所有节点数据,自动发现新节点(通过 DNS SRV 或 Consul 服务注册)。关键点在于:
- 所有采集目标配置存入 Git,变更可追溯
- 每个节点打上 role、env、region 等标签,便于按维度聚合(如
avg by (role) (node_load1)) - 负载指标必须保留原始粒度(例如 15 秒采样),避免预聚合丢失峰值细节
基于负载特征设置分层告警规则
负载不是单看一个数字,要结合 CPU、I/O、进程状态综合判断。Alertmanager 中配置差异化规则:
- 基础层:
node_load1 > (count by (instance) (node_cpu_seconds_total{mode="idle"}) - 1) * 1.5(即 load1 超过逻辑核数 ×1.5) - IO 层:
rate(node_io_wait_seconds_total[5m]) > 0.3 and node_load1 > 2(等待 I/O 时间占比高且负载已起) - 异常层:
count by (instance) (node_procs_state{state="D"}) > 5(存在大量不可中断睡眠进程,大概率卡在磁盘或锁) - 所有告警附带链接跳转到 Grafana 对应时间轴面板,一键下钻
自动响应不等于盲目重启
当负载持续超标时,触发预定义动作而非简单 kill 进程:
- 先调用
systemctl is-system-running确认 systemd 正常,再执行systemctl list-units --state=failed获取失败单元 - 若发现某服务(如 nginx)子进程异常增多,自动运行
pstack $(pgrep -f "nginx: worker") | head -20并存入日志归档 - 负载超阈值且磁盘使用 >90%,执行清理脚本:
find /var/log -name "*.log" -mtime +7 -delete,并记录 journalctl - 每次自动操作生成结构化事件:
{"action":"disk_cleanup","target":"/var/log","reason":"load_high+disk_full","result":"success"}
巡检结果反哺配置闭环
把负载监控和 CI/CD 巡检打通:
- 每日凌晨全量巡检,输出 JSON 报告含各节点 load5、CPU steal、iowait、swap 使用率
- 若某类角色节点(如 kafka-broker)连续 3 天 load5 中位数高于同类 30%,自动创建 Jira ticket 并标记“容量评估”
- 巡检报告写入 InfluxDB,Grafana 面板叠加显示“历史基线偏差”,避免误判周期性高峰
不复杂但容易忽略











