可通过脚本定期采集各节点cpu、内存、磁盘和网络使用率并生成报告或告警;推荐无代理(ssh执行命令)或轻量agent(flask暴露/metrics)方式统一采集;需解析标准化指标、过滤异常值;支持终端简报、csv日志、prometheus对接及阈值告警;注意安全配置、并发控制与日志维护。

可以通过编写脚本定期采集各节点的 CPU、内存、磁盘和网络使用率,汇总后生成简洁报告或触发告警。核心在于统一数据获取方式、集中处理逻辑、避免人工登录每台机器。
统一采集:用 SSH 或 Agent 获取指标
推荐两种轻量方式:
-
无代理方案:脚本遍历服务器列表,通过
ssh user@host "free -m; df -h; top -bn1 | head -20"获取基础指标,配合timeout防卡死;注意配置免密 SSH 和合理超时(如 5 秒) -
轻量 Agent 方案:在每台服务器部署一个简单 HTTP 接口(如用 Python Flask 暴露
/metrics),返回 JSON 格式指标({"cpu": 42.3, "mem_used_mb": 1280}),主脚本用curl批量拉取,更稳定且易扩展
结构化处理:解析+标准化+去噪
原始命令输出格式不一,需清洗再计算:
- CPU 使用率:从
top -bn1提取%Cpu(s)行,用正则匹配空闲率,再用100 - idle得出实际占用 - 内存:用
free -m中Mem:行的used / total计算百分比,排除buff/cache干扰(除非业务强依赖缓存) - 磁盘:对
df -h过滤关键挂载点(如/、/data),跳过 tmpfs/overlay 等虚拟文件系统 - 异常值过滤:单次采集若某节点 CPU > 99.9% 或响应超时,标记为“N/A”而非直接丢弃,便于后续识别故障模式
聚合与输出:生成可读报告或对接监控系统
采集完成后,按需选择输出形式:
- 终端简报:按 CPU 占用降序列出前 5 台高负载机器,附内存/磁盘状态,适合每日晨会快速浏览
-
CSV 日志:保存为
cluster_usage_$(date +%F).csv,含时间戳、主机名、各项百分比,方便 Excel 分析趋势 -
对接 Prometheus:改用
node_exporter+ 自定义 textfile collector,让脚本生成/var/lib/node_exporter/textfile_collector/cluster_usage.prom,天然支持 Grafana 展示 -
阈值告警:例如任意节点内存 > 90% 持续 3 次采集,则发邮件或钉钉消息,附上该节点最近 5 分钟负载曲线(可调用
uptime或sar补充)
安全与维护要点
避免脚本成为运维负担:
- 所有敏感信息(如密码、密钥路径)从环境变量或独立配置文件读取,不硬编码进脚本
- 添加运行锁(
flock)防止同一时段多个实例并发执行,导致采集混乱 - 日志记录每次执行的开始/结束时间、成功数、失败主机列表,错误写入
stderr并保留最近 7 天日志 - 每月检查一次目标服务器是否新增内核参数或命令行为变更(如新版
free默认单位变化),及时更新解析逻辑











