核心是“一台中心机统一调度+每台被巡机轻量响应”,通过ssh免密执行极简check.sh采集指标,中心机汇总判异、阈值告警、html日报及错峰并发控制。

多节点定时巡检不靠堆工具,靠结构设计和权限控制。核心是“一台中心机统一调度 + 每台被巡机轻量响应”,避免在每台机器上部署复杂服务或共享密钥。
选一台中心巡检机,用 SSH 免密拉取数据
不需要在所有节点装 agent 或 Python 环境,只要中心机有 SSH 密钥对、目标机开启 sshd 且允许密钥登录即可。
- 用 ssh-keygen 在中心机生成密钥(不设密码),用 ssh-copy-id user@ip 分发公钥到各节点
- 脚本中用 ssh -o ConnectTimeout=5 -o BatchMode=yes user@ip 'bash -s' 远程执行本地脚本,不依赖远程机预装额外文件
- file.txt 存 IP 和用户名(如 192.168.10.10 admin),不用存密码,更安全
被巡节点只运行极简检查逻辑
check.sh 不超过 30 行,只做采集不处理告警:查 uptime、free -m、df -h /、systemctl is-active sshd、lastb -n 5 | wc -l,全部用标准命令,无外部依赖。
- 输出统一格式:每行一个字段,用 TAB 分隔,例如:HOST\t192.168.10.10\tLOAD\t1.2\tMEM_PCT\t82\tDISK_PCT\t76\tSSHD\tactive\tFAILED_LOGIN\t0
- 不写日志到远程机磁盘,直接 stdout 返回给中心机,减少 I/O 和权限干扰
- 超时或失败时返回 ERROR 字段,中心脚本统一标记为“不可达”
中心机汇总、判异、归档
shellsh.sh 负责循环调用、收集结果、按阈值标红、生成日报,并控制通知节奏。
- 定义全局阈值:LOAD_WARN=1.5、MEM_WARN=85、DISK_WARN=90,在配置区集中管理
- 异常项写入 /var/log/inspect/alert_$(date +%Y%m%d).log,带时间戳和主机名,保留 7 天
- 当日首次发现某台机异常,才触发邮件;用 /tmp/last_alert_192.168.10.10 文件记录最后告警时间,避免刷屏
- 最终报告生成 HTML 表格,绿色=正常、黄色=预警、红色=异常,用 cat > report.html 直接拼,不依赖模板引擎
用 cron 控制频率,但避开资源争抢
30 台节点不建议同时发起 SSH 请求,容易触发连接拒绝或丢包。错峰执行更稳。
- crontab 设为每小时整点启动,脚本内部用 sleep $((RANDOM % 120)) 随机延时 0–119 秒再开始遍历
- 每次最多并发 5 路 SSH(用 wait + background 控制),防止中心机 load 突增
- 日志路径固定、命名带日期,配合 logrotate 按周轮转,不手动清理











