一直想做個關於資源巡檢的功能,其需求就是通過郵件的形式來查看linux資源的使用情況,超出一定的閾值時高亮顯示出來。也有人說啦,這個需求通過監控zabbix
, prometheus
都能做呀,何必自己重復造輪子做這些啊。我就是瞎折騰唄,只能說巡檢報告是一總主動探測系統資源的一種手段,一般公司監控,外部都不能直接訪問的,需要撥通vpn才可以,有些情況我們是無法連接到監控平台,比如放假游玩,不想打開電腦…這些情況下通過每天的巡檢報告可以隨時的了解系統資源的情況。
使用task方式獲取報告
統計的系統資源
- Hostname
- Main IP
- OS
- CPU Used
- CPU LoadAvg
- Mem Used
- Swap Used
- Disk Size Used
- Disk Inode Used
- Tcp Connection Used
- Timestamp
克隆git倉庫
git clone https://github.com/lework/Ansible-roles.git /etc/ansible/roles/ mv /etc/ansible/roles/filter_plugins /etc/ansible/
這里我們只用到了
filter_plugins
,os-check
role
在使用role之前,一定要查看role的
README.md
定義主機
#/etc/ansible/hosts [node2] 192.168.77.130 ansible_ssh_pass=12345
編寫playbook
#/etc/ansible/os-check.yaml --- - hosts: all gather_facts: false vars: check_report_path: /tmp check_mail_host: "smtp.lework.com" check_mail_port: "465" check_mail_username: "ops@lework.com" check_mail_password: "le123456" check_mail_to: ["ops@lework.com"] roles: - os-check
執行playbook
ansible-playbook /etc/ansible/os-check.yaml
執行結果
報告文件存放在/tmp
目錄下
郵件中也能看到報告內容了
執行流程
簡要的說下執行流程
- 使用腳本
files\check_linux.sh
在遠端執行獲取資源數據,並以json結構體返回。 - 使用
jinja2
模板將獲取的數據渲染到模板文件中templates\report-cssinline.html
,生成的文件存放在指定的目錄中。report-cssinline.html
是將css設置以inline
的方式存儲的html文件,report.html
才是源模板文件,修改完源模板文件后,使用Responsive Email CSS Inliner進行轉換下,才能更好的兼容郵件顯示。- 其中模板中使用的
get_check_data
過濾器是從hostvars
中獲取每台主機的腳本執行結果,進行分析整理傳遞給模板,使用傳遞回來的數據進行渲染。
- 獲取生成的模板文件內容,並通過smtp發送給接收人。
使用fact數據獲取報告
上面的操作是我們通過自己寫腳本獲取系統數據,這種方式有執行速度快,自定義強的優點,也有兼容性差的問題,對各個系統支持的不全面。使用fact數據則是相反。
那下面我們就使用ansible的fact數據來生成巡檢報告
統計的系統資源
- Hostname
- Main IP
- OS
- Mem Used
- Swap Used
- Disk Size Used
- Disk Inode Used
- Timestamp
配置腳本
將下列鏈接中的文件下載到ansible
控制機上
https://github.com/lework/script/tree/master/python/facts_os_check
在ansible.py
中我們配置fact目錄和smtp信息
# 設置fact目錄 fact_dirs = [os.path.join(current_path, 'facts')] # 發送郵件 subject = 'System Check Report [%s]' % now_date to_list = ['lework@ops.com'] mail_config = { 'mail_host': 'smtp.lework.com', 'mail_port': '465', 'mail_user': 'ops@lework.com', 'mail_pass': '123123' }
執行腳本
使用python3環境
pip3 install jinja2 [ ! -d ./report ] && mkdir ./report [ ! -d ./facts ] && mkdir ./facts rm -rf ./facts ansible all -m setup --tree ./facts python3 ansible.py
在每次生成fact文件時,需要對其目錄進行清空操作,避免歷史數據干擾。
巡檢報告文件以日期命名的方式存放在當前的report
目錄下