(長(zhǎng)江大學(xué)電子信息學(xué)院,湖北 荊州 434023)
隨著云計(jì)算的飛速發(fā)展,節(jié)點(diǎn)數(shù)量日益增多,節(jié)點(diǎn)的管理難度也逐漸增加。目前,適用于云平臺(tái)的開源監(jiān)控系統(tǒng)有MRTG、Cacti、Nagios、Ganglia、Zabbix等[3~6]。其中,MRTG、Cacti和Ganglia無報(bào)警機(jī)制,集群故障無法及時(shí)通知運(yùn)維人員;Nagios無采集流量數(shù)據(jù)功能,且報(bào)警方式單一,其數(shù)據(jù)可視化需要借助外部插件實(shí)現(xiàn),插件易用性差;Zabbix隨著監(jiān)控?cái)?shù)據(jù)的增大會(huì)使數(shù)據(jù)庫的寫入成為瓶頸,后期開發(fā)要求高。但與上述其它監(jiān)控系統(tǒng)相比,Nagios具有如下監(jiān)控優(yōu)點(diǎn):跨平臺(tái)、接口標(biāo)準(zhǔn)化、提供異常報(bào)警功能、出錯(cuò)的應(yīng)用會(huì)自動(dòng)重啟、配置靈活、可監(jiān)控400多臺(tái)主機(jī)[7]、采用分布式監(jiān)控增加監(jiān)控?cái)?shù)量、使用插件監(jiān)控方便了用戶二次開發(fā)和維護(hù)、采用適當(dāng)?shù)谋O(jiān)控策略和檢測(cè)方式即可降低監(jiān)控系統(tǒng)負(fù)荷、提高監(jiān)控效率;所以筆者在Nagios監(jiān)控系統(tǒng)的基礎(chǔ)上,結(jié)合MRTG設(shè)計(jì)了一種Hadoop平臺(tái)流量監(jiān)控系統(tǒng)。該系統(tǒng)以流量作為主要的監(jiān)控對(duì)象進(jìn)行研究,易于實(shí)現(xiàn)和開發(fā),可以實(shí)時(shí)監(jiān)控多種對(duì)象并提供多種報(bào)警方式,滿足Hadoop云平臺(tái)的監(jiān)控要求。
Hadoop是一個(gè)開源的分布式處理框架[8,9],能夠讓許多計(jì)算機(jī)一起工作。Hadoop的核心組件有HDFS[10](hadoop distributed file system)和MapReduce[11]。
HDFS是分布式文件系統(tǒng),具有大存儲(chǔ)量、高容錯(cuò)性、高吞吐量、高可擴(kuò)展性、負(fù)載均衡等特點(diǎn)[12]。
MapReduce是并行計(jì)算框架,其為Hadoop提供文件的并行計(jì)算,將一個(gè)任務(wù)分解為多個(gè)子任務(wù)進(jìn)行處理,簡(jiǎn)化了并行處理模式,程序員只需要告訴計(jì)算機(jī)對(duì)數(shù)據(jù)劃分的方法即可,其他任務(wù)由系統(tǒng)自動(dòng)完成。
Nagios是一個(gè)可以運(yùn)行在Linux、Unix和Windows操作系統(tǒng)上的開源監(jiān)控框架[12],用戶可根據(jù)需求編寫插件來完成監(jiān)控或通過端口號(hào)來監(jiān)控。如在臨床IT系統(tǒng)上部署Nagios監(jiān)控系統(tǒng),可以利用端口號(hào)對(duì)特定放射科的協(xié)議進(jìn)行監(jiān)控[13]。
Nagios對(duì)遠(yuǎn)程主機(jī)的監(jiān)控需要借助NRPE(nagios remote plugin executor)[14]組件。它由check_nrpe插件和NRPE守護(hù)進(jìn)程2部分組成,check_nrpe插件位于監(jiān)控主機(jī)(monitoring host)上,NRPE守護(hù)進(jìn)程位于遠(yuǎn)程被監(jiān)控主機(jī)(remote linux/unix host)上[15](見圖1)。
圖1 NRPE的監(jiān)控原理圖
Nagios檢測(cè)有“OK”“WARNING”“CRITICAL”“UNKNOWN”4個(gè)返回值,分別表示狀態(tài)正常、異常、嚴(yán)重錯(cuò)誤、未知錯(cuò)誤或監(jiān)控停止。Nagios根據(jù)插件返回值來判斷監(jiān)控狀況,并通過Web顯示出來,在監(jiān)控到問題時(shí),會(huì)根據(jù)定義的方式進(jìn)行報(bào)警,這也是Nagios比較重要的一個(gè)功能。
隨著我國(guó)基本醫(yī)療保險(xiǎn)(簡(jiǎn)稱醫(yī)保)覆蓋范圍不斷擴(kuò)大,百姓對(duì)醫(yī)保的要求逐漸提高,醫(yī)院作為醫(yī)保制度運(yùn)行和管理的中心環(huán)節(jié),是醫(yī)、保、患三方矛盾集中及激化的焦點(diǎn)[1],致醫(yī)療保險(xiǎn)相關(guān)投訴事件居高不下,是醫(yī)院投訴管理的重點(diǎn)。PDCA循環(huán)是一種科學(xué)管理模式,按照計(jì)劃(plan,P)、實(shí)施(do,D)、檢查(check,C)、處理(action,A)順序進(jìn)行質(zhì)量管理,其科學(xué)性、程序性及有效性均受到醫(yī)院管理者的普遍關(guān)注[2-3]。PDCA循環(huán)是提高醫(yī)保質(zhì)量管理的重要手段,對(duì)門診醫(yī)保投訴管理有著重要的作用。
Nagios的監(jiān)控方法通過配置文件確定,表1給出了必要配置文件及文件的作用,用戶還需要?jiǎng)?chuàng)建service.cfg和host.cfg這2個(gè)文件,用來配置遠(yuǎn)程主機(jī)的監(jiān)控方法。
表1 Nagios必要配置文件及用途
MRTG是一個(gè)監(jiān)控網(wǎng)絡(luò)鏈路流量負(fù)載的軟件[16],通過簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議SNMP(simple network management protocol)獲取設(shè)備的流量信息,并將流量負(fù)載以包含PNG(portable network graphics)格式的HTML(hyper text markup language)文本方式顯示給用戶。
SNMP是一種應(yīng)用層協(xié)議,由網(wǎng)絡(luò)設(shè)備、管理組件、代理Agent組成。SNMP運(yùn)行在UDP之上,利用的是UDP的161/162端口。其中,161端口被代理Agent監(jiān)聽,等待管理組件發(fā)送管理信息;162端口由管理組件監(jiān)聽,等待代理Agent發(fā)送異常事件報(bào)告。
OneAlert[17]是國(guó)內(nèi)首個(gè)SaaS模式的云報(bào)警平臺(tái),集成國(guó)內(nèi)外主流監(jiān)控/支撐系統(tǒng),具有以下功能:在一個(gè)平臺(tái)中接收所有監(jiān)控系統(tǒng)的報(bào)警,讓運(yùn)維人員集中處理IT事件,避免多平臺(tái)切換,提升運(yùn)維效率;通過機(jī)器學(xué)習(xí)算法壓縮報(bào)警,讓運(yùn)維人員快速定位報(bào)警根源,避免報(bào)警風(fēng)暴;靈活的報(bào)警分派策略,在合適的時(shí)間,把報(bào)警推送給最合適的人員;QQ、微信、郵件、短信、電話多個(gè)渠道接收事件提醒;全面的報(bào)警分析能力,讓運(yùn)維人員快速直觀地了解報(bào)警頻發(fā)根源,提升團(tuán)隊(duì)運(yùn)維效率。
在基于Hadoop的PaaS(platform as a service)公有云模型[18,19]的環(huán)境下,設(shè)計(jì)了Hadoop平臺(tái)的Nagios監(jiān)控系統(tǒng)架構(gòu),在主節(jié)點(diǎn)hadoop1上安裝有check_nrpe和NagiosPlugins,在2個(gè)從節(jié)點(diǎn)hadoop2、hadoop3上安裝的有NRPE Daemon和Nagios Plugins,Nagios Plugins提供了許多監(jiān)控插件,如check_disk、check_http等(見圖2)。
圖2 Nagios的監(jiān)控架構(gòu)
當(dāng)Nagios監(jiān)控Hadoop集群的服務(wù)或資源時(shí),需要進(jìn)行以下步驟:
1)Nagios將會(huì)執(zhí)行hadoop1上的check_nrpe插件,并告訴它什么服務(wù)需要監(jiān)測(cè);同樣,也會(huì)執(zhí)行Nagios Plugins中適當(dāng)?shù)牟寮O(jiān)測(cè)本地服務(wù)或資源;
2)插件check_nrpe將會(huì)聯(lián)系遠(yuǎn)程主機(jī)hadoop2、hadoop3上的NRPE Daemon;
3)NRPE Daemon調(diào)用Nagios Plugins中適當(dāng)?shù)牟寮O(jiān)測(cè)服務(wù)或資源;
4)將hadoop2、hadoop3監(jiān)控的數(shù)據(jù)傳遞到NRPE Daemon。
由于Nagios自身無法采集流量數(shù)據(jù),因此筆者使用MRTG來采集集群的流量數(shù)據(jù),再通過Nagios插件check_mrtgtraf來獲取流量數(shù)據(jù)并監(jiān)控。采集流量數(shù)據(jù)的MRTG安裝在hadoop2上,通過SNMP采集集群節(jié)點(diǎn)的流量數(shù)據(jù)并存儲(chǔ),Nagios執(zhí)行check_nrpe插件,調(diào)用遠(yuǎn)程主機(jī)上的check_mrtgtraf插件來讀取流量數(shù)據(jù)并處理生成Web頁面(見圖3)。根據(jù)Nagios和MRTG的監(jiān)控原理,MRTG可以安裝在Hadoop集群中的任意一個(gè)節(jié)點(diǎn)上。如果MRTG安裝在hadoop1上,就需要hadoop1從其他節(jié)點(diǎn)上采集流量數(shù)據(jù),這樣Nagios和MRTG的進(jìn)程都在hadoop1上,從而加大了hadoop1的負(fù)荷;如果MRTG安裝在hadoop2或hadoop3上,Nagios只需要運(yùn)行NRPE來調(diào)用hadoop2或hadoop3上的check_mrtgtraf插件來獲取流量數(shù)據(jù),這樣就把對(duì)流量的采集工作交給了hadoop2或hadoop3,從而減輕hadoop1的負(fù)荷。
圖3 Hadoop平臺(tái)的流量監(jiān)控原理圖
圖4 報(bào)警模塊原理圖
利用SendMail組件和OneAlert平臺(tái)設(shè)計(jì)一個(gè)多方式報(bào)警模塊,如圖4所示。SendMail和onealert-agent安裝在監(jiān)控主機(jī)上,其中,Nagios通過SendMail以郵件的方式向管理人員發(fā)送報(bào)警信息;OneAlert平臺(tái)通過onealert-agent將Nagios的報(bào)警事件集成至OneAlert,實(shí)現(xiàn)統(tǒng)一壓縮合并、分派和通知。該模塊在發(fā)送一條報(bào)警信息后,只有報(bào)警狀態(tài)被維護(hù)人員取消或在一段時(shí)間(默認(rèn)30min)后才會(huì)再次在滿足條件時(shí)發(fā)送報(bào)警信息。
利用VMware Workstation軟件,創(chuàng)建了3臺(tái)配置為單核、1G+20G的虛擬機(jī),并使用Centos6.6作為虛擬機(jī)的操作系統(tǒng)來搭建一個(gè)擁有3個(gè)節(jié)點(diǎn)的Hadoop集群;1個(gè)IP為192.168.1.61的主節(jié)點(diǎn)(hadoop1)和2個(gè)IP分別為192.168.1.62、192.168.1.63的從節(jié)點(diǎn)(hadoop2、hadoop3)。參照文獻(xiàn)[8]搭建Hadoop集群,在主節(jié)點(diǎn)上啟動(dòng)集群,通過http://192.168.1.61:50070查看Hadoop集群的HDFS情況,通過http://192.168.1.61:8088查看集群的MapReduce情況。
在主節(jié)點(diǎn)hadoop1上先后安裝Nagios框架[20]和NRPE,進(jìn)入Nagios安裝目錄配置Nagios文件[21~23],Nagios檢測(cè)策略為:狀態(tài)正常時(shí)以頻率fn檢測(cè),狀態(tài)異常時(shí)以頻率fan連續(xù)檢測(cè)nc次,然后檢測(cè)頻率恢復(fù)為fn。檢測(cè)狀態(tài)返回值為:狀態(tài)正常值為“OK”,狀態(tài)異常值以最后一次的檢測(cè)結(jié)果評(píng)定為“OK”、“WARNING”或“CRITICAL”。設(shè)置fn=0.2次/min,fan=1次/min,nc=3。然后安裝可視化模塊PNP4Nagios[24],PNP4Nagios以前一次檢測(cè)時(shí)間為起點(diǎn),本次檢測(cè)時(shí)間為終點(diǎn)的方式繪制檢測(cè)曲線,檢測(cè)曲線將實(shí)時(shí)顯示Nagios檢測(cè)數(shù)據(jù)。
在主節(jié)點(diǎn)上配置Nagios報(bào)警模塊[20],在OneAlert官網(wǎng)注冊(cè)一個(gè)賬號(hào),登陸后按以下步驟配置:選擇Nagios標(biāo)簽頁進(jìn)入其配置界面,然后創(chuàng)建Nagios應(yīng)用,設(shè)置報(bào)警時(shí)間間隔30min,獲取Nagios應(yīng)用的key值。在hadoop1上安裝onealert-agent,在安裝目錄配置110monitor.cfg中pager為Nagios應(yīng)用的key值;在contacts.cfg中添加聯(lián)系人“110monitor”;在nagios.cfg的最后一行添加cfg_file=/usr/local/nagios/etc/objects/110monitor.cfg。上述配置完成后,可實(shí)現(xiàn)報(bào)警功能,Nagios的報(bào)警機(jī)制為:當(dāng)監(jiān)控?cái)?shù)據(jù)超過Warning門限值且低于Critical門限值時(shí)返回WARNING并發(fā)送WARNING報(bào)警信息,當(dāng)監(jiān)控?cái)?shù)據(jù)超過Critical門限值時(shí)返回CRITICAL并發(fā)送CRITICAL報(bào)警信息。
圖5 localhost的流量配置內(nèi)容
在從節(jié)點(diǎn)上安裝和配置MRTG[25,26],service.cfg為系統(tǒng)默認(rèn)配置,localhost.cfg按照?qǐng)D5所示格式配置。其中,“hadoop1”是被監(jiān)控主機(jī)名,check_local_mrtgtraf是監(jiān)控流量的插件;“usr/local/mrtg/share/192.168.1.61_2.log”是MRTG日志文件的路徑;“2”表示虛擬機(jī)網(wǎng)卡eth1的端口;“AVG”表示平均帶寬統(tǒng)計(jì)數(shù)據(jù);“100,100”表示輸入輸出流量的Warning門限(單位為B/s);“200,200”表示輸入輸出流量的Critical門限(單位為B/s);“10”表示MRTG日志10min沒有更新數(shù)據(jù)時(shí)插件將會(huì)返回CRITICAL狀態(tài)。為驗(yàn)證流量監(jiān)控報(bào)警功能,設(shè)置的報(bào)警門限值較低,實(shí)際應(yīng)用可按需求設(shè)定。
訪問http://192.168.1.61:78/nagios查看Nagios對(duì)Hadoop平臺(tái)的監(jiān)控結(jié)果(見圖6)。在對(duì)應(yīng)Last Check時(shí)刻,hadoop1為UP開啟狀態(tài),hadoop2、hadoop3為DOWN關(guān)閉狀態(tài),據(jù)此可統(tǒng)計(jì)出Hadoop平臺(tái)中節(jié)點(diǎn)開啟和關(guān)閉的個(gè)數(shù)。
圖6 Hadoop集群的監(jiān)控界面
1)hadoop1的詳細(xì)情況。圖7是hadoop1在執(zhí)行pingbaidu.com命令時(shí),監(jiān)控對(duì)象的監(jiān)控?cái)?shù)據(jù)及狀態(tài)(流量為報(bào)警狀態(tài)WARNING,其余監(jiān)控對(duì)象狀態(tài)為OK),圖8是取消ping命令且關(guān)閉部分進(jìn)程時(shí),流量報(bào)警解除的監(jiān)控界面(所有監(jiān)控對(duì)象狀態(tài)為OK);據(jù)此可知每個(gè)監(jiān)控對(duì)象的工作狀態(tài)為“OK”、“WARNING”或“CRITICAL”,還可得出每個(gè)節(jié)點(diǎn)資源的利用率。
圖7 hadoop1節(jié)點(diǎn)的監(jiān)控界面1
圖8 hadoop1節(jié)點(diǎn)的監(jiān)控界面2
2)流量可視化結(jié)果。圖9展示了在一段時(shí)間內(nèi),每個(gè)監(jiān)控對(duì)象的工作狀態(tài)為“OK”、“WARNING”或“CRITICAL”,其中,Warning100.000000和Critical200.000000對(duì)應(yīng)圖5所設(shè)置的平均帶寬門限閾值;據(jù)此可分析出現(xiàn)異常狀態(tài)的原因,預(yù)測(cè)監(jiān)控對(duì)象未來的工作狀態(tài),及時(shí)預(yù)防異常狀態(tài)的發(fā)生,更好的管理平臺(tái)。
圖9 hadoop1流量可視化界面
系統(tǒng)實(shí)現(xiàn)了對(duì)流量異常的郵件和短信報(bào)警,當(dāng)輸入或輸出流量中有超過圖5中預(yù)定的門限閾值時(shí),返回對(duì)應(yīng)狀態(tài)并發(fā)送報(bào)警信息。由圖9可知,10:40,檢測(cè)到流量為異常狀態(tài),所以Nagios在10:41、10:42、10:43均進(jìn)行了檢測(cè),且以10:43的檢測(cè)結(jié)果WARNING作為流量的監(jiān)控狀態(tài)。Nagios啟動(dòng)報(bào)警機(jī)制,運(yùn)維人員將收到流量WARNING報(bào)警信息(見圖10和圖11)。10:48,流量狀態(tài)恢復(fù)正常,Nagios會(huì)發(fā)送報(bào)警取消短信(見圖12)。運(yùn)維人員通過預(yù)留手機(jī)號(hào)來接受報(bào)警取消短信,從而判斷監(jiān)控對(duì)象的異常狀態(tài)是否被消除,接受到報(bào)警取消短信表示異常狀態(tài)被消除,沒有接收到報(bào)警取消短信表示異常狀態(tài)還在持續(xù)。
此外,瀏覽網(wǎng)頁使流量為異常狀態(tài)CRITICAL,運(yùn)維人員將收到流量CRITICAL報(bào)警信息(見圖13和圖14)。由圖10~圖14可知,當(dāng)監(jiān)控對(duì)象被確定為異常狀態(tài)時(shí),監(jiān)控系統(tǒng)能在20s時(shí)間內(nèi)發(fā)送異常狀態(tài)的報(bào)警信息;運(yùn)維人員可以通過設(shè)定的郵箱和預(yù)留的手機(jī)號(hào)接受報(bào)警信息,方便了運(yùn)維人員隨時(shí)隨地掌握Hadoop平臺(tái)的運(yùn)行情況。
圖10 流量WARNING報(bào)警郵件 圖11 流量WARNING報(bào)警短信 圖12 流量報(bào)警取消短信
筆者以Hadoop流量為對(duì)象,研究了其監(jiān)控方法和報(bào)警方式。利用Nagios和MRTG實(shí)現(xiàn)了Hadoop平臺(tái)的流量監(jiān)控系統(tǒng),該系統(tǒng)還可以對(duì)平臺(tái)的CPU、內(nèi)存、磁盤、進(jìn)程數(shù)、登陸用戶數(shù)等方面進(jìn)行測(cè)試、監(jiān)控和報(bào)警。報(bào)警方式除了郵件之外,還實(shí)現(xiàn)了短信報(bào)警方式(還可以用電話方式);在平臺(tái)出現(xiàn)異常和處理完異常時(shí),能及時(shí)通知運(yùn)維人員,便于運(yùn)維人員隨時(shí)隨地掌握平臺(tái)運(yùn)行狀況。由于該系統(tǒng)沒有歷史數(shù)據(jù)分析功能,筆者下一步的工作將是采用python統(tǒng)計(jì)分析歷史監(jiān)控?cái)?shù)據(jù),評(píng)估平臺(tái)性能。
圖13 流量CRITICAL報(bào)警郵件 圖14 流量CRITICAL報(bào)警短信