Linux 管理員福音:自動化生成巡檢報告,一鍵郵件分享!
作為一位Linux系統(tǒng)管理員,每天進(jìn)行例行巡檢是非常重要的工作環(huán)節(jié)。這包括檢查:
- 服務(wù)器的 CPU、內(nèi)存和磁盤使用情況是否都在正常范圍內(nèi)?
- 關(guān)鍵服務(wù)是否都處于良好運(yùn)行狀態(tài)?
- 網(wǎng)絡(luò)連接是否有任何異常?
- 是否出現(xiàn)了需要特別注意的日志記錄或警告信息?
對于小規(guī)模服務(wù)器集群,手動檢查尚可接受。但在處理數(shù)十或上百臺服務(wù)器時,這種方式既耗時又容易遺漏關(guān)鍵信息。因此,采用自動化巡檢、自動生成報告并通過郵件發(fā)送給相關(guān)人員的方法更加高效。這不僅提升了工作效率,也保證了信息傳遞的準(zhǔn)確性和及時性。
一、項目介紹
今天,我想向大家推薦一個非常實用的開源項目ansible-HealthCheck。這個項目主要用于對Linux系統(tǒng)進(jìn)行資源巡檢,并且能夠自動生成詳細(xì)的巡檢報告。更棒的是,它還支持將生成的報告通過電子郵件發(fā)送給指定的接收人,方便快捷。
生成的巡檢報表不僅信息詳盡,而且設(shè)計得非常美觀,如下圖所示。如果你有前端開發(fā)的經(jīng)驗,還可以根據(jù)自己的喜好來調(diào)整和優(yōu)化報表的樣式,讓它更加符合你的需求。
1. 項目目錄結(jié)構(gòu)
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目錄下獲取遠(yuǎn)端主機(jī)資源數(shù)據(jù)腳本。
- task目錄是定義執(zhí)行的任務(wù)。
- templates目錄下是定義渲染的模板文件。
- filter_plugins目錄下是定義自定義的數(shù)據(jù)過濾插件。
- os-check.yaml是ansible的角色執(zhí)行任務(wù)。
2. 執(zhí)行流程
(1) 使用腳本files\check_linux.sh在遠(yuǎn)端執(zhí)行獲取資源數(shù)據(jù),并以json結(jié)構(gòu)體返回。
(2) 使用jinja2模板將獲取的數(shù)據(jù)渲染到模板文件中templates\report-cssinline.html,生成的文件存放在指定的目錄中。
- report-cssinline.html 是將css設(shè)置以inline的方式存儲的html文件,report.html才是源模板文件,修改完源模板文件后,使用Responsive Email CSS Inliner進(jìn)行轉(zhuǎn)換下,才能更好的兼容郵件顯示。
- 其中模板中使用的get_check_data過濾器是從hostvars中獲取每臺主機(jī)的腳本執(zhí)行結(jié)果,進(jìn)行分析整理傳遞給模板,使用傳遞回來的數(shù)據(jù)進(jìn)行渲染。
(3) 獲取生成的模板文件內(nèi)容,并通過smtp發(fā)送給接收人。
3. 統(tǒng)計的系統(tǒng)資源
- 主機(jī)名
- IP地址
- 操作系統(tǒng)
- CPU使用率
- CPU平均負(fù)載
- 內(nèi)存使用率
- Swap使用率
- 磁盤使用率
- 磁盤Inode使用率
- Tcp連接
- 時間
二、項目演示
(1) 演示環(huán)境中的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
在項目的根目錄下執(zhí)行如下命令:
ansible-playbook roles/os-check.yaml
執(zhí)行完上述命令后,輸出如下結(jié)果。
(2) 查看報告
登錄其中一臺主機(jī),在tmp目錄下,執(zhí)行如下命令,啟動一個web服務(wù)。
root@node1:/tmp# python3 -m http.server 8000
打開網(wǎng)頁輸入該主機(jī)的IP加端口即可訪問巡檢報告。