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