服務器管理監(jiān)控系統(tǒng)_第1頁
服務器管理監(jiān)控系統(tǒng)_第2頁
服務器管理監(jiān)控系統(tǒng)_第3頁
服務器管理監(jiān)控系統(tǒng)_第4頁
服務器管理監(jiān)控系統(tǒng)_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

效勞器管理、監(jiān)控系統(tǒng)摘要:現(xiàn)今互聯(lián)網(wǎng)行業(yè)開展迅速,底層支撐互聯(lián)網(wǎng)效勞的效勞器等各種硬件設備規(guī)模越來龐大。如何管理有效地管理這些設備、實時發(fā)現(xiàn)其潛在的隱患、獲取其運行的狀態(tài),而顯得至關重要。根據(jù)這些信息才能合理地決定設備上所運行系統(tǒng)、應用等效勞的關閉與保存與掛起。本文介紹了利用Zabbix開源監(jiān)控解決方案,以及對該方案的二次開發(fā)而實現(xiàn)對效勞器機房的專家系統(tǒng)。關鍵字:機房運維效勞器監(jiān)控Zabbix目錄摘要 21.引言 42.Zabbix監(jiān)控原理與應用 52.1.Zabbix監(jiān)控原理 52.2Zabbix用戶配置 63.監(jiān)控建立與二次開發(fā) 84.系統(tǒng)展示 104.1用戶監(jiān)控對象添加 105.總結(jié) 14參考文獻: 151.引言隨著現(xiàn)今互聯(lián)網(wǎng)行業(yè)的迅速開展,某些物聯(lián)網(wǎng)效勞的用戶已經(jīng)到達了億級,如淘寶網(wǎng)注冊用戶已到達3.7億,僅在2015年“雙十一”當天活潑用戶過億[1]。支撐如此龐大用戶使用的硬件根底是規(guī)模龐大的效勞器群。如何獲取每一臺效勞器的運行狀態(tài),及時得悉潛在隱患,出現(xiàn)問題及時鎖定排除顯得至關重要。機房運維人員以及高層決策人員只有在實時掌握這些信息后才可有效地對進行決策,如在訪問流量過大或其他惡意攻擊后是及時關閉效勞還是啟動備用效勞,效勞區(qū)癱瘓后是需要工作人員至機房處理硬件問題還是只需遠程重啟效勞器等類似或簡單或復雜的決策,都需要底層專家系統(tǒng)信息的支持。現(xiàn)今比擬成熟的開源效勞器底層數(shù)據(jù)的采集解決方案主要有Zabbix和Nagios。Nagios是一個監(jiān)視系統(tǒng)運行狀態(tài)和網(wǎng)絡信息的監(jiān)視系統(tǒng),能監(jiān)視所指定的本地或遠程主機以及效勞,同時提供異常通知功能等[2]。Nagios可運行在Linux/Unix平臺之上,同時提供一個可選的基于瀏覽器的Web界面以方便系統(tǒng)管理人員查看網(wǎng)絡狀態(tài),各種系統(tǒng)問題,以及日志等等。Nagios可以監(jiān)控的功能有:1、監(jiān)控網(wǎng)絡效勞〔SMTP、POP3、、NNTP、PING等〕;2、監(jiān)控主機資源〔處理器負荷、磁盤利用率等〕;3、簡單地插件設計使得用戶可以方便地擴展自己效勞的檢測方法;4、并行效勞檢查機制;5、具備定義網(wǎng)絡分層結(jié)構(gòu)的能力,用"parent"主機定義來表達網(wǎng)絡主機間的關系,這種關系可被用來發(fā)現(xiàn)和明晰主機宕機或不可達狀態(tài);6、當效勞或主機問題產(chǎn)生與解決時將告警發(fā)送給聯(lián)系人〔通過EMail、短信、用戶定義方式〕;7、可以定義一些處理程序,使之能夠在效勞或者主機發(fā)生故障時起到預防作用;8、自動的日志滾動功能;9、可以支持并實現(xiàn)對主機的冗余監(jiān)控;10、可選的WEB界面用于查看當前的網(wǎng)絡狀態(tài)、通知和故障歷史、日志文件等[2];11、可以通過查看系統(tǒng)監(jiān)控信息;12、可指定自定義的事件處理控制器[3]。其他一些大型企業(yè)也有自己獨立開發(fā)的效勞器監(jiān)控效勞,如小米運維部的人性化互聯(lián)網(wǎng)企業(yè)級監(jiān)控系統(tǒng)Open-Falcon、淘寶運維部使用OpenTSDB等,它們也有各自的優(yōu)點。本文第一章概述了效勞器機房的專家,以及可提供這些效勞的一些解決方案等;第二章介紹Zabbix所提供的監(jiān)控原理即使用;第三章介紹Zabbix的實際監(jiān)控應用以及二次開發(fā);第四章進行專家的分析;第五章對效勞器機房專家系統(tǒng)進行總結(jié)。2.Zabbix監(jiān)控原理與應用Zabbix是一個B/S模式的企業(yè)級的監(jiān)控效勞解決方案,用戶可以此獲取效勞器等硬件、操作系統(tǒng)、中間件等的運行狀態(tài),為應用層的決策提供決策信息。2.1Zabbix監(jiān)控原理Zabbix由agent和server組成,其中agent負責采集效勞器等監(jiān)控對象的數(shù)據(jù),server負責處理這些數(shù)據(jù),判斷異常等,并通過提供apache效勞在web端實現(xiàn)對數(shù)據(jù)的可視化展示。其中agent的類型主要監(jiān)控對象包括:〔1〕Zabbix-agent,根據(jù)Zabbix監(jiān)控方式實現(xiàn)對操作系統(tǒng)層級的信息采集,實現(xiàn)對系統(tǒng)的監(jiān)控。Zabbix-agent有sender和get兩局部組成,分別通過命令來采集數(shù)據(jù)[4]。監(jiān)控對象有CPU運行狀態(tài)、磁盤I/O、內(nèi)存使用、進程線程數(shù)等;同時可利用其他應用提供的端口實現(xiàn)對應用效勞的監(jiān)控,如MySQL數(shù)據(jù)庫等?!?〕、IPMI-agent,根據(jù)IPMI〔IntelligentPlatformManagementInterface〕接口實現(xiàn)對效勞器等硬件設備的監(jiān)控,監(jiān)控對象包括CPU運行溫度、風扇轉(zhuǎn)速、環(huán)境溫度等硬件信息的監(jiān)控;〔3〕SNMP-agent,根據(jù)SNMP〔SimpleNetworkManagementProtocol〕協(xié)議實現(xiàn)對交換機、路由器等網(wǎng)絡設備的監(jiān)控。監(jiān)控對象包括各端口運行狀態(tài)、流入流出流量等?!?〕JMX-agent,根具JMX〔JavaManagementExtensions〕提供的接口實現(xiàn)對Java類應用的監(jiān)控。監(jiān)控對象包括Java虛擬機、Tomcat效勞,Hadoop、Spark等分布式效勞的監(jiān)控等。當agent得到數(shù)據(jù)并發(fā)送給server后,server端將數(shù)組存放在位于效勞端的數(shù)據(jù)庫,然后前端效勞調(diào)用數(shù)據(jù)庫數(shù)據(jù)并將其可視化顯示。顯示給用戶的只有browser頁面,用戶在前端進行效勞器管理并據(jù)此進行相應決策。圖〔1〕表示了Zabbix的監(jiān)控原理。圖SEQFigure\*ARABIC1Zabbix監(jiān)控原理圖Zabbix的agent將數(shù)據(jù)發(fā)送給server并儲存在數(shù)據(jù)庫中,前端頁面調(diào)用數(shù)據(jù)庫中的數(shù)據(jù)與用戶交互。2.2Zabbix用戶配置Zabbixserver處理數(shù)據(jù)時為了便于用戶操作按圖〔2〕的方式處理、集成監(jiān)控數(shù)據(jù)。圖SEQFigure\*ARABIC2數(shù)據(jù)處理、集成圖其中host為用戶監(jiān)控的主機、設備或操作系統(tǒng)等;item為實際的監(jiān)控個體,可能是某一個CPU的使用率,磁盤讀寫速度等,一個host上可能存在假設干item;每一個item都可設定對應的trigger,根據(jù)閾值判斷還item的使用情況是否到達報警值。Trigger發(fā)現(xiàn)報警后將會在主界面顯示,也可都過短信、郵件、微信等向用戶發(fā)送報警信息,并連接后續(xù)修復操作。因此用戶在實際使用時主要需配置host,item和trigger,分別如圖〔3〕、圖〔4〕、圖〔5〕所示。圖SEQFigure\*ARABIC3Host配置圖用戶配置監(jiān)控方式即監(jiān)控對象,包括監(jiān)控Host配置圖對象的名稱、所在群組、監(jiān)控方式、IP地址等。圖SEQFigure\*ARABIC4item配置圖用戶根據(jù)不同的監(jiān)控類型配置監(jiān)控的具體個體,可設置監(jiān)控元素、監(jiān)控周期、數(shù)據(jù)保存時限等。圖SEQFigure\*ARABIC5trigger配置圖Trigger配置報警信息,其中Expression為表達式判斷item的使用情況。如下圖為空閑內(nèi)存與全部內(nèi)存的比值,但可用內(nèi)存的使用率小于20%時,將產(chǎn)生報警,警報級別為高。除了上述3種配置外,用戶還可通過配置graph、map、screen等,分別配置數(shù)據(jù)展示圖,host關系圖、監(jiān)控大屏等。3.監(jiān)控建立與二次開發(fā)本監(jiān)控與專家系統(tǒng)根據(jù)東海分局預報中心需要,利用Zabbix監(jiān)控體系并結(jié)合Javaweb技術二次開發(fā)建立,為整個預報中心提高機房管理、監(jiān)控專家效勞。3.1搭建環(huán)境本系統(tǒng)選擇Ubuntuserver作為Zabbixserver所在效勞器,上文四種監(jiān)控agent部署與客戶端采集數(shù)據(jù);數(shù)據(jù)庫選擇MySQLserver;網(wǎng)頁效勞選擇apache開源效勞;同時利用springboot框架進行javaweb開發(fā),整合Zabbix的api,并直接處理Zabbix數(shù)據(jù)庫,在交互更良好的頁面實現(xiàn)管理與決策。3.2Zabbixserver建立根據(jù)Zabbix的監(jiān)控原理,server的搭建主要包括數(shù)據(jù)庫的建立,apacheweb效勞的建立,Zabbixserver的建立等,另外Zabbixserver只能搭建在Linux系統(tǒng)中。本系統(tǒng)中Zabbixserver的安裝都選擇Ubuntu系統(tǒng)下的編譯安裝,具體建立流程不在贅述,詳情參見Zabbix用戶手冊[5]。3.3二次開發(fā)Zabbix原始界面為英文界面,中文翻譯的界面十分生硬,不便于中國用戶使用。本系統(tǒng)對Zabbix進行了二次開發(fā),在Zabbix上用封裝了一層用戶管理系統(tǒng)。本系統(tǒng)使用Javaweb技術,結(jié)合Zabbixapi操作Zabbix數(shù)據(jù),同時根據(jù)用戶需要添加了針對性的效勞。系統(tǒng)界面如圖6:圖SEQFigure\*ARABIC6平臺界面如下圖,用戶可添加硬件、中間件、操作系統(tǒng)等類型的host。圖〔7〕為用戶添加host的界面:圖SEQFigure\*ARABIC7后臺host添加頁面用戶可在次添加設備信息,同時根據(jù)Zabbix的api可將添加的數(shù)據(jù)發(fā)送值Zabbixserver,實現(xiàn)Zabbix對該設備的監(jiān)控。Host添加代碼如下,host的添加選擇了使用Zabbixapi實現(xiàn):/***Createdbylighton2016/2/26.*/publicclassZbxHostServiceImpl{publicstaticIHostServicehostService=newHostServiceImpl();static{//登錄Login.login();}//Type:1-Zbx_agent;2-SNMP;3-IPMI4-JMX.//Port:1-10050;2-161;3-12345;4-632publicstaticCreateDuplicatecreateDuplicate=newCreateDuplicate();Stringresponse;//創(chuàng)立防火墻publicStringcreateHostFw(StringhostName,StringinterfaceIp){response=createDuplicate.createHostEasy(hostName,interfaceIp,"161","10081",2);returnresponse;}//創(chuàng)立主機收集效勞器性能信息:CPU、Memory等publicStringcreateHostHost(StringhostName,StringinterfaceIp){response=createDuplicate.createHostEasy(hostName,interfaceIp,"10050","10081",1);returnresponse;}//創(chuàng)立iis效勞publicStringcreateHostIIS(StringhostName,StringinterfaceIp){response=createDuplicate.createHostEasy(hostName,interfaceIp,"10050","10081",1);returnresponse;}//創(chuàng)立jvmpublicStringcreateHostJava(StringhostName,StringinterfaceIp){response=createDuplicate.createHostEasy(hostName,interfaceIp,"12345","10081",4);returnresponse;}//創(chuàng)立oracle數(shù)據(jù)庫publicStringcreateHostOracle(StringhostName,StringinterfaceIp){response=createDuplicate.createHostEasy(hostName,interfaceIp,"161","10081",2);returnresponse;}//創(chuàng)立ping監(jiān)控changesneededherepublicStringcreateHostPing(StringhostName,StringinterfaceIp){response=createDuplicate.createHostEasy(hostName,interfaceIp,"10050","10081",1);returnresponse;}//創(chuàng)立路由publicStringcreateHostRouter(StringhostName,StringinterfaceIp){response=createDuplicate.createHostEasy(hostName,interfaceIp,"161","10081",2);returnresponse;}//收集效勞器硬件信息:溫度,轉(zhuǎn)速等publicStringcreateHostServer(StringhostName,StringinterfaceIp,StringinterfacePort){response=createDuplicate.createHostEasy(hostName,interfaceIp,interfacePort,"10081",1);returnresponse;}//創(chuàng)立IPMIpublicStringcreateHostServerIPMI(StringhostName,StringinterfaceIp){response=createDuplicate.createHostEasy(hostName,interfaceIp,"623","10081",4);returnresponse;}publicStringcreateHostSqlserver(StringhostName,StringinterfaceIp){response=createDuplicate.createHostEasy(hostName,interfaceIp,"10050","10081",1);returnresponse;}//創(chuàng)立存儲publicStringcreateHostStore(StringhostName,StringinterfaceIp){response=createDuplicate.createHostEasy(hostName,interfaceIp,"10050","10081",1);returnresponse;}//創(chuàng)立交換機WithGrouppublicStringcreateHostSwitchboard(StringhostName,StringinterfaceIp){response=createDuplicate.createHostWithGroup(hostName,interfaceIp,"9","161","10208",2);returnresponse;}//創(chuàng)立tomact效勞publicStringcreateHostTomcat(StringhostName,StringinterfaceIp){response=createDuplicate.createHostEasy(hostName,interfaceIp,"12345","10081",4);returnresponse;}//創(chuàng)立虛擬機publicStringcreateHostVmware(StringhostName,StringinterfaceIp){response=createDuplicate.createHostEasy(hostName,interfaceIp,"10050","10081",1);returnresponse;}publicStringZbxDeleteServer(StringhostId){//數(shù)據(jù)準備HostDeleteRequestdelete=newHostDeleteRequest();delete.getParams().add(hostId);returnhostService.delete(delete);}publicJSONObjectgetHostIdAndName(){HostGetRequesthostGetRequestContent=newHostGetRequest();String[]outputs={"name"};hostGetRequestContent.getParams().setOutput(outputs);//hostGetRequestContent.getParams();returnhostService.get(hostGetRequestContent);}publicJSONObjectgetHostIdAndName(Stringhostid){HostGetRequesthostGetRequestContent=newHostGetRequest();String[]outputs={"name"};String[]hostids={hostid};hostGetRequestContent.getParams().setOutput(outputs);hostGetRequestContent.getParams().setHostids(hostids);returnhostService.get(hostGetRequestContent);}publicstaticclassHostArray{publicstaticArrayList<String>getHostId(){ZbxHostServiceImplzbxHostIds=newZbxHostServiceImpl();JSONObjecthostIdsJsb=zbxHostIds.getHostIdAndName();JSONArrayhostIdsJsa=hostIdsJsb.getJSONArray("result");ArrayList<String>hostIds=newArrayList<String>();for(inti=0;i<hostIdsJsa.length();i++){Objecthostid=hostIdsJsa.getJSONObject(i).get("hostid");hostIds.add(i,String.valueOf(hostid));}returnhostIds;}publicstaticArrayList<String>getHostName(){ZbxHostServiceImplzbxHostNames=newZbxHostServiceImpl();JSONObjecthostNamesJsb=zbxHostNames.getHostIdAndName();JSONArrayhostNameJsa=hostNamesJsb.getJSONArray("result");ArrayList<String>hostNames=newArrayList<String>();for(inti=0;i<hostNameJsa.length();i++){JSONObjectname=hostNameJsa.getJSONObject(i);Objectnames=name.get("name");hostNames.add(i,String.valueOf(names));}returnhostNames;}}}4.系統(tǒng)展示4.1用戶監(jiān)控對象添加用戶添加host完畢后效果如圖〔8〕:圖SEQFigure\*ARABIC8Zabbix監(jiān)控頁面圖〔9〕為測試階段Zabbix的狀態(tài):圖SEQFigure\*ARABIC9Zabbix監(jiān)控狀態(tài)如下圖主機共144個,可用監(jiān)控item3053個,可用trigger1319個。4.2可視化監(jiān)控與專家圖〔10〕Zabbix監(jiān)控對象的狀態(tài):圖SEQFigure\*ARABIC10Zabbix監(jiān)控對象的狀態(tài)如圖可顯示trigger發(fā)出的報警,以及統(tǒng)計數(shù)據(jù)。同時可以直觀的發(fā)現(xiàn)該界面設計并不美觀,與中國用戶的交互也是十分友好,不便于用戶進行相應的決策。為了便于用戶查看并獲得有用的決策信息,二次開發(fā)過程的結(jié)果簡化了監(jiān)控對象的添加,對于Zabbix中復雜的item、與trigger添加,本系統(tǒng)事先根據(jù)效勞器型號設定好模版,用戶選擇效勞器是將自動加載模版實現(xiàn)監(jiān)控,同時對于用戶關心的監(jiān)控報警閾值與報警提醒,系統(tǒng)對此也進行了簡化。圖〔11〕為用戶添加報警信息的頁面:圖SEQFigure\*ARABIC11平臺trigger配置頁面相比于Zabbix中添加trigger時復雜表達式的填寫,在專家系統(tǒng)中用戶可直接選擇監(jiān)控對象,并根據(jù)提示信息完成對閾值的填寫,實現(xiàn)了告警規(guī)那么簡單明了的配置。Trigger后臺配置代碼如下:@RepositorypublicclassZbxTriggerRepository{@AutowiredJdbcTemplatejdbc;@TargetDataSource(name="zabbix")publicvoidupdTrigger(StringitemKeyToSearch,StringthresholdNew){//得到字段itemid,hostid,item_name,item_key,triggerid,expressionStringtriggerSql;if(itemKeyToSearch.equals("memoryusageisnotenough")){triggerSql="SELECTi.itemid,i.hostid,,i.key_,fun.triggerid,trg.expression\n"+"FROMitemsasi,hosts_templatesasht,functionsasfun,triggersastrg\n"+"wherei.hostid=ht.hostid\n"+"andtrg.description='"+itemKeyToSearch+"'\n"+"andi.itemid=fun.itemid\n"+"andtrg.triggerid=fun.triggerid\n"+"andht.hostid>10084;";}else{triggerSql="SELECTi.itemid,i.hostid,,i.key_,fun.triggerid,trg.expression\n"+"FROMitemsasi,hosts_templatesasht,functionsasfun,triggersastrg\n"+"wherei.hostid=ht.hostid\n"+"andi.key_='"+itemKeyToSearch+"'\n"+"andi.itemid=fun.itemid\n"+"andtrg.triggerid=fun.triggerid\n"+"andht.hostid>10084;";}List<Map<String,Object>>list=jdbc.queryForList(triggerSql);Stringexpression=list.get(1).get("expression").toString();//因為是一個模版出來的,所有操作符都一樣inta=expression.lastIndexOf("}");Stringoperator=expression.substring(a+1,a+2);//得到運算符List<String>str=newArrayList<>();for(Map<String,Object>map:list){StringexpressionOld=map.get("expression").toString();StringthresholdOld=expressionOld.substring(a+2,expressionOld.length());StringexpressionNew=expressionOld.replace(operator+thresholdOld,operator+thresholdNew);map.put("expression",expressionNew);Stringtriggerid=map.get("triggerid").toString();StringupdTriggers="updatetriggerssetexpression='"+expressionNew+"'wheretriggerid="+triggerid+";\n";str.add(updTriggers);//jdbc.update(updTriggers);}String[]sql=str.toArray(newString[str.size()]);jdbc.batchUpdate(sql);}}4.3決策分析本系統(tǒng)對Zabbix的決策功能進行了大面積二次開發(fā)與包裝,Zabbix系統(tǒng)中的信息可視化頁面相對簡陋,如圖〔12〕:圖SEQFigure\*ARABIC12Zabbix圖標頁面Zabbix中不便于同時查看多個圖表,二次開發(fā)中對圖表也進行了優(yōu)化,圖〔13〕為二次開發(fā)的數(shù)據(jù)監(jiān)控頁面:圖SEQFigure\*ARABIC13數(shù)據(jù)展示圖從二次開發(fā)的圖中用戶可以更加方便地獲取所需的信息,并且同時監(jiān)控到多個監(jiān)控要素。如果某項監(jiān)控要素出現(xiàn)問題,專家系統(tǒng)將第一時間用短信通知用戶,短信截圖如圖〔14〕:圖14報警短信發(fā)送用戶根據(jù)短信信息可準確定位問題所在,便與應對決策。短信功能的實現(xiàn)代碼如下:import;import;import;import;import;import;import;import;import;import;/***Createdbylighton2016/4/14.*/@RepositorypublicclassPhoneMessage{@AutowiredJdbcTemplatejdbcTemplate;@TargetDataSource(name="predict")publicStringsendMessage(Stringhostid){//result中Arraysize為2ZbxTriggerServiceImpltrigger=newZbxTriggerServiceImpl();JSONObjecttriggerRs=trigger.getTriggerForSms(hostid);JSONArrayresult=triggerRs.getJSONArray("result");//結(jié)果信息Stringcontent=null;if(!result.toString().equals("[]")){Stringdescription=result.getJSONObject(0).getString("description");Stringpriority=result.getJSONObject(0).getString("priority");StringselectSqlName="SELECThostsFROMpredict.zbx_hostswherehost_id='"+hostid+"';";StringselectSqlDesc="SELECTdesc_zhFROMpredict.alarm_descriptionwheredesc_en='"+description+"';";StringsqlType="SELECTSMS_nameFROMzbx_hosts_smswherehost_id='"+hostid+"';";List<Map<String,Object>>listName=newArrayList<Map<String,Object>>();listName=jdbcTemplate.queryForList(selectSqlName);Stringname=listName.get(0).get("hosts").toString();List<Map<String,Object>>listDesc=newArrayList<Map<String,Object>>();

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論