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 调用的是脚本文件路径,只要路径不变,修改脚本内容后下次执行自动生效。

自动化巡检的核心价值是把重复的登录查看变成一份按时间归档的文档,方便对比和追溯。
建议先按上面的脚本跑通一台服务器,确认报告内容完整后,再逐步扩展到全部节点。

分享到:
上一篇
IT运维服务SLA协议,故障响应承诺标准
下一篇
运维故障分类,网络故障、硬件故障、程序故障
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意