黃京蓮
摘要:數(shù)據(jù)中心運行過程監(jiān)控管理正日益受到廣泛關注。監(jiān)控內容主要分為環(huán)境監(jiān)控和服務器監(jiān)控兩部分,以Linux服務器為研究對象采集數(shù)據(jù),研究服務器遠程監(jiān)控方法,采用Linux Shell語言采集系統(tǒng)數(shù)據(jù),實現(xiàn)包括CPU基本信息、磁盤分區(qū)使用、CPU利用率等功能在內的監(jiān)控腳本。
關鍵詞:數(shù)據(jù)中心;遠程監(jiān)控;GTK+;郵件報警
DOIDOI:10.11907/rjdk.161685
中圖分類號:TP391
文獻標識碼:A文章編號文章編號:16727800(2016)009014003
作者簡介作者簡介:黃京蓮(1964-),女,北京人,北京外國語大學計算機系講師,研究方向為網絡空間信息處理。
0引言
計算機數(shù)據(jù)中心在整個計算機網絡中扮演著越來越重要的角色,為網絡數(shù)據(jù)共享提供了極大便利。在計算機網絡日益發(fā)展,信息數(shù)據(jù)量不斷膨脹的今天,數(shù)據(jù)中心作為數(shù)據(jù)網絡中的重要一環(huán),已成為整個計算機網絡體系中不可缺少的一部分。數(shù)據(jù)中心成為數(shù)據(jù)聚集中心的同時,也成為了風險的聚集中心。服務器處于24小時工作狀態(tài),一旦數(shù)據(jù)中心出現(xiàn)問題,勢必影響計算機系統(tǒng)的運行,輕則造成數(shù)據(jù)傳輸滯后,系統(tǒng)運行緩慢,導致用戶體驗受損,重則可能對數(shù)據(jù)存儲以及系統(tǒng)運行的安全性和可靠性造成威脅,帶來嚴重后果。因此,對于數(shù)據(jù)中心的監(jiān)控系統(tǒng)進行研究和開發(fā),有著重要意義。數(shù)據(jù)中心的監(jiān)控主要包括兩大部分:一部分涉及對機房環(huán)境的監(jiān)控,包括電源、設備、消防、保安、機房溫度、電壓、漏水檢測等;另一部分涉及對服務器運行狀態(tài)的監(jiān)控,包括服務器的CPU負載、內存利用率等方面。這兩部分的監(jiān)控密切相關,環(huán)境的變化,尤其是溫度和濕度的變化會導致服務器工作情況的改變,而服務器的負擔過重可能導致服務器溫度升高,從而引起機房環(huán)境的變化。
數(shù)據(jù)中心的監(jiān)控需要針對不同設備,采用多套復雜的監(jiān)控系統(tǒng)協(xié)調工作,密切配合。由于數(shù)據(jù)中心監(jiān)控中最重要的部分是對服務器系統(tǒng)的監(jiān)控,引入服務器自動監(jiān)控和報警機制,有助于減輕機房管理人員的勞動強度,對監(jiān)控數(shù)據(jù)進行分類和整理,并加以存檔和分析,有助于觀測數(shù)據(jù)中心的服務器在一天之中負載情況的變化,找出峰時和谷時,有針對性地采取預防性措施,在服務器負擔較重的高峰時段通過增開服務器的方式減輕服務器負擔,并增加監(jiān)控內容和頻率,減小宕機風險;而在服務器負擔較輕的時段能夠充分利用空閑資源。
本文選擇可移植性的Bash Shell語言和C語言,并基于 GNOME 桌面系統(tǒng)的底層 GTK+機制實現(xiàn)GUI圖形用戶界面,利用Gnuplot作為繪圖工具包,實現(xiàn)遠程監(jiān)控和圖像化的數(shù)據(jù)分析,實現(xiàn)了對計算機CPU基本信息、CPU使用率、內存使用率、CPU負載情況等服務器運行狀況的遠程監(jiān)控,并實現(xiàn)了自動檢測。同時,該系統(tǒng)還能夠利用LINUX的cron服務,對服務器運行狀況進行監(jiān)控記錄,并通過日志繪制統(tǒng)計圖等來顯示服務器的運行狀況。在開啟自動監(jiān)視后,腳本通過Unix/Linux的mail/mailx命令發(fā)送警報信息,還可將系統(tǒng)數(shù)據(jù)統(tǒng)計圖發(fā)送到指定收件人作為存檔依據(jù)。
1監(jiān)控系統(tǒng)結構
1.1系統(tǒng)結構
系統(tǒng)主要分為被監(jiān)控端服務器和監(jiān)控端主機兩部分。被監(jiān)控端服務器安裝有監(jiān)控系統(tǒng)所需的源代碼,同時有cron進程定時運行監(jiān)控腳本收集數(shù)據(jù)以供作圖分析。被監(jiān)控端服務器和監(jiān)控端主機均運行Linux系統(tǒng)。由監(jiān)控端主機遠程登錄到被監(jiān)控端服務器運行程序,通過對顯示的控制,以及SSH的X選項,實現(xiàn)遠程顯示服務器端應用程序圖形界面。該圖形界面可直接在監(jiān)控端彈出窗口,顯示監(jiān)視數(shù)據(jù)。同時,對于未安裝圖形界面的服務器,可以采用運行監(jiān)控系統(tǒng)的shell腳本版本,在命令行下完成操作。對于數(shù)據(jù)的分析可以由shell版本生成數(shù)據(jù)表格(html形式)和圖片分析發(fā)送至用戶指定郵箱,同樣能夠實現(xiàn)圖形化的顯示。
1.2監(jiān)控內容
系統(tǒng)所完成的主要任務是對數(shù)據(jù)中心的服務器運行狀態(tài)進行監(jiān)控。對于服務器運行狀況最為直觀的監(jiān)控方式就是對服務器的各項性能數(shù)據(jù)進行監(jiān)控,因此監(jiān)控的主要內容有:CPU 基本信息、磁盤分區(qū)使用情況、CPU負載、CPU使用率、內存使用情況。同時,為實現(xiàn)無人值守,要求服務器能夠自動對各項數(shù)據(jù)進行監(jiān)控并在超過預設的警報值時自動報警。因此,本系統(tǒng)中還涉及如下功能:自動進行磁盤分區(qū)檢查并發(fā)送警報郵件;自動進行CPU負載檢查并發(fā)送警報郵件;自動進行內存使用情況檢查并發(fā)送警報郵件。
為便于對數(shù)據(jù)進行更為直觀的統(tǒng)計和觀測,在圖形界面中,還有實時統(tǒng)計圖表查看和歷史統(tǒng)計圖表查看的功能。在shell腳本中,由于考慮到非圖形界面無法顯示圖形的功能,此功能被發(fā)送圖表報告取代,用戶可以通過打開自己的郵箱查看附件觀測數(shù)據(jù)統(tǒng)計情況。在本系統(tǒng)中預設了3種模式的系統(tǒng)報告可發(fā)送:①實時系統(tǒng)情況報告。該報告將生成一份文本文檔,顯示系統(tǒng)當前情況;②系統(tǒng)運行統(tǒng)計數(shù)據(jù)報告。該報告為表格形式的HTML文件,能夠顯示當日至此的統(tǒng)計數(shù)據(jù)。同時,通過選擇日期,也可以發(fā)送歷史某日統(tǒng)計數(shù)據(jù)。
系統(tǒng)運行統(tǒng)計圖表報告為統(tǒng)計圖形式,是由運行統(tǒng)計數(shù)據(jù)繪制成的4張圖表。該圖表同樣可以通過日期的選擇,發(fā)送歷史某日的統(tǒng)計圖。系統(tǒng)功能如圖1所示。
1.3監(jiān)控數(shù)據(jù)采集
Linux/Unix操作系統(tǒng)中常用的數(shù)據(jù)采集方式主要有shell命令采集方式,/proc偽文件系統(tǒng)和LKM可加載內核模塊采集方式。Linux/Unix操作系統(tǒng)都提供類shell命令查看系統(tǒng)信息的方式,對于用戶而言,只需輸入相應的shell命令即可查看相關的系統(tǒng)信息。這一方法簡單易用,且由于是Linux/Unix操作系統(tǒng)自帶的功能,因而并不存在不兼容的問題。事實上,目前多數(shù)監(jiān)控系統(tǒng)都采用此類方法獲取監(jiān)控信息。在Linux操作系統(tǒng)中,可以使用ps命令顯示當前系統(tǒng)進程的列表,free顯示物理內存和交換區(qū)的總量以及已使用的、空閑的、共享的、被緩存的內存數(shù)量等。實際使用中,通常需要首先通過Linux命令讀取數(shù)據(jù),然后利用shell的管道和重定向的方式將數(shù)據(jù)輸入文件或取出,再進行下一步的分析處理。
proc (process information pseudo file system,進程信息偽文件系統(tǒng))文件系統(tǒng)之所以被稱為偽文件系統(tǒng),是因為它是一個虛擬的文件系統(tǒng)。它由Linux/Unix內核動態(tài)維護和更新。
與一般的文件系統(tǒng)不同,/proc偽文件系統(tǒng)并不存在于硬盤上,而是存在于內核核心態(tài)空間中,系統(tǒng)啟動時,內核自動將該文件系統(tǒng)裝載在/proc目錄下。/proc偽文件系統(tǒng)中包含CPU信息、內核/系統(tǒng)使用信息、內核版本、網絡狀況、設備信息等大量信息,均以文件形式存儲,并通過內核對其進行更新以確保實效性。由于只需通過文件讀取的方式獲得,從/proc偽文件系統(tǒng)獲取系統(tǒng)運行數(shù)據(jù)方便快捷且效率較高。本文采用了/proc偽文件系統(tǒng)的采集方法,并對采集信息加以整理分類。CPU基本信息可由/proc/cpuinfo文件獲得,其中包括CPU的供應商、頻率、模型等靜態(tài)信息,如圖2所示。processor:該條目是這一邏輯處理器的唯一標識;physical id:每個物理封裝的唯一標識,其數(shù)量代表物理CPU的數(shù)量;core id:每個內核的唯一標識符,其數(shù)量代表內核的個數(shù);siblings:位于同一個物理封裝中的邏輯處理器的數(shù)量;cpu cores 同一物理封裝中的內核數(shù)量;vendor id:生產商名,對于英特爾的處理器而言,vendor id中的字符串是GenuineIntel。
2監(jiān)控系統(tǒng)實現(xiàn)
在shell腳本中,可以通過grep+關鍵詞的方式,找到關鍵詞所在行,再通過排除重復、統(tǒng)計行數(shù),或是截取關鍵內容等方法獲得所需的相關數(shù)據(jù)。獲取CPU數(shù)目的關鍵代碼如下:
cpu_num=`cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l`
從cpuinfo中找出與physical id有關的內容,排重后計算行數(shù),以獲得物理CPU的數(shù)目。計算CPU負載情況時,使用的主要是uptime命令。對計算CPU負載而言,有用的數(shù)據(jù)是load average后的數(shù)值。這3個數(shù)據(jù)分別代表的意思是1分鐘、5分鐘、15分鐘內系統(tǒng)的平均負荷。當CPU完全空閑時,平均負荷為0,當CPU工作量飽和時,平均負荷為1(單個CPU的情況)。在n個CPU 情況下當CPU完全空閑時,平均負荷為0,當CPU工作量飽和時,平均負荷為n。當平均負荷超過n時,說明CPU負載過大,不能及時處理所有工作。"load average"的值越低,說明負載越小,系統(tǒng)負荷越輕。在設計監(jiān)控數(shù)值時,可以將平均CPU負載的警報值設置在0.8n左右,具體情況可以依照用戶的自主設定來選擇。
"load average"一共有3個值:1分鐘系統(tǒng)負荷、5分鐘系統(tǒng)負荷、15分鐘系統(tǒng)負荷,計算時值的選取必須仔細研究。如果僅有1分鐘的系統(tǒng)負荷大于n,其它兩個時間段都小于n,可見問題并不突出,只是暫時現(xiàn)象,但如果15分鐘內的平均系統(tǒng)負荷始終大于n,則表明問題并非暫時的,需要加以解決以降低系統(tǒng)負荷。因此,本設計中采取15分鐘的系統(tǒng)平均負荷作為監(jiān)控數(shù)據(jù)。
實現(xiàn)這一功能的主要bash腳本如下:
load_15min=`uptime| cut -d , -f 5`
load_avg=`echo "scale=0;($load_15min*100)/$total_core"|bc -l`
WARNING=80
full=0
if [[ "$load_avg" -gt "$WARNING" ]]; then
full=1
echo -e "033[31;1mYOUR CPU is overload!033[0m"
fi
if [[ "$full" -eq 0 ]]; then
echo -e "033[35;1mYour CPU LOAD is under control!033[0m"
fi
其它系統(tǒng)信息采集方法基本類似,如采用shell命令采集磁盤分區(qū)。在終端下輸入指令:df –h時得到磁盤空間使用率信息:在監(jiān)控程序中首先利用管道將df –k 命令的輸出轉變?yōu)間rep命令的輸入,并通過grep命令取出/dev相關的行。此后分別取出文件系統(tǒng),使用率和峰值所在項數(shù)據(jù)。通過數(shù)組存儲。內存使用率計算主要依靠/proc偽文件系統(tǒng)中的/proc/meminfo。計算內存使用率主要需要獲取的內容是MemTotal和空閑內存的數(shù)量。磁盤分區(qū)使用量和內存使用量監(jiān)控的總體實現(xiàn)方法相似,都通過運行腳本獲得使用量數(shù)據(jù)后導入C語言程序中所定義的變量,由此再轉換為可顯示的數(shù)據(jù)。
自動檢查的實現(xiàn)方法主要是在后臺運行程序,通過加入循環(huán),并在每次循環(huán)時加入一定間隔時間的方式(如sleep 20)來控制腳本運行,達到自動檢查的目的。
3結語
數(shù)據(jù)中心監(jiān)控問題日益引起重視,服務器監(jiān)控為其中最重要的內容之一。本文針對LINUX或其它類UNIX系統(tǒng),對服務器監(jiān)控的內容和實現(xiàn)方法進行研究,并給出具體的設計實現(xiàn)方案。文中以Linux操作系統(tǒng)為開發(fā)平臺,使用Apache服務器軟件提供相應的服務支持。對于監(jiān)控內容的確定,主要從實際需求與可實現(xiàn)性的角度出發(fā)??晒┍O(jiān)控的內容主要有CPU信息、CPU負載、內存使用率、磁盤分區(qū)使用狀況、CPU溫度、CPU電壓等。由于溫度和電壓等部分需要通過加載外部組件等方式來獲取,難以直接通過shell命令采集或是/proc偽文件系統(tǒng)獲取的方式來取得,故并未在本文設計中體現(xiàn)。因此,本文監(jiān)控的主要內容為CPU信息、CPU負載、CPU利用率、內存使用率、磁盤分區(qū)使用狀況,并對相關信息進行了整理和加工。通過命令和/proc偽文件系統(tǒng),讀取系統(tǒng)文件,從文件中篩選可用信息,并通過對信息加以整理、分類、計算,并采用重新寫成文件或輸出到屏幕的方式,顯示相關信息。具體工作包括:讀取歸納CPU基本信息、計算CPU負載情況、計算CPU使用率、計算內存使用率、設計自動檢查、撰寫郵件腳本、設計用戶自主設置內容并完成內容的實時讀取、存儲、更新。
參考文獻參考文獻:
[1]WALKER,RAY.Examining load average[J].Linux Journal,2006(5):152.
[2]SMITH,CURTIS,DAVID HENRY.Highperformance linux cluster monitoring using java[C].Proceedings of the 3rd Linux Cluster International Conference,2002.
[3]樓樺.服務器監(jiān)控系統(tǒng)的實現(xiàn)及其分布式設計[D].鄭州:鄭州大學,2004.
[4]劉文庭.MID平臺上基于Linux的USB客戶端系統(tǒng)設計[D].天津:南開大學,2009.
責任編輯(責任編輯:孫娟)