版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、服務器管理、監(jiān)控系統(tǒng)摘要:現(xiàn)今互聯(lián)網(wǎng)行業(yè)發(fā)展迅速,底層支撐互聯(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.2 Zabbix用戶配置63. 監(jiān)控建立與二次開發(fā)84. 系統(tǒng)展示104.1用戶監(jiān)控對象添加105.總
2、結14參考文獻:151. 引言隨著現(xiàn)今互聯(lián)網(wǎng)行業(yè)的迅速發(fā)展,某些物聯(lián)網(wǎng)服務的用戶已經(jīng)達到了億級,如淘寶網(wǎng)注冊用戶已達到3.7億,僅在2015年“雙十一”當天活躍用戶過億1。支撐如此龐大用戶使用的硬件基礎是規(guī)模龐大的服務器群。如何獲取每一臺服務器的運行狀態(tài),及時獲悉潛在隱患,出現(xiàn)問題及時鎖定排除顯得至關重要。機房運維人員以及高層決策人員只有在實時掌握這些信息后才可有效地對進行決策,如在訪問流量過大或其他惡意攻擊后是及時關閉服務還是啟動備用服務,服務區(qū)癱瘓后是需要工作人員至機房處理硬件問題還是只需遠程重啟服務器等類似或簡單或復雜的決策,都需要底層專家系統(tǒng)信息的支持。現(xiàn)今比較成熟的開源服務器底層數(shù)據(jù)
3、的采集解決方案主要有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、HTTP、NNTP、PING等);2、監(jiān)控主機資源(處理器負荷、磁盤利用率等);3、簡單地插件設計使得用戶可以方便地擴展自己服務的檢測方法;4、并行服務檢查機制;5、具備定義網(wǎng)絡分層結構的能力,用"pa
4、rent"主機定義來表達網(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)控信息;2012、可指定自定義的事件處理控制器3。其他一些大型企業(yè)也有自己獨立開發(fā)的服務器監(jiān)控服務,如小米運維部的人性化互聯(lián)網(wǎng)企業(yè)級監(jiān)控系統(tǒng)Open-Falcon、淘寶運維
5、部使用 OpenTSDB等,它們也有各自的優(yōu)點。本文第一章概述了服務器機房的專家,以及可提供這些服務的一些解決方案等;第二章介紹Zabbix所提供的監(jiān)控原理即使用;第三章介紹Zabbix的實際監(jiān)控應用以及二次開發(fā);第四章進行專家的分析;第五章對服務器機房專家系統(tǒng)進行總結。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ù),判斷
6、異常等,并通過提供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、內存使用、進程線程數(shù)等;同時可利用其他應用提供的端口實現(xiàn)對應用服務的監(jiān)控,如MySQL數(shù)據(jù)庫等。(2)、IPMI-agent,根據(jù)IPMI(Intelligent Platform Management Interface)接口實現(xiàn)對服務器等硬件設備的監(jiān)控,監(jiān)控對象
7、包括CPU運行溫度、風扇轉速、環(huán)境溫度等硬件信息的監(jiān)控;(3)SNMP-agent,根據(jù)SNMP(Simple Network Management Protocol)協(xié)議實現(xiàn)對交換機、路由器等網(wǎng)絡設備的監(jiān)控。監(jiān)控對象包括各端口運行狀態(tài)、流入流出流量等。(4)JMX-agent,根具JMX(Java Management Extensions)提供的接口實現(xiàn)對Java類應用的監(jiān)控。監(jiān)控對象包括Java虛擬機、Tomcat服務,Hadoop、Spark等分布式服務的監(jiān)控等。當agent得到數(shù)據(jù)并發(fā)送給server后,server端將數(shù)組存放在位于服務端的數(shù)據(jù)庫,然后前端服務調用數(shù)據(jù)庫數(shù)據(jù)并將其可
8、視化顯示。顯示給用戶的只有browser頁面,用戶在前端進行服務器管理并據(jù)此進行相應決策。圖(1)表示了Zabbix 的監(jiān)控原理。圖1 Zabbix監(jiān)控原理圖Zabbix 的agent將數(shù)據(jù)發(fā)送給server并儲存在數(shù)據(jù)庫中,前端頁面調用數(shù)據(jù)庫中的數(shù)據(jù)與用戶交互。2.2Zabbix用戶配置Zabbix server處理數(shù)據(jù)時為了便于用戶操作按圖(2)的方式處理、集成監(jiān)控數(shù)據(jù)。圖2數(shù)據(jù)處理、集成圖其中host為用戶監(jiān)控的主機、設備或操作系統(tǒng)等;item為實際的監(jiān)控個體,可能是某一個CPU的使用率,磁盤讀寫速度等,一個host上可能存在若干item;每一個item都可設定對應的trigger,根據(jù)
9、閾值判斷還item的使用情況是否達到報警值。Trigger發(fā)現(xiàn)報警后將會在主界面顯示,也可都過短信、郵件、微信等向用戶發(fā)送報警信息,并連接后續(xù)修復操作。因此用戶在實際使用時主要需配置host,item和trigger,分別如圖(3)、圖(4)、圖(5)所示。圖3 Host配置圖用戶配置監(jiān)控方式即監(jiān)控對象,包括監(jiān)控Host配置圖對象的名稱、所在群組、監(jiān)控方式、IP地址等。圖4 item配置圖用戶根據(jù)不同的監(jiān)控類型配置監(jiān)控的具體個體,可設置監(jiān)控元素、監(jiān)控周期、數(shù)據(jù)保存時限等。 圖5 trigger配置圖Trigger配置報警信息,其中Expression為表達式判斷item的使用情況。如圖所示為空
10、閑內存與全部內存的比值,但可用內存的使用率小于20%時,將產(chǎn)生報警,警報級別為高。除了上述3種配置外,用戶還可通過配置graph、map、screen等,分別配置數(shù)據(jù)展示圖,host關系圖、監(jiān)控大屏等。3. 監(jiān)控建立與二次開發(fā)本監(jiān)控與專家系統(tǒng)根據(jù)東海分局預報中心需要,利用Zabbix監(jiān)控體系并結合Java web技術二次開發(fā)建立,為整個預報中心提高機房管理、監(jiān)控專家服務。3.1 搭建環(huán)境本系統(tǒng)選擇Ubuntu server 作為Zabbix server所在服務器,上文四種監(jiān)控agent部署與客戶端采集數(shù)據(jù);數(shù)據(jù)庫選擇MySQL server;網(wǎng)頁服務選擇apache開源服務;同時利用spri
11、ng boot 框架進行java web開發(fā),整合Zabbix的api,并直接處理Zabbix數(shù)據(jù)庫,在交互更良好的頁面實現(xiàn)管理與決策。3.2 Zabbix server建立根據(jù)Zabbix的監(jiān)控原理,server的搭建主要包括數(shù)據(jù)庫的建立,apache web服務的建立,Zabbix server的建立等,另外Zabbix server只能搭建在Linux系統(tǒng)中。本系統(tǒng)中Zabbix server的安裝都選擇Ubuntu系統(tǒng)下的編譯安裝,具體建立流程不在贅述,詳情參見Zabbix用戶手冊5。3.3 二次開發(fā)Zabbix 原始界面為英文界面,中文翻譯的界面十分生硬,不便于中國用戶使用。本系統(tǒng)對
12、Zabbix進行了二次開發(fā),在Zabbix上用封裝了一層用戶管理系統(tǒng)。本系統(tǒng)使用Java web技術,結合Zabbix api操作Zabbix數(shù)據(jù),同時根據(jù)用戶需要添加了針對性的服務。系統(tǒng)界面如圖6:圖6平臺界面如圖所示,用戶可添加硬件、中間件、操作系統(tǒng)等類型的host。圖(7)為用戶添加host的界面:圖7后臺host添加頁面用戶可在次添加設備信息,同時根據(jù)Zabbix的api可將添加的數(shù)據(jù)發(fā)送值Zabbix server,實現(xiàn)Zabbix對該設備的監(jiān)控。Host添加代碼如下,host的添加選擇了使用Zabbix api實現(xiàn):/* * Created by light on 2016/2/2
13、6. */public class ZbxHostServiceImpl public static IHostService hostService = new HostServiceImpl(); static / 登錄 Login.login(); / Type: 1 - Zbx_agent; 2 - SNMP; 3 - IPMI 4 - JMX. / Port: 1 - 10050; 2 - 161; 3 - 12345; 4 - 632 public static CreateDuplicate createDuplicate = new CreateDuplicate(); Str
14、ing response; /創(chuàng)建防火墻 public String createHostFw(String hostName,String interfaceIp) response= createDuplicate.createHostEasy(hostName,interfaceIp,"161","10081",2); return response; / 創(chuàng)建主機 收集服務器性能信息:CPU、Memory等 public String createHostHost(String hostName,String interfaceIp) respo
15、nse= createDuplicate.createHostEasy(hostName,interfaceIp,"10050","10081",1); return response; /創(chuàng)建iis 服務 public String createHostIIS(String hostName,String interfaceIp) response= createDuplicate.createHostEasy(hostName,interfaceIp,"10050","10081",1); return res
16、ponse; /創(chuàng)建jvm public String createHostJava(String hostName,String interfaceIp) response= createDuplicate.createHostEasy(hostName,interfaceIp,"12345","10081",4); return response; /創(chuàng)建 oracle 數(shù)據(jù)庫 public String createHostOracle(String hostName,String interfaceIp) response= createDupl
17、icate.createHostEasy(hostName,interfaceIp,"161","10081",2); return response; / 創(chuàng)建 ping 監(jiān)控 changes needed here public String createHostPing(String hostName,String interfaceIp) response= createDuplicate.createHostEasy(hostName,interfaceIp,"10050","10081",1); ret
18、urn response; /創(chuàng)建路由 public String createHostRouter(String hostName,String interfaceIp) response= createDuplicate.createHostEasy(hostName,interfaceIp,"161","10081",2); return response; / 收集服務器硬件信息:溫度,轉速等 public String createHostServer(String hostName,String interfaceIp,String inte
19、rfacePort) response= createDuplicate.createHostEasy(hostName,interfaceIp,interfacePort,"10081",1); return response; /創(chuàng)建IPMI public String createHostServerIPMI(String hostName,String interfaceIp) response= createDuplicate.createHostEasy(hostName,interfaceIp,"623","10081"
20、,4); return response; public String createHostSqlserver(String hostName,String interfaceIp) response= createDuplicate.createHostEasy(hostName,interfaceIp,"10050","10081",1); return response; /創(chuàng)建存儲 public String createHostStore(String hostName,String interfaceIp) response= createD
21、uplicate.createHostEasy(hostName,interfaceIp,"10050","10081",1); return response; /創(chuàng)建交換機 With Group public String createHostSwitchboard(String hostName,String interfaceIp) response= createDuplicate.createHostWithGroup(hostName, interfaceIp, "9","161","102
22、08",2); return response; /創(chuàng)建tomact服務 public String createHostTomcat(String hostName,String interfaceIp) response= createDuplicate.createHostEasy(hostName,interfaceIp,"12345","10081",4); return response; / 創(chuàng)建虛擬機 public String createHostVmware(String hostName,String interfaceI
23、p) response= createDuplicate.createHostEasy(hostName,interfaceIp,"10050","10081",1); return response; public String ZbxDeleteServer(String hostId) / 數(shù)據(jù)準備 HostDeleteRequest delete = new HostDeleteRequest(); delete.getParams().add(hostId); return hostService.delete(delete); public
24、JSONObject getHostIdAndName() HostGetRequest hostGetRequestContent = new HostGetRequest(); String outputs = "name" hostGetRequestContent.getParams().setOutput(outputs);/ hostGetRequestContent.getParams(); return hostService.get(hostGetRequestContent); public JSONObject getHostIdAndName(Str
25、ing hostid) HostGetRequest hostGetRequestContent = new HostGetRequest(); String outputs = "name" String hostids = hostid ; hostGetRequestContent.getParams().setOutput(outputs); hostGetRequestContent.getParams().setHostids(hostids); return hostService.get(hostGetRequestContent); public stat
26、ic class HostArray public static ArrayList<String> getHostId() ZbxHostServiceImpl zbxHostIds = new ZbxHostServiceImpl(); JSONObject hostIdsJsb = zbxHostIds.getHostIdAndName(); JSONArray hostIdsJsa = hostIdsJsb.getJSONArray("result"); ArrayList<String> hostIds = new ArrayList<
27、;String>(); for(int i=0;i<hostIdsJsa.length();i+) Object hostid = hostIdsJsa.getJSONObject(i).get("hostid"); hostIds.add(i,String.valueOf(hostid); return hostIds; public static ArrayList<String> getHostName() ZbxHostServiceImpl zbxHostNames = new ZbxHostServiceImpl(); JSONObjec
28、t hostNamesJsb = zbxHostNames.getHostIdAndName(); JSONArray hostNameJsa = hostNamesJsb.getJSONArray("result"); ArrayList<String> hostNames = new ArrayList<String>(); for(int i=0;i<hostNameJsa.length();i+) JSONObject name = hostNameJsa.getJSONObject(i); Object names = name.ge
29、t("name"); hostNames.add(i,String.valueOf(names); return hostNames; 4. 系統(tǒng)展示4.1 用戶監(jiān)控對象添加用戶添加host完畢后效果如圖(8):圖 8 Zabbix監(jiān)控頁面圖(9)為測試階段Zabbix的狀態(tài):圖9 Zabbix監(jiān)控狀態(tài)如圖所示主機共144個,可用監(jiān)控item 3053個,可用trigger 1319個。4.2 可視化監(jiān)控與專家圖(10)Zabbix監(jiān)控對象的狀態(tài):圖 10 Zabbix監(jiān)控對象的狀態(tài)如圖可顯示trigger發(fā)出的報警,以及統(tǒng)計數(shù)據(jù)。同時可以直觀的發(fā)現(xiàn)該界面設計并不美觀,與中
30、國用戶的交互也是十分友好,不便于用戶進行相應的決策。為了便于用戶查看并獲得有用的決策信息,二次開發(fā)過程的結果簡化了監(jiān)控對象的添加,對于Zabbix中復雜的item、與trigger添加,本系統(tǒng)事先根據(jù)服務器型號設定好模版,用戶選擇服務器是將自動加載模版實現(xiàn)監(jiān)控,同時對于用戶關心的監(jiān)控報警閾值與報警提醒,系統(tǒng)對此也進行了簡化。圖(11)為用戶添加報警信息的頁面:圖 11平臺trigger配置頁面相比于Zabbix中添加trigger時復雜表達式的填寫,在專家系統(tǒng)中用戶可直接選擇監(jiān)控對象,并根據(jù)提示信息完成對閾值的填寫,實現(xiàn)了告警規(guī)則簡單明了的配置。Trigger后臺配置代碼如下:Reposito
31、rypublic class ZbxTriggerRepository Autowired JdbcTemplate jdbc; TargetDataSource(name = "zabbix") public void updTrigger(String itemKeyToSearch,String thresholdNew) / 得到字段itemid,hostid,item_name,item_key,triggerid,expression String triggerSql; if(itemKeyToSearch.equals("memory usage
32、is not enough") triggerSql = "SELECT i.itemid,i.hostid,,i.key_,fun.triggerid,trg.expressionn" + "FROM items as i,hosts_templates as ht,functions as fun,triggers as trgn" + "where i.hostid = ht.hostid n" + "and trg.description = '"+itemKeyToSearc
33、h+"'n" + "and i.itemid = fun.itemidn" + "and trg.triggerid = fun.triggeridn" + "and ht.hostid>10084;" else triggerSql = "SELECT i.itemid,i.hostid,,i.key_,fun.triggerid,trg.expressionn" + "FROM items as i,hosts_templates as ht,functi
34、ons as fun,triggers as trgn" + "where i.hostid = ht.hostid n" + "and i.key_ = '"+itemKeyToSearch+"'n" + "and i.itemid = fun.itemidn" + "and trg.triggerid = fun.triggeridn" + "and ht.hostid>10084;" List<Map<String,Objec
35、t>> list = jdbc.queryForList(triggerSql); String expression = list.get(1).get("expression").toString(); / 因為是一個模版出來的,所有操作符都一樣 int a = expression.lastIndexOf(""); String operator = expression.substring(a+1,a+2); /得到運算符 List<String> str = new ArrayList<>(); for(Ma
36、p<String,Object> map : list) String expressionOld = map.get("expression").toString(); String thresholdOld = expressionOld.substring(a+2,expressionOld.length(); String expressionNew = expressionOld.replace(operator+thresholdOld,operator + thresholdNew); map.put("expression",
37、expressionNew); String triggerid = map.get("triggerid").toString(); String updTriggers = "update triggers set expression = '"+ expressionNew + "' where triggerid =" + triggerid + "n" str.add(updTriggers);/ jdbc.update(updTriggers); String sql = str.toA
38、rray(new Stringstr.size(); jdbc.batchUpdate(sql); 4.3 決策分析本系統(tǒng)對Zabbix的決策功能進行了大面積二次開發(fā)與包裝,Zabbix系統(tǒng)中的信息可視化頁面相對簡陋,如圖(12):圖12 Zabbix圖標頁面Zabbix中不便于同時查看多個圖表,二次開發(fā)中對圖表也進行了優(yōu)化,圖(13)為二次開發(fā)的數(shù)據(jù)監(jiān)控頁面:圖13數(shù)據(jù)展示圖從二次開發(fā)的圖中用戶可以更加方便地獲取所需的信息,并且同時監(jiān)控到多個監(jiān)控要素。如果某項監(jiān)控要素出現(xiàn)問題,專家系統(tǒng)將第一時間用短信通知用戶,短信截圖如圖(14):圖14報警短信發(fā)送用戶根據(jù)短信信息可準確定位問題所在,便與應
39、對決策。短信功能的實現(xiàn)代碼如下:import .shou.monitor.service.impl.ZbxTriggerServiceImpl;import .shou.monitor.spring.TargetDataSource;import org.json.JSONArray;import org.json.JSONObject;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.jdbc.core.JdbcTemplate;import
40、 org.springframework.stereotype.Repository;import java.util.ArrayList;import java.util.List;import java.util.Map;/* * Created by light on 2016/4/14. */Repositorypublic class PhoneMessage Autowired JdbcTemplate jdbcTemplate; TargetDataSource(name = "predict") public String sendMessage(Strin
41、g hostid) / result 中Array size 為2 ZbxTriggerServiceImpl trigger = new ZbxTriggerServiceImpl(); JSONObject triggerRs = trigger.getTriggerForSms(hostid); JSONArray result = triggerRs.getJSONArray("result"); /結果信息 String content = null; if(!result.toString().equals("") String descri
42、ption = result.getJSONObject(0).getString("description"); String priority = result.getJSONObject(0).getString("priority"); String selectSqlName = "SELECT hosts FROM predict.zbx_hosts where host_id = '"+ hostid+"'" String selectSqlDesc = "SELECT de
43、sc_zh FROM predict.alarm_description where desc_en = '"+ description+"'" String sqlType = "SELECT SMS_name FROM zbx_hosts_sms where host_id = '"+ hostid+"'" List<Map<String,Object>> listName = new ArrayList<Map<String,Object>>(); listName = jdbcTemplate.queryForList(selectSqlName); String nam
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年中國多功能精密電子天平市場調查研究報告
- 上海工會管理職業(yè)學院《社會性別視野下的中國近代史》2023-2024學年第一學期期末試卷
- 工程測量員中級試題庫含答案
- 氣管異物的護理查房
- 戶外寫生體系課程設計
- 少兒面塑培訓課程設計
- 帳篷戶外課程設計
- 青少年心理健康:衛(wèi)生與社會服務部門的協(xié)調機制
- 手術室各種管道護理
- 電商考試題庫
- 慢性腎臟病臨床診療指南
- 設計與規(guī)劃的城市更新
- 網(wǎng)絡運行以及維護
- 土木工程材料-說課
- 人教版道德與法治小學四年級上冊知識點匯總
- 110KV高壓線路檢修方案
- 消防救援-水域救援-冰域救援技術課件
- 課程設計列車變頻空挪用直流電源系統(tǒng)的設計
- 全貼合OGS,G,GFF等介紹
- 小學校本課程-【海洋教育】尋覓沉睡的寶船教學設計學情分析教材分析課后反思
- 外科換藥操作評分標準
評論
0/150
提交評論