朱 煜
(山西省氣象信息中心,山西 太原 030006)
?
簡單服務器監(jiān)控系統(tǒng)的設計與實現(xiàn)
朱 煜
(山西省氣象信息中心,山西 太原 030006)
隨著網(wǎng)絡規(guī)模的日益增大,服務器的日常維護變得越來越繁雜。系統(tǒng)管理員迫切需要一個實用的監(jiān)控系統(tǒng)將他們從繁重的人工檢查工作中解脫出來。本文針對這一現(xiàn)狀,設計出一套簡單的服務器監(jiān)控系統(tǒng),幫助系統(tǒng)管理員更好的了解服務器的運行狀態(tài),及時發(fā)現(xiàn)故障,保障服務器的穩(wěn)定運行。
監(jiān)控系統(tǒng);socket;Web服務
服務端定時(2分鐘)收集本機的狀態(tài)信息并通過socket接口上傳至中心站服務器。中心站收集這些數(shù)據(jù)并錄入數(shù)據(jù)庫中,同時中心站提供web接口供用戶訪問。
用戶通過瀏覽器訪問中心站web服務,可以查看服務器狀態(tài)信息。用戶可以選擇需要監(jiān)控的服務器,也可以設置報警閾值參數(shù)。Highchart控件將服務器的狀態(tài)數(shù)據(jù)繪制成曲線圖、直方圖以及表格等形式,直觀的向用戶展示服務器狀態(tài)。
2.1 數(shù)據(jù)采集模塊
采集的服務器數(shù)據(jù)包括:CPU使用率、內存使用率、磁盤空間等。并定時的將采集到的服務器狀態(tài)數(shù)據(jù)傳入中心站,中心站將這些數(shù)據(jù)入庫,便于以后查詢,分析。
2.1.1 cpu利用率
Linux/Unix下,CPU利用率分為用戶態(tài),系統(tǒng)態(tài)和空閑態(tài),分別表示CPU處于用戶態(tài)執(zhí)行的時間,系統(tǒng)內核執(zhí)行的時間和空閑系統(tǒng)進程執(zhí)行的時間。CPU利用率是指:CPU執(zhí)行非系統(tǒng)空閑進程的時間/CPU總的執(zhí)行時間。各個CPU時間可以通過命令cat/proc/stat獲得。也可以通過讀取/proc/loadavg得到機器的1/5/15分鐘平均負載。
Windows下,可以通過wmi查詢,命令:wmic path win32_processor get loadpercentage /value。
2.1.2 內存信息
Linux/Unix下,可以通過從/proc/meminfo文件中提取兩個數(shù)據(jù),當前內存的使用量(cmem)以及內存總量(amem)。內存使用百分比=100*(cmem/umem)。也可以同free,top等命令進行查看。
Windows下,可以通過systeminfo命令查看物理內存總量以及可用的物理內存等信息,可以計算出內存使用率。
2.1.3 磁盤空間
Linux/Unix下,可以通過df命令查看硬盤分區(qū)情況,以及每個分區(qū)總容量、使用容量、剩余容量等。
Windows下,可以通過wmic LogicalDisk where "Caption='C:'" get FreeSpace,Size /value 命令查看剩余空間及總空間。
2.1.4 其他參數(shù)
系統(tǒng)運行時間:systeminfo(windows),uptime(linux/unix)
主機名稱:hostname (所有系統(tǒng))
Ip地址:ipconfig(windows),ifconfig(linux/unix)
2.2 通信模塊
通信模塊是用C語言通過socket接口編程開發(fā)的,首先中心站在TCP4000端口處進行監(jiān)聽,服務端通過TCP協(xié)議連接中心站的4000端口。建立連接之后,服務端發(fā)送采集到的監(jiān)控數(shù)據(jù),而中心站在收到數(shù)據(jù)后將這些數(shù)據(jù)錄入數(shù)據(jù)庫中。Socket通訊建立的具體過程如下:(見圖1)
1) 中心站bind網(wǎng)卡后再使用TCP4000端口listen。
2) 服務端bind網(wǎng)卡后使用connect函數(shù)向中心站請求建立連接,中心站accept后服務端把監(jiān)控信息通過send函數(shù)發(fā)送給中心站。
3) 中心站通過recv函數(shù)接受服務端發(fā)來的數(shù)據(jù),并寫入mysql數(shù)據(jù)庫中。
4) 通訊完后服務端使用close函數(shù)關閉套接字。
圖1 socket通信流程圖
3.1 數(shù)據(jù)庫設計
中心站負責收集各個服務端上報的數(shù)據(jù),由于服務端數(shù)目較多,數(shù)據(jù)更新也非常頻繁,因此采用MySQL數(shù)據(jù)庫來管理服務器狀態(tài)數(shù)據(jù)。這樣數(shù)據(jù)的新增,更新、查詢就變得非常容易了。中心站將服務器狀態(tài)信息寫入監(jiān)控庫表中。庫表結構如表1所示。
表1 監(jiān)控庫表
3.2 web網(wǎng)頁設計
網(wǎng)站頁面采用PHP語音編寫,使用mysql_fetch_array函數(shù)可以從數(shù)據(jù)庫中循環(huán)讀取出各個設備的狀態(tài)信息,前端頁面使用html語言和css進行設計。圖2是網(wǎng)站頁面效果圖。
監(jiān)控頁面能夠對服務器狀態(tài)進行檢測與報警,根據(jù)預設的條件觸發(fā)報警,報警采用閃爍、聲音等方式提醒用戶注意。表2是報警的預設規(guī)則。
表2 報警規(guī)則
當用戶點擊CPU、內存、磁盤空間等項目時,會彈出該項目的詳細信息,一般采用圖形或表格的形式呈現(xiàn)給用戶。例如點擊磁盤空間,如圖3所示。
該功能采用Highcharts圖表控件,Highcharts是一個純JavaScript編寫的圖表庫,能方便快速的在web網(wǎng)站或者web應用程序中添加有交互性的圖像,并且免費提供給個人學習、個人網(wǎng)站和非商業(yè)用途使用。目前Highcharts支持的圖表類型有曲線圖、柱狀圖、餅圖、區(qū)域圖、散點圖和綜合圖表。Highcharts界面美觀,由于采用JavaScript編寫,因此不需要加載額外的插件,并且運行速度快、兼容性高、能夠完美支持當前主流瀏覽器。
圖3 磁盤空間監(jiān)控圖表
隨著信息網(wǎng)絡的深入發(fā)展、業(yè)務規(guī)模的不斷擴大,服務器管理需要耗費的人力、物力也不斷上升。雖然市面上有不少信息網(wǎng)絡監(jiān)控系統(tǒng),雖然它們功能比較豐富,系統(tǒng)也比較復雜,但是很多功能往往都用不到。本文設計的服務器監(jiān)控系統(tǒng)具有功能實用,操作方便的特點,非常適合中小企業(yè)服務器監(jiān)控的需求。本系統(tǒng)監(jiān)控服務器的一些重要的參數(shù),提供查詢服務器過去一段時間運行狀態(tài),配合報警的功能實現(xiàn)了業(yè)務系統(tǒng)監(jiān)控的便捷化。
[1] 斯蒂文.TCP/IP詳解卷1:協(xié)議[M].北京:機械工業(yè)出版社,2013.
[2] 斯蒂文.UNIX環(huán)境高級編程[M].北京:人民郵電出版社,2014.
Design and Implementation of a Simple Server Monitoring System
Zhu Yu
(ShanxiMeteorologicalInformationCenter,TaiyuanShanxi030006,China)
With the increasing scale of the network,the daily maintenance of the servers becomes more and more complicated.System administrator urgently need a practical monitoring system to release them from the heavy manual inspection work.According to this situation,this paper designs a simple server monitoring system to help system administrator better understanding the operational status of the server,detecting faults and ensuring the stable operation of the server.
monitoring system; socket; Web service
2016-07-08
朱 煜(1984-),男,山西太原人,工程師,工程碩士,主要從事信息技術工作。
1674-4578(2016)05-0026-03
TP393
A