Linux 管理员福音:自动化生成巡检报告,一键邮件分享!
作为一位Linux系统管理员,每天进行例行巡检是非常重要的工作环节。这包括检查:
服务器的 CPU、内存和磁盘使用情况是否都在正常范围内?关键服务是否都处于良好运行状态?网络连接是否有任何异常?是否出现了需要特别注意的日志记录或警告信息?对于小规模服务器集群,手动检查尚可接受。但在处理数十或上百台服务器时,这种方式既耗时又容易遗漏关键信息。因此,采用自动化巡检、自动生成报告并通过邮件发送给相关人员的方法更加高效。这不仅提升了工作效率,也保证了信息传递的准确性和及时性。
今天,我想向大家推荐一个非常实用的开源项目ansible-HealthCheck。这个项目主要用于对Linux系统进行资源巡检,并且能够自动生成详细的巡检报告。更棒的是,它还支持将生成的报告通过电子邮件发送给指定的接收人,方便快捷。
生成的巡检报表不仅信息详尽,而且设计得非常美观,如下图所示。如果你有前端开发的经验,还可以根据自己的喜好来调整和优化报表的样式,让它更加符合你的需求。
复制
ansible-HealthCheck/
├── os-check
│ ├── README.md
│ ├── defaults
│ │ └── main.yml
│ ├── files
│ │ └── check_linux.sh
│ ├── tasks
│ │ └── main.yml
│ ├── templates
│ │ ├── report-cssinline.html
│ │ └── report.html
│ └── vars
│ └── main.yml
└── roles
├── filter_plugins
│ └── os-check.py
└── os-check.yam1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.
(1) 使用脚本files\check_linux.sh在远端执行获取资源数据,并以json结构体返回。
(2) 使用jinja2模板将获取的数据渲染到模板文件中templates\report-cssinline.html,生成的文件存放在指定的目录中。
report-cssinline.html 是将css设置以inline的方式存储的html文件,report.html才是源模板文件,修改完源模板文件后,使用Responsive Email CSS Inliner进行转换下,才能更好的兼容邮件显示。其中模板中使用的get_check_data过滤器是从hostvars中获取每台主机的脚本执行结果,进行分析整理传递给模板,使用传递回来的数据进行渲染。(3) 获取生成的模板文件内容,并通过smtp发送给接收人。
3. 统计的系统资源主机名IP地址操作系统CPU使用率CPU平均负载内存使用率Swap使用率磁盘使用率磁盘Inode使用率Tcp连接时间二、项目演示
(1) 演示环境中的ansible版本信息如下:
复制
ansible [core 2.17.10]
config file = /etc/ansible/ansible.cfg
configured module search path = [/root/.ansible/plugins/modules, /usr/share/ansible/plugins/modules]
ansible python module location = /root/.local/pipx/venvs/ansible-core/lib/python3.10/site-packages/ansible
ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
executable location = /root/.local/bin/ansible
python version = 3.10.12 (main, Feb 4 2025, 14:57:36) [GCC 11.4.0] (/root/.local/pipx/venvs/ansible-core/bin/python)
jinja version = 3.1.6
libyaml = True1.2.3.4.5.6.7.8.9.
在项目的根目录下执行如下命令:
复制
ansible-playbook roles/os-check.yaml1.
执行完上述命令后,输出如下结果。
(2) 查看报告
登录其中一台主机,在tmp目录下,执行如下命令,启动一个web服务。
复制
root@node1:/tmp# python3 -m http.server 80001.
打开网页输入该主机的IP加端口即可访问巡检报告。
THE END