作为一位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.yam
  • vars目录下定义了一些变量。
  • files目录下获取远端主机资源数据脚本。
  • task目录是定义执行的任务。
  • templates目录下是定义渲染的模板文件。
  • filter_plugins目录下是定义自定义的数据过滤插件。
  • os-check.yamlansible的角色执行任务。

执行流程

  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发送给接收人。

统计的系统资源

  • 主机名
  • IP地址
  • 操作系统
  • CPU使用率
  • CPU平均负载
  • 内存使用率
  • Swap使用率
  • 磁盘使用率
  • 磁盘Inode使用率
  • Tcp连接
  • 时间

项目演示

  • 演示环境中的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 = True

在项目的根目录下执行如下命令:

ansible-playbook roles/os-check.yaml

执行完上述命令后,输出如下结果。

  • 查看报告

登录其中一台主机,在tmp目录下,执行如下命令,启动一个web服务。

root@node1:/tmp# python3 -m http.server 8000

打开网页输入该主机的IP加端口即可访问巡检报告。