連 娜
(山西職業(yè)技術學院,山西 太原 030006)
現(xiàn)階段,面向高并發(fā)場景的軟件系統(tǒng)普遍采用了服務器集群作為部署和運行平臺,而在現(xiàn)有的針對Windows服務器的遠程管理中,用戶普遍采用以Team View、向日葵為代表的計算機管理軟件以遠程登錄的方式進行服務器工作狀態(tài)監(jiān)控和管理[1]。但作為遠程控制軟件,其主要功能集中在對單臺服務器遠程操作與配置方面,并不適用于對大量服務器同時進行實時監(jiān)控并進行數(shù)據(jù)歸集匯總的應用場景。本文提出了一種基于微信小程序框架的輕便型應用程序設計方案,能夠滿足隨時隨地監(jiān)測服務器集群運行狀態(tài)的應用需求,有效簡化了服務器集群運行維護工作的復雜度并提升了工作效率。
在服務器集群的運維管理工作中,管理人員在根據(jù)實際運行情況及時調(diào)整集群工作模式、更新負載均衡方案以及分析集群故障原因時,都需要能夠?qū)崟r掌握各節(jié)點服務器的運行數(shù)據(jù)作為參考依據(jù)?,F(xiàn)有的遠程控制軟件,僅能通過逐一遠程登錄各節(jié)點服務器后查看各項運行信息,步驟繁瑣、耗時長且需要通過電腦操作,工作場地的局限性大且信息滯后、實時性差[2]。因此需要提供能夠在智能手機中運行的應用程序,在實現(xiàn)批量采集服務器運行信息功能的同時具備良好的數(shù)據(jù)實時顯示功能。微信小程序作為騰訊公司發(fā)布的新一代手機應用開發(fā)框架,具有使用便捷、響應速度快以及便于更新和維護等優(yōu)勢,且無需安裝專用的APP程序,在解決了手機硬件兼容性問題的同時還節(jié)省了大量的手機存儲空間,非常適用于服務器集群運行數(shù)據(jù)實時監(jiān)控管理軟件的開發(fā)。因此,在本文設計的服務器運行實時監(jiān)控平臺方案中,以微信小程序開發(fā)框架為核心整合Python與PHP語言以及SQL Server數(shù)據(jù)庫技術,完成服務器運行數(shù)據(jù)的采集存儲、匯總處理與實時顯示功能。
服務器運行實時監(jiān)控平臺的整體架構如圖1所示,共由4個部分構成,包括監(jiān)控程序、管理服務器、微信小程序模塊與管理平臺模塊。
圖1 系統(tǒng)架構圖
監(jiān)控程序被部署在服務器集群的各節(jié)點上,負責采集各臺服務器主機的實時工作狀態(tài)數(shù)據(jù)并上傳至管理服務器的數(shù)據(jù)庫中。管理服務器作為平臺的核心模塊,負責數(shù)據(jù)的自動歸集與可靠存儲,并在此基礎上面向用戶提供數(shù)據(jù)訪問接口。微信小程序模塊負責從服務器中實時獲取集群中所有服務器的運行數(shù)據(jù)并批量顯示在用戶端的微信小程序中。管理平臺模塊負責面向管理人員提供日常運行管理所需的數(shù)據(jù)管理、分析等相關功能。
監(jiān)控程序被安裝在集群中的各個節(jié)點服務器上并設置為開機自動運行模式,根據(jù)固定的間隔時間獲取服務器當前的CPU、內(nèi)存使用率、網(wǎng)絡連接與帶寬占用情況等數(shù)據(jù)并且在將數(shù)據(jù)打包為Json格式后發(fā)送至管理服務器的數(shù)據(jù)上傳接口中,監(jiān)控程序主要基于Python的Psutil庫實現(xiàn)。
管理服務器中包含后臺數(shù)據(jù)庫與數(shù)據(jù)上傳接口、用戶接口及管理接口程序,數(shù)據(jù)上傳接口在收到監(jiān)控程序所提交的信息后,首先對數(shù)據(jù)內(nèi)容進行有效性校驗,濾除錯誤與重復數(shù)據(jù)后,將數(shù)據(jù)添加至后臺數(shù)據(jù)庫中存儲;用戶接口在收到微信小程序模塊的數(shù)據(jù)請求并校驗其身份后,在數(shù)據(jù)庫中進行檢索并實時返回結果數(shù)據(jù)至微信小程序模塊;管理接口在接收到管理平臺模塊所提交的操作請求并驗證其身份后,在數(shù)據(jù)庫中執(zhí)行數(shù)據(jù)更新、檢索操作并返回執(zhí)行結果。管理服務器基于部署在公共網(wǎng)絡中的云服務器搭建,后臺數(shù)據(jù)庫使用SQL Server搭建、數(shù)據(jù)上傳與訪問接口使用PHP+Apache框架創(chuàng)建Web Service服務頁面實現(xiàn)。
微信小程序模塊用于向用戶提供各服務器的實時運行狀態(tài)信息、服務器運行數(shù)據(jù)的匯總統(tǒng)計結果以及故障緊急預警提示信息,其運行原理是在微信小程序平臺和管理服務器之間建立數(shù)據(jù)通信,從系統(tǒng)數(shù)據(jù)庫中實時檢索數(shù)據(jù)并顯示在小程序界面中。微信小程序模塊使用微信開發(fā)者工具開發(fā),使用小程序開發(fā)框架中提供的request遠程請求功能與管理服務器上的用戶接口進行數(shù)據(jù)通信。
管理平臺模塊負責向系統(tǒng)管理員提供用戶賬號管理、歷史數(shù)據(jù)的檢索與管理、數(shù)據(jù)匯總分析以及報表打印功能,以上各項功能均通過對管理服務器上的系統(tǒng)數(shù)據(jù)庫發(fā)起添加、檢索、更新的訪問操作實現(xiàn),其原理是將各類數(shù)據(jù)訪問操作與配置參數(shù)封裝為相應的SQL命令后提交至系統(tǒng)數(shù)據(jù)庫中執(zhí)行并獲取結果。管理平臺模塊基于Web應用模式實現(xiàn),使用PHP構建與管理服務器進行數(shù)據(jù)交互的機制,用戶UI界面則基于HTML與Jquery資源庫構建。
服務器運行狀態(tài)數(shù)據(jù)主要分為計算機硬件資源使用情況以及網(wǎng)絡帶寬占用情況兩類,相關數(shù)據(jù)基于Python的Psutil庫獲取,實現(xiàn)過程如下所示:
import psutil//引入Psutil庫
psutil.cpu_percent(interval) //獲取CPU運行狀態(tài)
Cpura=phymem=psutil.virtual_memory() //獲取內(nèi)存運行狀態(tài)
Memra=int(phymem.percent #內(nèi)存占用比例
Memus=int(phymem.used/1024/1024) #內(nèi)存使用量
Memsum=int(phymem.total/1024/1024) #內(nèi)存總量
Net=psutil.net_io_counters()
SendData=Net.bytes_sent #網(wǎng)絡發(fā)送字節(jié)數(shù)
Receive=Net.bytes_recv #網(wǎng)絡接受字節(jié)數(shù)
在微信小程序開發(fā)框架中,數(shù)據(jù)的交互與顯示采用了前后端分離的模式,其中數(shù)據(jù)的獲取是在js文件中通過編程訪問管理服務器的數(shù)據(jù)接口實現(xiàn),而數(shù)據(jù)的顯示則需要通過在wxml文件中構建UI界面實現(xiàn)。需要注意的是,負責實現(xiàn)同一功能的js與wxml類型文件的名稱應該完全相同。
首先需要在js文件中調(diào)用wx.request方法向指定的管理服務器數(shù)據(jù)訪問接口URL地址發(fā)送數(shù)據(jù)請求指令與參數(shù)并接收返回結果,實現(xiàn)過程如下所示:
var that=this
wx.request({
url:′ https://192.168.1.1/get.php′, //數(shù)據(jù)訪問接口地址,必需以https開頭
data:{ //向數(shù)據(jù)訪問接口發(fā)送參數(shù)
serId:101, //檢索編號為101的服務器運行數(shù)據(jù)
key:k100}, //用戶模塊的身份碼
success:function(res){ //回調(diào)函數(shù)
that.setData({data01:res.data[′srName ′]}) //將返回的數(shù)據(jù)賦值給頁面中的數(shù)據(jù)對象
that.setData({data02:res.data[′srCPU ′]})
that.setData({data03:res.data[′srMem ′]})}})
數(shù)據(jù)的實時刷新功能,使用微信小程序開發(fā)框架提供的setInterval定時器機制按固定的間隔時間向管理服務器不間斷的發(fā)送請求并獲取數(shù)據(jù)實現(xiàn)。
在完成數(shù)據(jù)獲取的操作后,需要在wxml文件中將各數(shù)據(jù)項加載至頁面顯示組件中,實現(xiàn)過程如下所示:
//將JS文件中的數(shù)據(jù)對象內(nèi)容顯示在界面中
對于數(shù)據(jù)的批量顯示功能,則通過頁面顯示組件提供的wx:for循環(huán)顯示機制對從管理服務器數(shù)據(jù)接口中返回的數(shù)據(jù)集進行循環(huán)遍歷操作來實現(xiàn)。
數(shù)據(jù)訪問接口以Web Service服務的方式構建,使用PHP語言完成訪問請求數(shù)據(jù)的接收、對系統(tǒng)數(shù)據(jù)庫的操作與數(shù)據(jù)結果的返回。實現(xiàn)過程如下所示:
If($_GET["key"]!="k100") //用戶身份碼校驗
{echo"Error";} //驗證不通過則直接返回錯誤信息
$sId=$_GET["serid"]; //接收服務器ID
$cmd="select*from sertable where id=".$sId; //構建SQL命令
$redata=sqlsrv_query($server,$cmd); //執(zhí)行SQL命令并獲取結果集,$server為數(shù)據(jù)庫連接句柄
$row=sqlsrv_fetch_array($redata,SQLSRV_FETCH_ASSOC) //從結果集中獲取數(shù)據(jù)行
$srinfo=array(′title ′=> $row[′srName ′],′srCPU ′=>$row[′srCPU ′],′srMem ′=>$row[′srMem ′]); //將數(shù)據(jù)打包為數(shù)組格式
echo json_encode($srinfo); //將數(shù)據(jù)以json格式封裝并返回至發(fā)送請求的模塊
本文針對Windows服務器集群的遠程實時管理需求,以微信小程序框架為核心設計了服務器運行實時監(jiān)控平臺方案,涵蓋了服務器運行數(shù)據(jù)的實時采集、存儲管理、訪問接口以及數(shù)據(jù)在微信小程序中的獲取與展示功能的運行原理與實現(xiàn)機制。使服務器管理人員能夠通過手機微信APP方便快捷的同時監(jiān)控多臺服務器的實時運行狀態(tài),提升了服務器管理工作的效率與故障響應速度。