新浪、万网前系统架构师高俊峰:统一监控报警平台架构设计思路
談到運維,監(jiān)控應(yīng)該是運維的重中之重。怎么說呢?有很多人說這個監(jiān)控應(yīng)該是運維的第三只眼睛,一個好的監(jiān)控平臺對我們這個工作本身來說,應(yīng)該有很大的幫助。那么,如何要構(gòu)建一個完善的監(jiān)控平臺。那就是我們今天要討論的話題:
以我的理解來說這個運維的核心工作其實是監(jiān)控和故障處理。兩個方面的工作首先是對這個業(yè)務(wù)系統(tǒng)我們要有一個精確的完善的監(jiān)控。那么他的目的就是能夠保證在第一時間去發(fā)現(xiàn)問題并且去通知相關(guān)人員解決問題。其實出現(xiàn)問題了并不可怕,可怕的是我們很久沒有發(fā)現(xiàn)問題,那么最終被客戶發(fā)現(xiàn)我們的業(yè)務(wù)系統(tǒng)出現(xiàn)故障,那么就是個很嚴重的問題了,這些都是靠業(yè)務(wù)系統(tǒng)監(jiān)控平臺來完成的。
提綱介紹:
1、統(tǒng)一監(jiān)控報警平臺設(shè)計思路
第一:統(tǒng)一監(jiān)控報警平臺設(shè)計思路
構(gòu)建一個智能的運維監(jiān)控平臺,必須以運行監(jiān)控和故障報警這兩個方面為重點,將所有業(yè)務(wù)系統(tǒng)中所涉及的網(wǎng)絡(luò)資源、硬件資源、軟件資源、數(shù)據(jù)庫資源等納入統(tǒng)一的運維監(jiān)控平臺中,并通過消除管理軟件的差別,數(shù)據(jù)采集手段的差別,對各種不同的數(shù)據(jù)來源實現(xiàn)統(tǒng)一管理、統(tǒng)一規(guī)范、統(tǒng)一處理、統(tǒng)一展現(xiàn)、統(tǒng)一用戶登錄、統(tǒng)一權(quán)限控制,最終實現(xiàn)運維規(guī)范化、自動化、智能化的大運維管理。
智能的運維監(jiān)控平臺,設(shè)計架構(gòu)從低到高可以分為6層,三大模塊,如圖1所示:
數(shù)據(jù)收集層:位于最底層,主要收集網(wǎng)絡(luò)數(shù)據(jù)、業(yè)務(wù)系統(tǒng)數(shù)據(jù)、數(shù)據(jù)庫數(shù)據(jù)、操作系統(tǒng)數(shù)據(jù)等,然后將收集到的數(shù)據(jù)進行規(guī)范化,并進行存儲。
數(shù)據(jù)展示層:位于第二層,是一個web展示界面,主要是將數(shù)據(jù)收集層獲取到的數(shù)據(jù)進行統(tǒng)一展示,展示的方式可以是曲線圖、柱狀圖、餅狀態(tài)等,通過將數(shù)據(jù)圖形化,可以幫助運維人員了解一段時間內(nèi)主機或網(wǎng)絡(luò)的運行狀態(tài)和運行趨勢,并作為運維人員排查問題或解決問題的依據(jù)。
數(shù)據(jù)提取層:位于第三層,主要是將數(shù)據(jù)收集層獲取到的數(shù)據(jù)進行規(guī)格化和過濾處理,提取需要的數(shù)據(jù)到監(jiān)控報警模塊,這個部分是監(jiān)控和報警兩個模塊的銜接點。
報警規(guī)則配置層:位于第四層,主要是根據(jù)第三層獲取到的數(shù)據(jù)進行報警規(guī)則設(shè)置、報警閥值設(shè)置、報警聯(lián)系人設(shè)置和報警方式設(shè)置等。
報警事件生成層:位于第五層,主要是將報警事件進行實時記錄,并將報警結(jié)果存入數(shù)據(jù)庫以備調(diào)用,并將報警結(jié)果形成分析報表,以統(tǒng)計一段時間內(nèi)的故障率和故障發(fā)生趨勢。
用戶展示管理層:位于最頂層,是一個web展示界面,主要是將監(jiān)控統(tǒng)計結(jié)果、報警故障結(jié)果進行統(tǒng)一展示,并實現(xiàn)多用戶、多權(quán)限管理,實現(xiàn)統(tǒng)一用戶和統(tǒng)一權(quán)限控制。
在這6層中,從功能實現(xiàn)劃分,又分為三個模塊,分別是數(shù)據(jù)收集模塊、數(shù)據(jù)提取模塊和監(jiān)控報警模塊,每個模塊完成的功能如下:
數(shù)據(jù)收集模塊:此模塊主要完成基礎(chǔ)數(shù)據(jù)的收集與圖形展示,數(shù)據(jù)收集的方式有很多種,可以通過SNMP實現(xiàn),也可以通過代理模塊實現(xiàn),還可以通過自定義腳本實現(xiàn),這里采用數(shù)據(jù)收集工具Ganglia來實現(xiàn)。
數(shù)據(jù)提取模塊:此模板主要完成數(shù)據(jù)的篩選過濾和采集,將需要的數(shù)據(jù)從數(shù)據(jù)收集模塊提取到監(jiān)控報警模塊中??梢酝ㄟ^數(shù)據(jù)收集模塊提供的接口或者自定義腳本實現(xiàn)數(shù)據(jù)的提取。
監(jiān)控報警模塊:此模塊主要完成監(jiān)控腳本的設(shè)置、報警規(guī)則設(shè)置,報警閥值設(shè)置、報警聯(lián)系人設(shè)置等,并將報警結(jié)果進行集中展現(xiàn)和歷史記錄,常見的監(jiān)控報警工具有Nagios、Centreon等。
圖2是根據(jù)圖1的設(shè)計思路形成的一個運維監(jiān)控平臺實現(xiàn)拓撲圖,從圖中可以看出,主要有三大部分組成,分別是數(shù)據(jù)收集模塊、監(jiān)控報警模塊和數(shù)據(jù)提取模塊。
其中,數(shù)據(jù)提取模塊用于其它兩個模塊之間的數(shù)據(jù)通信,而數(shù)據(jù)收集模塊可以有一臺或多臺數(shù)據(jù)收集服務(wù)器組成,每個數(shù)據(jù)收集服務(wù)器可以直接從服務(wù)器群組收集各種數(shù)據(jù)指標(biāo),經(jīng)過規(guī)范數(shù)據(jù)格式,最終將數(shù)據(jù)存儲到數(shù)據(jù)收集服務(wù)器中。
監(jiān)控報警模塊通過數(shù)據(jù)抽取模塊從數(shù)據(jù)收集服務(wù)器獲取需要的數(shù)據(jù),然后對數(shù)據(jù)設(shè)置報警閥值、報警聯(lián)系人等,最終實現(xiàn)實時報警,報警方式支持手機短信報警、郵件報警等,另外,也可以通過插件或者自定義腳本來擴展報警方式。這樣一整套監(jiān)控報警平臺就基本實現(xiàn)了。
第二:Ganglia作為數(shù)據(jù)收集模塊
Ganglia是一款為HPC(高性能計算)集群而設(shè)計的可擴展的分布式監(jiān)控系統(tǒng),它可以監(jiān)視和顯示集群中的節(jié)點的各種狀態(tài)信息,它由運行在各個節(jié)點上的gmond守護進程來采集cpu 、mem、硬盤利用率、I/O負載、網(wǎng)絡(luò)流量情況等方面的數(shù)據(jù),然后匯總到gmetad守護進程下,使用rrdtools存儲數(shù)據(jù),最后將歷史數(shù)據(jù)以曲線方式通過php頁面呈現(xiàn)。
特點如下:
1、靈活的分布式、分層體系結(jié)構(gòu),使Ganglia支持上萬個監(jiān)控節(jié)點的數(shù)據(jù)收集,并且性能表現(xiàn)穩(wěn)定,同時,Ganglia也可以根據(jù)地域環(huán)境、網(wǎng)絡(luò)結(jié)構(gòu)的不同,分地域、分層次的靈活部署Ganglia數(shù)據(jù)收集點,而對于數(shù)據(jù)收集節(jié)點可以動態(tài)添加或刪除,對Ganglia整體監(jiān)控不產(chǎn)生任何影響。因此,可以靈活的擴展Ganglia數(shù)據(jù)收集節(jié)點。
2、Ganglia收集到的數(shù)據(jù)更加精確,它不但可以收集實時數(shù)據(jù),以圖表的形式展示出來,而且還允許用戶查看歷史統(tǒng)計數(shù)據(jù),因此,用戶可以通過這些數(shù)據(jù),做出性能調(diào)整、升級、擴容等決策,從而保證應(yīng)用系統(tǒng)能夠滿足不斷增長的業(yè)務(wù)需求。
3、Ganglia可以通過組播、單播的方式收集數(shù)據(jù),在監(jiān)控的節(jié)點較多時通過組播方式收集數(shù)據(jù)可以大大降低數(shù)據(jù)收集的負載,提高監(jiān)控和數(shù)據(jù)收集性能。而對于不能使用組播收集數(shù)據(jù)的網(wǎng)絡(luò)環(huán)境,還可以通過單播的方式收集數(shù)據(jù),因此Ganglia在數(shù)據(jù)收集方式上非常靈活。
4、Ganglia可收集各種度量的數(shù)據(jù),Ganglia默認情況下可收集cpu、memory、disk、I/O、process、network六大方面的數(shù)據(jù),同時Ganglia提供了C或者Python接口,用戶通過這個接口可以自定義數(shù)據(jù)收集模塊,并且這些模塊可以被直接插入到Ganglia中以監(jiān)控用戶自定義的應(yīng)用。
基于以上Ganglia這些優(yōu)點,使它非常適合作為監(jiān)控報警平臺的數(shù)據(jù)收集模塊,雖然Cacti/zabbix也可以實現(xiàn)數(shù)據(jù)的收集和圖形報表的展示,但是當(dāng)監(jiān)控節(jié)點越來越多時,Cacti和zabbix的缺點就慢慢暴露出來了,數(shù)據(jù)收集的準(zhǔn)確性、實時性就很難得到保障了。因此,要構(gòu)建一個高性能的監(jiān)控報警平臺,Ganglia是首選的數(shù)據(jù)收集模塊。
第三:Centreon作為監(jiān)控報警模塊
有了Ganglia收集數(shù)據(jù)還是不夠的,運維人員不可能天天盯著數(shù)據(jù)報表,因此,還需要對收集到的數(shù)據(jù)進行監(jiān)控和報警:對每個需要監(jiān)控的主機或服務(wù),設(shè)置一個報警閥值,當(dāng)收集到的數(shù)據(jù)超過這個閥值時,在第一時間能自動報警并通知到運維人員,而如果收集到的數(shù)據(jù)沒有超過指定的報警閥值,運維人員就可以去做別的事情,而不用時刻盯著數(shù)據(jù)報表,這是構(gòu)建智能監(jiān)控報警平臺必須要實現(xiàn)的一個功能。
對主機或服務(wù)的狀態(tài)值進行監(jiān)控,當(dāng)達到指定閥值時進行報警,要實現(xiàn)這個功能并不是什么難的事情,可以寫個簡單的腳本就能實現(xiàn),但是這樣太原始了,沒有層次,維護性差,并且當(dāng)需要監(jiān)控報警的主機或服務(wù)越來越多時,腳本的性能就變得很差,管理也非常不方便,更別說有什么可視化效果了,因此,就需要有一個專業(yè)的監(jiān)控報警工具來實現(xiàn)這個功能。
Centreon就是這樣一個專業(yè)的分布式監(jiān)控、報警工具,它通過第三方組件可以實現(xiàn)對網(wǎng)絡(luò)、操作系統(tǒng)和應(yīng)用程序的監(jiān)控與報警,在底層,centreon通過nagios作為監(jiān)控軟件,在數(shù)據(jù)層,Centreon通過ndoutil模塊將監(jiān)控到的數(shù)據(jù)定時寫入數(shù)據(jù)庫中,在展示層,Centreon提供了Web界面來配置、管理需要監(jiān)控的主機或服務(wù),并提供多種報警通知方式,同時還可以展現(xiàn)監(jiān)控數(shù)據(jù)和報警狀態(tài),并可查詢歷史報警記錄。
第四:Ganglia與Centreon的無縫整合
Nagios和Ganglia都是很好的數(shù)據(jù)中心監(jiān)控工具,雖然它們的功能有重疊部分,但是兩者對監(jiān)控的側(cè)重點并不相同:Ganglia側(cè)重于收集數(shù)據(jù),并隨時跟蹤數(shù)據(jù)狀態(tài),通過Ganglia不但可以看到數(shù)據(jù)的歷史狀態(tài),也可以預(yù)計數(shù)據(jù)的未來發(fā)展趨勢,為我們的應(yīng)用程序修正和硬件采購提供決策。而Nagios更側(cè)重與監(jiān)控數(shù)據(jù)并進行過載報警,綜合Ganglia和Nagios的優(yōu)缺點,同時運行這兩個工具可以相互彌補它們的不足:
Ganglia暫時沒有內(nèi)置報警通知機制,而Nagios這方面是強項。
Nagios沒有內(nèi)置代理和分布式監(jiān)控機制,而Ganglia設(shè)計之初就考慮到了這些。
Nagios沒有直觀的報表展示(雖然可通過PNP插件實現(xiàn)),而Ganglia報表功能很強大。
Ganglia內(nèi)置了基于很多開發(fā)接口,通過這些接口,可以將Ganglia統(tǒng)計到的數(shù)據(jù)納入Nagios監(jiān)控之下。
確定了以Ganglia作為數(shù)據(jù)收集模塊,Centreon作為監(jiān)控報警模塊的方案,這樣,一個智能監(jiān)控報警平臺兩大主要功能模塊已經(jīng)基本實現(xiàn)了,但現(xiàn)在的問題是,如何將收集到的數(shù)據(jù)傳送給監(jiān)控報警模塊呢,這就是數(shù)據(jù)抽取模塊要完成的功能。
數(shù)據(jù)抽取模塊要完成的功能是:從數(shù)據(jù)收集模塊中定時采集指定的數(shù)據(jù),然后將采集到的數(shù)據(jù)與指定的報警閥值進行比較,如果發(fā)現(xiàn)采集到的數(shù)據(jù)大于或小于指定的報警閥值,那么就通過監(jiān)控報警模塊設(shè)置的報警方式進行故障通知,這個過程,只有采集數(shù)據(jù)是在數(shù)據(jù)收集模塊中完成,其他操作,例如:采集數(shù)據(jù)時間間隔、報警閥值設(shè)置、報警方式設(shè)置、報警聯(lián)系人設(shè)置等都在監(jiān)控報警模塊中完成。
從數(shù)據(jù)抽取模塊完成的功能可以看出,此模塊主要用來銜接數(shù)據(jù)收集模塊和監(jiān)控報警模塊,進而完成Ganglia和Centreon的無縫整合。
要實現(xiàn)數(shù)據(jù)抽取模塊的功能,沒有現(xiàn)成的方法可用,需要在ganglia基礎(chǔ)上做二次開發(fā),較簡單的方法是在通過程序在ganglia上開發(fā)一個數(shù)據(jù)提取接口,然后將數(shù)據(jù)抽取到nagios中,初步方案是通過python程序來實現(xiàn)。
第五:統(tǒng)計監(jiān)控系統(tǒng)架構(gòu)圖
簡單描述如下:
Cluster1-N均為一個分布式集群,也可以認為是一個機房數(shù)據(jù)中心。每個數(shù)據(jù)中心的Node server都運行一個Gmond守護進程,進行數(shù)據(jù)收集,將收集到的數(shù)據(jù)匯總到Ganglia proxy主機,Ganglia proxy主機上運行著Gmetad守護進程。同時Gangliaproxy和Node server都加載通過C或者Python編寫的Ganglia插件,擴展Ganglia監(jiān)控功能。
Managerserver是一個管理主機,主要用于收集從各個機房數(shù)據(jù)中心的監(jiān)控數(shù)據(jù),通過數(shù)據(jù)抽取模塊將Nagios和Ganglia整合到一起,考慮到數(shù)據(jù)的安全性,Manager server建議做一個備機,平時主機和備機同時工作,進行數(shù)據(jù)收集,主機故障時,自動切換到備機,保證管理主機高可用。
監(jiān)控數(shù)據(jù)和報表通過Web方式展示出來,將Nagios和Ganglia的web進行整合,并作二次開發(fā),通過一個統(tǒng)一的界面展示監(jiān)控狀態(tài)和報表信息。
基本流程如下:
Gmond收集本機的監(jiān)控數(shù)據(jù),發(fā)送到其他機器上,并收集其他機器的監(jiān)控數(shù)據(jù),gmond之間通過udp通信,傳遞文件格式為XDL。
Gmond節(jié)點間的數(shù)據(jù)傳輸方式支持單播點對點傳送外,還支持多播傳送。
gmetad周期性的去gmond節(jié)點或者gmetad節(jié)點poll數(shù)據(jù),Gmetad只有tcp通道,gmond與gmetad之間的數(shù)據(jù)都以XML格式傳輸。
gmetad既可以從gmond也可以從其他的gmetad得到xml數(shù)據(jù)。
gmetad將獲取到的數(shù)據(jù)更新到rrds數(shù)據(jù)庫中。
Nagios通過數(shù)據(jù)抽取模塊監(jiān)控ganglia獲取到的數(shù)據(jù)并進行報警。
通過web監(jiān)控界面,從Gmetad取數(shù)據(jù),并且讀取rrd數(shù)據(jù)庫,生成圖片顯示出來。
接下來是QA環(huán)節(jié):
1、gmond在客戶端之間通過udp方式互相傳遞的,有什么意義?
答:通過udp方式傳輸數(shù)據(jù),一方面是輕量級傳輸,在大量服務(wù)器監(jiān)控的情況下,不會過大消耗服務(wù)器和網(wǎng)絡(luò)資源,另一方面udp方式的組播方式可以將數(shù)據(jù)保存到多個節(jié)點,這樣可以在管理端設(shè)置多個收集數(shù)據(jù)節(jié)點,當(dāng)一個節(jié)點故障時,自動去另一個節(jié)點收集數(shù)據(jù),保證了數(shù)據(jù)收集的穩(wěn)定性。
2、如何監(jiān)控系統(tǒng)不通過tcpip而是通過讀取數(shù)據(jù)庫形式完成數(shù)據(jù)抓取,發(fā)現(xiàn)故障的延時會好很多么?
答:抓取數(shù)據(jù)的方式?jīng)Q定了是否存在延時,這個跟ganglia無關(guān),ganglia可以接收接口過來的任意數(shù)據(jù),但是是否有延時,決定權(quán)在你的數(shù)據(jù)收集腳本。
3、如果為了備份數(shù)據(jù)的話,采用udp方式,一旦各個節(jié)點之間發(fā)生網(wǎng)絡(luò)抖動,數(shù)據(jù)完整性如何保證?
答:數(shù)據(jù)在每個節(jié)點的保存時間基本在10秒左右,超過這個時間,數(shù)據(jù)會再次進行更新,因此不存在抖動問題,至于數(shù)據(jù)完整性,也可以不用考慮,在收集到數(shù)據(jù)后,gmetad會對數(shù)據(jù)進行統(tǒng)一整理,更多關(guān)注的是數(shù)據(jù)的及時性。
高俊峰(南非螞蟻)Linux資深技術(shù)專家,暢銷書籍《循序漸進Linux》、《高性能Linux服務(wù)器構(gòu)建實戰(zhàn)》作者,曾就職于新浪、萬網(wǎng),目前服務(wù)于上海好耶集團,具有多年的自動化運維和管理經(jīng)驗,擅長Linux、集群應(yīng)用、Mysql、Oracle等方面的系統(tǒng)管理、性能調(diào)優(yōu),規(guī)劃設(shè)計,實戰(zhàn)經(jīng)驗豐富。目前關(guān)注于Hadoop數(shù)據(jù)平臺以及和Hadoop相關(guān)的生態(tài)系統(tǒng)的運維、監(jiān)控、部署、優(yōu)化等技術(shù)。
出處:http://quanju.blog.51cto.com/1589176/1696407
總結(jié)
以上是生活随笔為你收集整理的新浪、万网前系统架构师高俊峰:统一监控报警平台架构设计思路的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 调音台操作技巧(上):六大输入部分要点
- 下一篇: 自然语言处理笔记8-哈工大 关毅