IT运维巡检报告模板,自动化生成巡检文档
日常运维中,巡检报告往往靠手工登录服务器逐项查看再填表,耗时且容易漏项。
其实用一段 Shell 脚本就能自动采集 CPU、内存、磁盘、服务状态等关键指标,按固定模板输出巡检文档。
下面从指标规划到脚本落地,完整走一遍流程。
先明确巡检要采集哪些指标
自动化生成巡检文档的前提是确定报告里需要哪些字段。
常见的基础巡检项如下:
- 系统负载:
uptime查看 1、5、15 分钟平均负载 - CPU 使用率:
top -bn1或读取/proc/stat - 内存与 Swap:
free -m输出已用、剩余、缓存 - 磁盘使用率:
df -h按挂载点列出使用百分比 - 关键服务状态:
systemctl is-active nginx mysql等 - 登录与安全:
last最近登录记录、who当前在线用户 - 端口监听:
ss -tlnp确认业务端口正常
建议先用文本列出你要巡检的服务器清单和检查项,形成一份模板草稿,后续脚本直接按这个结构输出,避免边写脚本边改需求。
编写自动化巡检脚本
在任意一台可 SSH 到目标服务器的管理机上创建脚本,例如 /opt/scripts/inspect.sh。
以下是一个可运行的基础版本:
#!/bin/bash
# 巡检报告生成脚本
REPORT_DIR="/var/log/inspection"
DATE=$(date +%Y%m%d)
HOSTNAME=$(hostname)
REPORT_FILE="${REPORT_DIR}/inspect_${HOSTNAME}_${DATE}.txt"
mkdir -p "$REPORT_DIR"
{
echo "=========================================="
echo " IT运维巡检报告"
echo " 主机名: ${HOSTNAME}"
echo " 生成时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo "=========================================="
echo ""
echo "--- 1. 系统负载 ---"
uptime
echo ""
echo "--- 2. 内存使用 ---"
free -m
echo ""
echo "--- 3. 磁盘使用率 ---"
df -h | grep -v tmpfs
echo ""
echo "--- 4. 关键服务状态 ---"
for svc in nginx mysql sshd; do
status=$(systemctl is-active $svc 2>/dev/null)
echo "$svc: $status"
done
echo ""
echo "--- 5. 监听端口 ---"
ss -tlnp | grep LISTEN
echo ""
echo "--- 6. 最近登录 ---"
last -n 5
} > "$REPORT_FILE"
echo "巡检报告已生成: $REPORT_FILE"
给脚本加执行权限:chmod +x /opt/scripts/inspect.sh,然后手动运行一次 bash /opt/scripts/inspect.sh 验证输出。
关键点:脚本里用 { ... } > file 把多段命令的输出重定向到同一个文件,结构清晰且方便后期插入新的检查项。
批量巡检多台服务器
如果管理机配置了到各服务器的免密 SSH,可以用循环批量执行:
for host in 192.168.1.10 192.168.1.11 192.168.1.12; do
ssh root@$host "bash -s" < /opt/scripts/inspect.sh
done
如果没配免密登录,建议先执行 ssh-copy-id root@目标IP 把公钥推过去,否则每次都要输密码,批量脚本无法无人值守运行。
配置定时任务实现无人值守
用 crontab 让巡检脚本每天自动跑一次并生成带日期的文档:
crontab -e
加入一行,表示每天早上 7 点执行:
0 7 * * * /bin/bash /opt/scripts/inspect.sh >> /var/log/inspection/cron.log 2>&1
保存后可以用 crontab -l 确认任务已写入。
第二天检查 /var/log/inspection/ 目录下是否生成了对应的 inspect_主机名_日期.txt 文件。
容易踩的坑
- 磁盘空间:巡检报告长期累积会占用空间,建议在脚本末尾加一行
find /var/log/inspection -name "*.txt" -mtime +30 -delete自动清理 30 天前的报告。 - 服务名写错:
systemctl is-active对不存在的服务会返回空值,脚本中最好加2>/dev/null屏蔽报错,否则报告里会出现一堆无关错误信息。 - 权限不足:部分命令如
ss -tlnp查看进程名需要 root 权限,建议脚本以 root 身份运行,或在 crontab 中指定 root 用户。 - 时区问题:crontab 使用的时区可能和业务时区不一致,如果对报告时间有要求,可在脚本中显式指定
TZ='Asia/Shanghai'。
怎么判断巡检报告真的可用
生成后至少验证三点:打开报告文件,确认标题、主机名、时间正确;
检查各项指标是否都有输出值而非空白;
确认服务状态列与手动执行 systemctl status 的结果一致。
如果某项为空,说明对应命令在该环境下未返回预期结果,需要单独调试。
可独立引用的判断条件:如果报告里磁盘使用率超过 85%、服务状态显示 inactive、或负载持续高于 CPU 核数,应当作为异常项在巡检后跟进处理。
常见疑问
巡检脚本必须部署在每台服务器上吗? 不一定。
如果管理机能免密 SSH 到所有目标机器,只需在管理机放一份脚本,通过循环远程执行即可。
报告用纯文本够不够,需要生成 HTML 或 Excel 吗? 纯文本适合快速查看和邮件发送。
如果需要图表或归档,可以在脚本输出后用工具转换,但建议先把文本模板跑通再考虑格式升级。
巡检频率设置多少合适? 一般业务服务器每天一次即可,核心数据库或高负载节点可以增加到每天两次。
频率过高意义不大,关键是异常项能被及时发现。
脚本改了之后需要重新配置 crontab 吗? 不需要。
crontab 调用的是脚本文件路径,只要路径不变,修改脚本内容后下次执行自动生效。
自动化巡检的核心价值是把重复的登录查看变成一份按时间归档的文档,方便对比和追溯。
建议先按上面的脚本跑通一台服务器,确认报告内容完整后,再逐步扩展到全部节点。