该方案通过本地脚本+SSH批量执行实现无Agent多服务器资源巡检:一、remote_check.sh远程采集磁盘/内存/CPU结构化数据;二、check_all.sh本地循环SSH拉取并汇总至TSV;三、awk快速阈值告警;四、可扩展定时、邮件、报表等。

在 Linux 系统中,通过一个轻量、可复用的容量监控脚本,配合 SSH 批量执行机制,就能高效完成多台服务器的磁盘/内存/CPU 使用率巡检。核心思路是:本地写好检查逻辑,远程批量拉取数据,本地汇总分析——无需部署 Agent,也不依赖复杂平台。
一、编写通用巡检脚本(remote_check.sh)
该脚本运行在目标服务器上,输出结构化结果(字段用制表符分隔,便于后续解析):
- 检查磁盘使用率(排除 /proc /sys 等伪文件系统,只看真实挂载点)
- 统计内存使用率(基于 free -m 中的 used / total 计算,剔除缓存干扰)
- 获取 CPU 平均负载(uptime 的 1 分钟值)和核心数,估算相对负载
- 加上主机名和时间戳,确保结果可追溯
示例脚本内容(保存为 remote_check.sh):
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
#!/bin/bash
HOST=$(hostname -s)
TIME=$(date +"%Y-%m-%d %H:%M")
DISK=$(df -h | awk '$5 ~ /[0-9]+%/ && $1 !~ /^tmpfs|devtmpfs|overlay/ {print $5}' | head -1 | sed 's/%//')
MEM_USED=$(free -m | awk 'NR==2{printf "%.0f", $3*100/$2}')
CPU_LOAD=$(uptime | awk -F'load average:' '{print $2}' | awk '{print $1}' | sed 's/,//')
CPU_CORES=$(nproc 2>/dev/null || echo 1)
CPU_RATIO=$(awk "BEGIN {printf \"%.1f\", $CPU_LOAD / $CPU_CORES * 100}")
<p>echo -e "$HOST\t$TIME\t$DISK\t$MEM_USED\t$CPU_RATIO"
二、本地批量执行并收集结果(check_all.sh)
在运维机(或跳板机)上准备服务器列表(servers.txt,每行一个 IP 或主机名),用 for 循环 + SSH 执行远程脚本:
- 确保本地已配置免密登录(ssh-copy-id 提前完成)
- 用 timeout 控制单台超时(如 10 秒),避免卡死
- 将每台结果追加到统一日志(如 report_$(date +%H%M).tsv)
- 失败时记录错误(如 “SSH failed”),方便定位网络或权限问题
关键命令片段:
while IFS= read -r ip; do [ -z "$ip" ] && continue timeout 10 ssh -o ConnectTimeout=5 "$ip" 'bash -s' < remote_check.sh 2>/dev/null || echo -e "$ip\tERROR\t-\t-\t-" done < servers.txt > report_$(date +%H%M).tsv
三、快速分析与告警(简单但实用)
用 awk/grep 即可做阈值筛查,比如查磁盘超 90%、内存超 85%、CPU 负载比超 70% 的机器:
# 查高风险项(输出含颜色更醒目)
awk -F'\t' '$3>90 || $4>85 || $5>70 {print "\033[1;31m"$1"\033[0m",$2,"DISK:"$3"% MEM:"$4"% CPU:"$5"%"}' report_*.tsv
<h1>导出异常清单供跟进</h1><p>awk -F'\t' '$3>90 || $4>85 || $5>70 {print $1,$2}' report_*.tsv > alert_list.txt
四、进阶建议(按需启用)
- 把脚本封装成 systemd timer,实现每小时自动巡检 + 邮件摘要(用 mailx 或 sendmail)
- 用 rsync 同步脚本到所有服务器一次,避免每次传输;或改用 Ansible 的 script 模块统一分发执行
- 将 TSV 结果导入 Excel 或用 pandoc 转 Markdown 表格,生成日报
- 对关键业务服务器单独加测:特定目录大小(du -sh /data)、inode 使用率(df -i)等

















