Ansible自动化巡检报告通过“采集结构化数据+渲染HTML模板+定时触发分发”实现,全程可审计、可复现、可归档;采集用脚本+facts结合,Jinja2内联CSS渲染阈值分级报告,mail模块发信并copy归档,cron定时执行+日志校验闭环管理。

用 Ansible 实现自动化运维巡检报告,核心是“采集结构化数据 + 渲染可视化模板 + 定时触发分发”,不依赖外部监控系统,全程可审计、可复现、可归档。
采集系统指标:脚本 + facts 结合更稳
纯靠 setup 模块只能拿到基础 facts(如 CPU 核数、内存总量),但负载、磁盘使用率、TCP 连接数等需实时计算。推荐方式:
- 在目标节点执行轻量脚本(如
check_linux.sh),统一输出 JSON 格式数据,内容含:hostname、loadavg、mem_used_percent、disk_root_used、inode_used、tcp_estab等字段 - 用 command 模块执行并 register 结果,再用 set_fact 提取关键值,避免 shell 解析歧义
- 对异构集群(如不同 CPU 核数或磁盘挂载点),用
when: ansible_distribution == "CentOS"或group_names contains "db"做条件分支,确保指标采集逻辑适配
生成 HTML 报告:Jinja2 模板驱动样式与阈值
巡检报告不是罗列数字,而是让状态一目了然:
- 用 template 模块将采集到的变量渲染进
report-cssinline.html—— 所有 CSS 必须内联(),否则邮件客户端会丢样式 - 阈值分级写死在模板中:
{% if disk_used > 90 %}critical{% elif disk_used > 80 %}bad{% else %}ok{% endif %},对应红/黄/绿背景色 - 时间戳统一用
{{ ansible_date_time.iso8601 }},避免本地 locale 差异;主机 IP 取ansible_all_ipv4_addresses | first防多网卡错乱
自动发送与归档:邮件 + 本地存档双通道
报告生成后必须触达责任人,并留存证据:
- 用 community.general.mail 模块发 HTML 邮件,配置
host、port(465/587)、username、password和to列表;主题加日期,如"[巡检报告] {{ ansible_date_time.date }}" - 同时用 copy 模块把生成的 HTML 文件同步到控制机指定目录(如
/var/log/ansible-reports/),文件名含主机名和时间,例如web01-20261008-1325.html - 加 stat 检查目标路径是否存在,失败则 fail,确保归档不丢失
定时运行与闭环管理:cron + 日志校验
Ansible 本身不驻留,需靠系统级调度保障持续性:
- 用 ansible.builtin.cron 在每台目标节点部署每日凌晨 2 点执行的巡检任务,命令指向本地脚本,日志追加到
/var/log/ansible-xunjian.log - 主 Playbook 中定期 fetch 该日志,用 lineinfile 提取最近一条成功标记(如
"report generated"),验证任务是否真实执行 - 对 FAIL 主机,自动触发告警:调用企业微信 Webhook,消息含主机名、失败项(如
CPU LoadAvg > 0.7 * cores)、建议命令(uptime; nproc)











