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