前段时间在GitHub[1]上发现了一个Ansible巡检服务的Roles, 今天给大家分享一下!
1Ansible自动化实现巡检
- 思路:通过使用
Ansible Role
的方式对Linux系统进行资源巡检,生成巡检报告后通过邮件发送给接收人。
2测试的环境
代码语言:javascript复制ansible [core 2.12.2]
os `Centos 7 X64`
python version = 3.10.2 (main, Feb 2 2022, 06:19:27)
3oss-check Roles的依赖
- 过滤器插件
filter_plugins/os-check.py [get_check_data]
- 目标机
bash
说明,此处的过滤器插件要放在ansible指定的filter_plugins的位置,我这里习惯将ansible的配置文件放在ansible的统一配置仓库下,便于迁移以及适应环境:
4oss-check Roles的执行流程
- 使用脚本
roles/oss_check/files/check_linux.sh
在目标节点执行获取资源数据,并以json结构体返回。 - 使用
jinja2
模板将获取的数据渲染到模板文件中roles/oss_check/templates/report-cssinline.html
,生成的文件存放在指定的目录中。report-cssinline.html
是将css设置以inline
的方式存储的html文件,report.html
才是源模板文件,修改完源模板文件后,使用Responsive Email CSS Inliner[2]进行转换下,才能更好的兼容邮件显示。- 其模板中使用的
get_check_data
过滤器是从hostvars
中获取每台主机的脚本执行结果,进行分析整理传递给模板,使用传递回来的数据进行渲染。
- 获取生成的模板文件内容,并通过smtp发送给接收人。
5oss-check Roles采集的指标信息
- Hostname
- Main IP
- OS Version
- CPU Used
- CPU LoadAvg
- Mem Used
- Swap Used
- Disk Size Used
- Disk Inode Used
- Tcp Connection Used
- Timestamp
6Oss-check Roles数据阈值的分组
采集出的数据,会通过设置好的阈值分为三个档次,
- OK: < 80
- Bad评判条件: 80 <= 使用率 < 90,
- Critical评判条件: 使用率 >= 90
7定期执行扫描
集群节点扫描一般都是主动查看集群运行状态,主观判断的集群节点运行的状态,一般都会在节假日之前进行扫描一次,当然也可以通过自动化工具进行定期扫描,比如jenkins.
8如何跑起来?
- 克隆好项目之后,将roles放置在自己ansible项目的roles目录下
- 确认ansible.cfg配置文件中filter_plugin的位置,将克隆项目的
filter_plugins/os-check.py
放在配置文件指定的filter_plugin中 - 创建oss-check运行的playbooks
---
- name: 服务器巡检
hosts: qa_unix
gather_facts: false
vars:
check_report_path: /tmp
check_mail_host: "smtp.163.com"
check_mail_port: "465"
check_mail_username: "demo@163.com"
check_mail_password: "demo@163.com邮箱的密码"
check_mail_to: [ "接收人的邮箱地址" ]
check_email_title: "Ansible 集群巡检报告"
check_email_env: "QA"
roles:
- os-check
inventory/qa.ini
是待执行环境的inventory,最后执行就OK了,
/usr/bin/ansible-playbook -i inventory/qa.ini playbooks/os_check_qa.yaml
- 如果执行遇到问题,那就通过-v查看信息吧,v的数量越多,信息量就越大