使用ansible tasks生成linux巡檢報告


一直想做個關於資源巡檢的功能,其需求就是通過郵件的形式來查看linux資源的使用情況,超出一定的閾值時高亮顯示出來。也有人說啦,這個需求通過監控zabbixprometheus都能做呀,何必自己重復造輪子做這些啊。我就是瞎折騰唄,只能說巡檢報告是一總主動探測系統資源的一種手段,一般公司監控,外部都不能直接訪問的,需要撥通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_pluginsos-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目錄下

郵件中也能看到報告內容了

 

 

執行流程

簡要的說下執行流程

  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發送給接收人。

使用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目錄下

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM