机房巡检自动化方案,降低人工运维工作量
机房巡检自动化方案的核心思路,是用脚本和任务编排工具替代人工逐台登录检查,把CPU、内存、磁盘、服务状态等重复检查项交给定时任务执行。
本文面向零基础运维,带你从零搭建一套可用的自动化巡检流程,完成后你能通过一个命令或定时任务拿到所有服务器的健康报告,大幅减少人工巡检时间。
准备条件:先理清巡检目标和环境
动手前先明确要巡检哪些指标。
常见的机房巡检项包括:
- 服务器连通性(ping或SSH端口)
- CPU使用率、内存使用率
- 磁盘分区使用率
- 关键服务状态(如Nginx、MySQL)
- 系统负载和运行时间
环境方面,建议准备一台管理机(可以是本地电脑或一台跳板机),并确保管理机能通过SSH免密登录所有被巡检服务器。
如果还没配置免密,在管理机执行:
ssh-keygen -t rsa
ssh-copy-id root@192.168.1.10
将192.168.1.10替换为你的服务器IP,逐台执行。
验证免密是否成功:
ssh root@192.168.1.10 "hostname"
能直接返回主机名即表示配置成功。
用Ansible批量执行巡检命令
Ansible适合批量管理多台服务器,不需要在每台机器安装客户端。
在管理机安装:
yum install -y ansible # CentOS/RHEL
apt install -y ansible # Ubuntu/Debian
创建主机清单文件/etc/ansible/hosts,写入被巡检服务器:
[servers]
192.168.1.10
192.168.1.11
192.168.1.12
测试连通性:
ansible servers -m ping
返回pong说明正常。
接着用一条命令采集磁盘使用率:
ansible servers -m shell -a "df -h | grep -v tmpfs"
你可以把常用巡检命令写成Ansible playbook,例如inspect.yml:
- hosts: servers
tasks:
- name: 检查磁盘使用率
shell: df -h | grep -v tmpfs
register: disk_result
- name: 输出磁盘结果
debug:
var: disk_result.stdout_lines
执行ansible-playbook inspect.yml即可看到所有服务器的磁盘信息。
编写Shell巡检脚本并设置定时任务
如果服务器数量不多,用Shell脚本更轻量。
创建/opt/inspect.sh:
#!/bin/bash
LOGFILE="/var/log/inspect_$(date +%F).log"
echo "===== 巡检时间: $(date) =====" >> $LOGFILE
echo "--- 磁盘使用率 ---" >> $LOGFILE
df -h | grep -v tmpfs >> $LOGFILE
echo "--- 内存使用率 ---" >> $LOGFILE
free -m >> $LOGFILE
echo "--- 服务状态 ---" >> $LOGFILE
systemctl is-active nginx >> $LOGFILE 2>&1
systemctl is-active mysqld >> $LOGFILE 2>&1
赋予执行权限:
chmod +x /opt/inspect.sh
手动运行一次确认无报错:
/opt/inspect.sh
cat /var/log/inspect_$(date +%F).log
然后添加定时任务,每天上午9点执行:
crontab -e
写入:
0 9 * * * /opt/inspect.sh
保存后可用crontab -l查看是否生效。
避坑指南:这些细节容易翻车
- SSH免密失败:检查
~/.ssh/authorized_keys权限是否为600,.ssh目录是否为700。 - Ansible inventory路径错误:默认路径是
/etc/ansible/hosts,也可用-i指定自定义路径。 - 脚本换行符问题:在Windows编辑的脚本可能含
\r,用dos2unix转换后再上传。 - 定时任务不执行:确认crond服务已启动,并检查脚本内命令是否使用绝对路径。
- 日志文件过大:建议在脚本中加入清理逻辑,例如保留最近7天日志。
效果验证:确认自动化巡检真正生效
验证分三步。
第一步,手动执行脚本或playbook,确认能输出完整巡检结果。
第二步,等待定时任务触发时间过后,检查日志文件是否生成:
ls -lh /var/log/inspect_*.log
第三步,模拟一个异常场景,比如把某台服务器磁盘写满,观察巡检日志是否能记录到高使用率。
如果日志中能看到对应告警信息,说明巡检项配置正确。
对于更复杂的场景,可以考虑把巡检结果推送到邮件或企业微信机器人,但这属于进阶用法,建议先把基础巡检跑通再扩展。
常见疑问
巡检脚本需要每台服务器都放一份吗?
不需要。
用Ansible时脚本只放在管理机;
用Shell脚本且想本地执行时,才需要分发到各服务器,可通过scp或Ansible的copy模块批量推送。
Ansible和Shell脚本选哪个?
服务器数量少于5台且检查项简单,Shell脚本足够;
数量多、需要统一编排和输出格式时,Ansible更合适。
两者也可以结合使用。
巡检频率设多少合适?
一般每天一次即可,核心业务服务器可增加到每6小时一次。
频率过高会增加管理机负载,建议根据实际运维需求调整。
按照以上步骤执行后,你应能获得一份自动生成的机房巡检日志,人工只需查看异常项,日常巡检工作量会明显下降。
后续可根据业务需要,逐步把更多检查项加入脚本或playbook。