效能測試-基於 Python 的 Linux 伺服器資源監控

leeyoshinari發表於2020-05-17

介紹

已完成如下功能

1、監控整個伺服器的CPU使用率、剩餘記憶體大小、磁碟IO和網路頻寬
2、監控指定埠的CPU使用率、記憶體佔用大小
3、針對java應用,可以監控jvm大小和垃圾回收情況;當Full GC頻率過高時,可傳送郵件提醒
4、當系統CPU使用率過高,或者剩餘記憶體過低時,可傳送郵件提醒;可設定自動清理快取
5、可隨時啟動/停止監控指定埠
6、當埠重啟後,可自動重新監控
7、可按照指定時間段視覺化監控結果
8、自動按照百分位數計算出CPU、磁碟IO和頻寬的資料
9、支援叢集部署

實現過程

1、為保證監控結果準確性,直接使用Linux系統命令獲取資料;且視覺化時未做任何曲線擬合處理
2、使用基於協程的http框架aiohttp滿足高併發
3、服務端前端使用jinjia2模板渲染
4、採用執行緒池+佇列的方式實現同時監控多個埠
5、客戶端每隔5s向服務端註冊本機IP和埠,以及一些服務型配置
6、服務端每隔5s會查詢所有已註冊的客戶端的狀態
7、使用influxDB資料庫儲存監控資料;資料可設定自動過期時間

使用

  1. 克隆 performance_monitor

    git clone https://github.com/leeyoshinari/performance_monitor.git

    master資料夾是服務端,只需部署一個即可;slave資料夾是客戶端,部署在需要監控的伺服器上

  2. 分別修改master和slave資料夾裡的配置檔案 config.ini

  3. 部署InfluxDB資料庫

  4. 分別執行master和slave資料夾中的server.py

    nohup python3 server.py &
  5. 頁面訪問

    (1)從機(客戶端)啟動後,輸入http://ip:port可以看到頁面顯示伺服器的CPU核數、總記憶體、磁碟號和網路資訊

(2)主機(服務端)啟動後,輸入http://ip:port可以看到首頁,頁面展示已經註冊的從機(客戶端)的IP、系統、記憶體、註冊時間

(3)主機(服務端)啟動後,輸入http://ip:port/startMonitor可以看到監控頁面;點選開始監控按鈕,即可在指定的伺服器上開始監控指定的埠;點選停止監控按鈕,即可在指定的伺服器上停止監控指定的埠;點選獲取監控列表按鈕,可以檢視當前已經監控的埠

(4)主機(服務端)啟動後,輸入http://ip:port/Visualize可以看到視覺化頁面;點選畫圖按鈕,即可將指定伺服器上的指定埠的監控資料視覺化

打包

pyinstaller既可以將python指令碼打包成Windows環境下的可執行檔案,也可以打包成Linux環境下的可執行檔案。打包完成後,可快速在其他環境上部署該監控服務,而不需要安裝python3.7+環境和第三方包。

pyinstaller安裝過程自行百度,下面直接進行打包:

  1. 打包master
    (1)安裝好python環境,安裝第三方包,確保程式可以正常執行;
    (2)進入master資料夾,開始打包:

    pyinstaller server.py -p draw_performance.py -p config.py -p Email.py -p logger.py -p process.py -p request.py -p __init__.py --hidden-import draw_performance --hidden-import config --hidden-import logger --hidden-import Email --hidden-import process --hidden-import request

    打包過程可能提示缺少一些模組,請按照提示安裝對應的模組
    (3)打包完成後,在當前路徑下會生成dist資料夾,進入dist/server即可找到可執行檔案server;
    (4)將配置檔案config.ini拷貝到dist/server資料夾下,並修改配置檔案;
    (5)將模板檔案templates和靜態檔案static拷貝到dist/server資料夾下;
    (6)將dist/server整個資料夾拷貝到其他環境,啟動server

    nohup ./server &
  2. 打包slave
    (1)安裝好python環境,安裝第三方包,確保程式可以正常執行;
    (2)進入slave資料夾,開始打包:

    pyinstaller server.py -p performance_monitor.py -p logger.py -p config.py -p __init__.py --hidden-import logger --hidden-import performance_monitor --hidden-import config

    (3)打包完成後,在當前路徑下會生成dist資料夾,進入dist/server即可找到可執行檔案server;
    (4)將配置檔案config.ini拷貝到dist/server資料夾下,並修改配置檔案;
    (5)將dist/server整個資料夾拷貝到其他環境,啟動server

    nohup ./server &

注意

  1. 伺服器必須支援以下命令:jstattopiostatnetstatpstop,如不支援,請安裝。

  2. 如果你對監控要求不高,可以使用單機版,其對第三方模組依賴較少。如需獲取,請切換至single分支,或點我

相關文章