




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、服務器管理、監控系統摘要:現今互聯網行業發展迅速,底層支撐互聯網服務的服務器等各種硬件設備規模越來龐大。如何管理有效地管理這些設備、實時發現其潛在的隱患、獲取其運行的狀態,而顯得至關重要。根據這些信息才能合理地決定設備上所運行系統、應用等服務的關閉與保留與掛起。本文介紹了利用Zabbix開源監控解決方案,以及對該方案的二次開發而實現對服務器機房的專家系統。關鍵字:機房運維 服務器監控 Zabbix 目錄摘要21. 引言42. Zabbix 監控原理與應用52.1. Zabbix 監控原理52.2 Zabbix用戶配置63. 監控建立與二次開發84. 系統展示104.1用戶監控對象添加105.總
2、結14參考文獻:151. 引言隨著現今互聯網行業的迅速發展,某些物聯網服務的用戶已經達到了億級,如淘寶網注冊用戶已達到3.7億,僅在2015年“雙十一”當天活躍用戶過億1。支撐如此龐大用戶使用的硬件基礎是規模龐大的服務器群。如何獲取每一臺服務器的運行狀態,及時獲悉潛在隱患,出現問題及時鎖定排除顯得至關重要。機房運維人員以及高層決策人員只有在實時掌握這些信息后才可有效地對進行決策,如在訪問流量過大或其他惡意攻擊后是及時關閉服務還是啟動備用服務,服務區癱瘓后是需要工作人員至機房處理硬件問題還是只需遠程重啟服務器等類似或簡單或復雜的決策,都需要底層專家系統信息的支持。現今比較成熟的開源服務器底層數據
3、的采集解決方案主要有Zabbix和Nagios。Nagios是一個監視系統運行狀態和網絡信息的監視系統,能監視所指定的本地或遠程主機以及服務,同時提供異常通知功能等2。Nagios可運行在Linux/Unix平臺之上,同時提供一個可選的基于瀏覽器的Web界面以方便系統管理人員查看網絡狀態,各種系統問題,以及日志等等。Nagios 可以監控的功能有:1、監控網絡服務(SMTP、POP3、HTTP、NNTP、PING等);2、監控主機資源(處理器負荷、磁盤利用率等);3、簡單地插件設計使得用戶可以方便地擴展自己服務的檢測方法;4、并行服務檢查機制;5、具備定義網絡分層結構的能力,用"pa
4、rent"主機定義來表達網絡主機間的關系,這種關系可被用來發現和明晰主機宕機或不可達狀態;6、當服務或主機問題產生與解決時將告警發送給聯系人(通過EMail、短信、用戶定義方式);7、可以定義一些處理程序,使之能夠在服務或者主機發生故障時起到預防作用;8、自動的日志滾動功能;9、可以支持并實現對主機的冗余監控;10、可選的WEB界面用于查看當前的網絡狀態、通知和故障歷史、日志文件等2; 11、可以通過手機查看系統監控信息;12、可指定自定義的事件處理控制器3。其他一些大型企業也有自己獨立開發的服務器監控服務,如小米運維部的人性化互聯網企業級監控系統Open-Falcon、淘寶運維部使
5、用 OpenTSDB等,它們也有各自的優點。本文第一章概述了服務器機房的專家,以及可提供這些服務的一些解決方案等;第二章介紹Zabbix所提供的監控原理即使用;第三章介紹Zabbix的實際監控應用以及二次開發;第四章進行專家的分析;第五章對服務器機房專家系統進行總結。2. Zabbix 監控原理與應用Zabbix是一個B/S模式的企業級的監控服務解決方案,用戶可以此獲取服務器等硬件、操作系統、中間件等的運行狀態,為應用層的決策提供決策信息。2.1Zabbix 監控原理Zabbix由agent和server組成,其中agent負責采集服務器等監控對象的數據,server負責處理這些數據,判斷異常
6、等,并通過提供apache服務在web端實現對數據的可視化展示。其中agent的類型主要監控對象包括:(1)Zabbix-agent,根據Zabbix監控方式實現對操作系統層級的信息采集,實現對系統的監控。Zabbix-agent 有sender和get兩部分組成,分別通過命令來采集數據4。監控對象有CPU運行狀態、磁盤I/O、內存使用、進程線程數等;同時可利用其他應用提供的端口實現對應用服務的監控,如MySQL數據庫等。(2)、IPMI-agent,根據IPMI(Intelligent Platform Management Interface)接口實現對服務器等硬件設備的監控,監控對象包括
7、CPU運行溫度、風扇轉速、環境溫度等硬件信息的監控;(3)SNMP-agent,根據SNMP(Simple Network Management Protocol)協議實現對交換機、路由器等網絡設備的監控。監控對象包括各端口運行狀態、流入流出流量等。(4)JMX-agent,根具JMX(Java Management Extensions)提供的接口實現對Java類應用的監控。監控對象包括Java虛擬機、Tomcat服務,Hadoop、Spark等分布式服務的監控等。當agent得到數據并發送給server后,server端將數組存放在位于服務端的數據庫,然后前端服務調用數據庫數據并將其可視化
8、顯示。顯示給用戶的只有browser頁面,用戶在前端進行服務器管理并據此進行相應決策。圖(1)表示了Zabbix 的監控原理。圖1 Zabbix監控原理圖Zabbix 的agent將數據發送給server并儲存在數據庫中,前端頁面調用數據庫中的數據與用戶交互。2.2Zabbix用戶配置Zabbix server處理數據時為了便于用戶操作按圖(2)的方式處理、集成監控數據。圖2數據處理、集成圖其中host為用戶監控的主機、設備或操作系統等;item為實際的監控個體,可能是某一個CPU的使用率,磁盤讀寫速度等,一個host上可能存在若干item;每一個item都可設定對應的trigger,根據閾值
9、判斷還item的使用情況是否達到報警值。Trigger發現報警后將會在主界面顯示,也可都過短信、郵件、微信等向用戶發送報警信息,并連接后續修復操作。因此用戶在實際使用時主要需配置host,item和trigger,分別如圖(3)、圖(4)、圖(5)所示。圖3 Host配置圖用戶配置監控方式即監控對象,包括監控Host配置圖對象的名稱、所在群組、監控方式、IP地址等。圖4 item配置圖用戶根據不同的監控類型配置監控的具體個體,可設置監控元素、監控周期、數據保存時限等。 圖5 trigger配置圖Trigger配置報警信息,其中Expression為表達式判斷item的使用情況。如圖所示為空閑內
10、存與全部內存的比值,但可用內存的使用率小于20%時,將產生報警,警報級別為高。除了上述3種配置外,用戶還可通過配置graph、map、screen等,分別配置數據展示圖,host關系圖、監控大屏等。3. 監控建立與二次開發本監控與專家系統根據東海分局預報中心需要,利用Zabbix監控體系并結合Java web技術二次開發建立,為整個預報中心提高機房管理、監控專家服務。3.1 搭建環境本系統選擇Ubuntu server 作為Zabbix server所在服務器,上文四種監控agent部署與客戶端采集數據;數據庫選擇MySQL server;網頁服務選擇apache開源服務;同時利用spring
11、 boot 框架進行java web開發,整合Zabbix的api,并直接處理Zabbix數據庫,在交互更良好的頁面實現管理與決策。3.2 Zabbix server建立根據Zabbix的監控原理,server的搭建主要包括數據庫的建立,apache web服務的建立,Zabbix server的建立等,另外Zabbix server只能搭建在Linux系統中。本系統中Zabbix server的安裝都選擇Ubuntu系統下的編譯安裝,具體建立流程不在贅述,詳情參見Zabbix用戶手冊5。3.3 二次開發Zabbix 原始界面為英文界面,中文翻譯的界面十分生硬,不便于中國用戶使用。本系統對Za
12、bbix進行了二次開發,在Zabbix上用封裝了一層用戶管理系統。本系統使用Java web技術,結合Zabbix api操作Zabbix數據,同時根據用戶需要添加了針對性的服務。系統界面如圖6:圖6平臺界面如圖所示,用戶可添加硬件、中間件、操作系統等類型的host。圖(7)為用戶添加host的界面:圖7后臺host添加頁面用戶可在次添加設備信息,同時根據Zabbix的api可將添加的數據發送值Zabbix server,實現Zabbix對該設備的監控。Host添加代碼如下,host的添加選擇了使用Zabbix api實現:/* * Created by light on 2016/2/26.
13、 */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(); Strin
14、g response; /創建防火墻 public String createHostFw(String hostName,String interfaceIp) response= createDuplicate.createHostEasy(hostName,interfaceIp,"161","10081",2); return response; / 創建主機 收集服務器性能信息:CPU、Memory等 public String createHostHost(String hostName,String interfaceIp) respons
15、e= createDuplicate.createHostEasy(hostName,interfaceIp,"10050","10081",1); return response; /創建iis 服務 public String createHostIIS(String hostName,String interfaceIp) response= createDuplicate.createHostEasy(hostName,interfaceIp,"10050","10081",1); return respo
16、nse; /創建jvm public String createHostJava(String hostName,String interfaceIp) response= createDuplicate.createHostEasy(hostName,interfaceIp,"12345","10081",4); return response; /創建 oracle 數據庫 public String createHostOracle(String hostName,String interfaceIp) response= createDuplic
17、ate.createHostEasy(hostName,interfaceIp,"161","10081",2); return response; / 創建 ping 監控 changes needed here public String createHostPing(String hostName,String interfaceIp) response= createDuplicate.createHostEasy(hostName,interfaceIp,"10050","10081",1); retur
18、n response; /創建路由 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 interf
19、acePort) response= createDuplicate.createHostEasy(hostName,interfaceIp,interfacePort,"10081",1); return response; /創建IPMI public String createHostServerIPMI(String hostName,String interfaceIp) response= createDuplicate.createHostEasy(hostName,interfaceIp,"623","10081",4
20、); return response; public String createHostSqlserver(String hostName,String interfaceIp) response= createDuplicate.createHostEasy(hostName,interfaceIp,"10050","10081",1); return response; /創建存儲 public String createHostStore(String hostName,String interfaceIp) response= createDup
21、licate.createHostEasy(hostName,interfaceIp,"10050","10081",1); return response; /創建交換機 With Group public String createHostSwitchboard(String hostName,String interfaceIp) response= createDuplicate.createHostWithGroup(hostName, interfaceIp, "9","161","10208
22、",2); return response; /創建tomact服務 public String createHostTomcat(String hostName,String interfaceIp) response= createDuplicate.createHostEasy(hostName,interfaceIp,"12345","10081",4); return response; / 創建虛擬機 public String createHostVmware(String hostName,String interfaceIp)
23、 response= createDuplicate.createHostEasy(hostName,interfaceIp,"10050","10081",1); return response; public String ZbxDeleteServer(String hostId) / 數據準備 HostDeleteRequest delete = new HostDeleteRequest(); delete.getParams().add(hostId); return hostService.delete(delete); public JS
24、ONObject getHostIdAndName() HostGetRequest hostGetRequestContent = new HostGetRequest(); String outputs = "name" hostGetRequestContent.getParams().setOutput(outputs);/ hostGetRequestContent.getParams(); return hostService.get(hostGetRequestContent); public JSONObject getHostIdAndName(Strin
25、g hostid) HostGetRequest hostGetRequestContent = new HostGetRequest(); String outputs = "name" String hostids = hostid ; hostGetRequestContent.getParams().setOutput(outputs); hostGetRequestContent.getParams().setHostids(hostids); return hostService.get(hostGetRequestContent); public static
26、 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<S
27、tring>(); 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(); JSONObject
28、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.get(
29、"name"); hostNames.add(i,String.valueOf(names); return hostNames; 4. 系統展示4.1 用戶監控對象添加用戶添加host完畢后效果如圖(8):圖 8 Zabbix監控頁面圖(9)為測試階段Zabbix的狀態:圖9 Zabbix監控狀態如圖所示主機共144個,可用監控item 3053個,可用trigger 1319個。4.2 可視化監控與專家圖(10)Zabbix監控對象的狀態:圖 10 Zabbix監控對象的狀態如圖可顯示trigger發出的報警,以及統計數據。同時可以直觀的發現該界面設計并不美觀,與中國用
30、戶的交互也是十分友好,不便于用戶進行相應的決策。為了便于用戶查看并獲得有用的決策信息,二次開發過程的結果簡化了監控對象的添加,對于Zabbix中復雜的item、與trigger添加,本系統事先根據服務器型號設定好模版,用戶選擇服務器是將自動加載模版實現監控,同時對于用戶關心的監控報警閾值與報警提醒,系統對此也進行了簡化。圖(11)為用戶添加報警信息的頁面:圖 11平臺trigger配置頁面相比于Zabbix中添加trigger時復雜表達式的填寫,在專家系統中用戶可直接選擇監控對象,并根據提示信息完成對閾值的填寫,實現了告警規則簡單明了的配置。Trigger后臺配置代碼如下:Repository
31、public 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 is
32、 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 = '"+itemKeyToSearch+
33、"'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,function
34、s 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,Object&
35、gt;> 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(Map&
36、lt;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",ex
37、pressionNew); 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.toArr
38、ay(new Stringstr.size(); jdbc.batchUpdate(sql); 4.3 決策分析本系統對Zabbix的決策功能進行了大面積二次開發與包裝,Zabbix系統中的信息可視化頁面相對簡陋,如圖(12):圖12 Zabbix圖標頁面Zabbix中不便于同時查看多個圖表,二次開發中對圖表也進行了優化,圖(13)為二次開發的數據監控頁面:圖13數據展示圖從二次開發的圖中用戶可以更加方便地獲取所需的信息,并且同時監控到多個監控要素。如果某項監控要素出現問題,專家系統將第一時間用短信通知用戶,短信截圖如圖(14):圖14報警短信發送用戶根據短信信息可準確定位問題所在,便與應對決
39、策。短信功能的實現代碼如下:import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;/* * Created by light on 2016/4/14. */Repositorypublic class PhoneMessage Autowired JdbcTemplate jdbcTemplate; TargetDataSource(name = "predict") public String sendMessage(String hostid) / result
40、中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 description = result.getJ
41、SONObject(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 desc_zh FROM predict.
42、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 name = listName.get(0).get("ho
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 新解讀《CB-T 3873-1999舷窗矩形窗密封墊料》新解讀
- 新解讀《CB-T 60 - 1999船用眼板》新解讀
- 質量保證措施
- 論土地所有權和使用權爭議處理
- 汽車傳感器與檢測技術電子教案:霍爾式節氣門位置傳感器
- 濟南市佳興天城營銷推廣策略報告52p
- 介紹家鄉教學活動方案
- 物理中考一輪復習教案 第一講 聲現象
- 從裝開業活動方案
- 倉鼠手工活動方案
- 2025年農村集體土地上房屋買賣合同模板
- 1999年普通高等學校招生全國統一考試.文科數學試題及答案
- 2025年安全員之A證企業負責人模擬題庫及答案(附答案)
- 美容院衛生管理制度(常用版)
- 機場行李輸送系統設計論文-本科論文
- 白帶常規報告單模板
- 2022年全國工會財務知識大賽參考題庫精簡600題(含各題型)
- 《國學典籍英譯》課程教學大綱
- 校外畢業設計(實習)申請表模板.docx
- 鋼管懸挑腳手架搭設方案
- 《廚余垃圾處理廠運行監管標準》(征求意見稿)
評論
0/150
提交評論