田肖
摘 要 隨著云計算的快速發(fā)展,全球服務器規(guī)模持續(xù)擴大,運維難度、成本不斷提高。如何降低成本、確保服務的可靠性是所有云服務商所必須考慮的問題。監(jiān)控系統(tǒng)對于提高云平臺的穩(wěn)定性、提高服務質(zhì)量、降低云平臺的運維成本發(fā)揮著非常關鍵的作用。因此,研究和實現(xiàn)云平臺的監(jiān)控系統(tǒng)具有非常重要的意義。本文在研究當前多種監(jiān)控系統(tǒng)解決方案的基礎上,設計了一種具有流量高峰預警機制的監(jiān)控系統(tǒng)。
【關鍵詞】云計算 監(jiān)控系統(tǒng) 穩(wěn)定性 流量預警
1 引言
目前,云平臺監(jiān)控系統(tǒng)在國內(nèi)外有很多的開源解決方案,比如:Zenoss、collected、Zabbix、Nagios等。但是,它們都存在不同方面的缺點,無法滿足實際生產(chǎn)環(huán)境中多樣化的需求。對于中小規(guī)模的企業(yè)來說,他們的業(yè)務規(guī)模相對較小、需求比較單一、業(yè)務擴展的也相緩慢,為了降低開發(fā)成本并且迅速地將監(jiān)控系統(tǒng)投入使用,開源的系統(tǒng)監(jiān)控解決方案是一個很好的選擇。然而,對于很多企業(yè)來說,他們的需求變化較大、業(yè)務也比較復雜、集群擴展很快,這個時候開源產(chǎn)品就會顯得很乏力。針對這些問題,本文設計了一種具有流量高峰預警機制的監(jiān)控系統(tǒng)。監(jiān)控系統(tǒng)從功能上來看,主要分為四個模塊:數(shù)據(jù)采集模塊、數(shù)據(jù)轉(zhuǎn)發(fā)模塊、數(shù)據(jù)存儲模塊、報警和預警模塊。
2 數(shù)據(jù)采集模塊
數(shù)據(jù)采集模塊是監(jiān)控系統(tǒng)最基礎的模塊,它負責監(jiān)控數(shù)據(jù)的采集,并且把采集到的數(shù)據(jù)推送給數(shù)據(jù)轉(zhuǎn)發(fā)組件。在監(jiān)控系統(tǒng)中,不同公司或者業(yè)務對于監(jiān)控目標的需求存在一些差別,但是大部分監(jiān)控目標是相同的,比如監(jiān)控CPU和內(nèi)存的使用率等。如果默認監(jiān)控所有的監(jiān)控目標(比如監(jiān)聽所有的端口,實際上大部分端口并沒有開啟), 會造成系統(tǒng)資源浪費。如果默認不監(jiān)控任何目標,則需要運維人員去做大量配置,浪費人力。
為了解決上述問題,本文將監(jiān)控數(shù)據(jù)采集目標進行分類,分為:基本監(jiān)控數(shù)據(jù)采集目標和特殊監(jiān)控數(shù)據(jù)采集目標?;颈O(jiān)控數(shù)據(jù)采集目標,本系統(tǒng)默認全部采集;特殊監(jiān)控數(shù)據(jù)采集目標,則需要運維人員手動配置。這樣既節(jié)約了系統(tǒng)資源又節(jié)省了人力。
3 數(shù)據(jù)轉(zhuǎn)發(fā)模塊
數(shù)據(jù)采集模塊和存儲模塊及報警模塊之間,設計了一個數(shù)據(jù)轉(zhuǎn)發(fā)模塊。數(shù)據(jù)轉(zhuǎn)發(fā)組件是沒有狀態(tài)的,它不會存儲任何數(shù)據(jù),而只是起到了一個中間轉(zhuǎn)發(fā)的作用。
監(jiān)控數(shù)據(jù)由數(shù)據(jù)采集模塊或者用戶自定義腳本發(fā)送過來后,首先會進行合法性檢驗,存儲到相應的內(nèi)存隊列中,之后會轉(zhuǎn)發(fā)給數(shù)據(jù)存儲模塊和報警模塊。
4 數(shù)據(jù)存儲模塊
監(jiān)控數(shù)據(jù)的存儲是監(jiān)控系統(tǒng)中非常核心的模塊,它對于系統(tǒng)的性能和整體的架構(gòu)設計具有很大影響。本系統(tǒng)把監(jiān)控數(shù)據(jù)存儲在RRD(Round Robin Database)中,即節(jié)省了空間又提高了數(shù)據(jù)查詢效率。監(jiān)控系統(tǒng)中,對監(jiān)控數(shù)據(jù)的存儲方式,主要分為兩類:
4.1 細粒度存儲
保存數(shù)據(jù)采集端推送過來的所有數(shù)據(jù)點。優(yōu)點是數(shù)據(jù)保存完整,缺點是存儲代價和查詢繪圖代價過高。
4.2 粗粒度存儲
對歷史數(shù)據(jù)進行壓縮歸檔,節(jié)省存儲空問,提高查詢和繪圖效率。RRD提供了粗粒度存儲的完善解決方案。RRD,是一個環(huán)狀數(shù)據(jù)庫,適合存儲時間序列數(shù)據(jù)。
5 報警和預警模塊
通常來說,在監(jiān)控系統(tǒng)中有兩個主要的關注點,一個是歷史數(shù)據(jù)的存儲和繪圖;另一個則是定義報警策略,及時發(fā)現(xiàn)問題,并且進行報警。目前,大多數(shù)監(jiān)控系統(tǒng)只是對己發(fā)生事件進行報警,并沒有對潛在的威脅作出預測。本系統(tǒng)不僅能夠基于歷史數(shù)據(jù)對己發(fā)生的事件進行報警,而且能夠?qū)撛诘奈kU作出預測?;跁r間序列預測技術,借助數(shù)據(jù)挖掘,本系統(tǒng)實現(xiàn)了對服務器流量的預警機制。通過流量預測模型,預測未來短時間內(nèi)流量情況,如果超過了某個設定的流量閾值,則會發(fā)出預警,網(wǎng)絡管理員可以提前采取措施,避免意外情況的發(fā)生,增強了系統(tǒng)的安全性和穩(wěn)定性。
報警模塊的功能有:
(1)從服務器獲取報警策略。
(2)接收數(shù)據(jù)轉(zhuǎn)發(fā)組件轉(zhuǎn)發(fā)過來的數(shù)據(jù)。但是,報警模塊并不會存儲所有的數(shù)據(jù),而是只會存儲每個監(jiān)控項下的最新的10個數(shù)據(jù)點。之所以這樣設計,主要是因為用戶在定義報警策略的時候,通常來說只會檢查最新的n個數(shù)據(jù)點,n的數(shù)值一般不會大于10。因此,為了節(jié)省資源和提高報警判斷的性能,本系統(tǒng)只存儲最新的10個數(shù)據(jù)點。
(3)接收到數(shù)據(jù)后,能夠高效率地判斷是否達到了閾值產(chǎn)生報警事件。
(4)當觸發(fā)報警事件后,把這個報警事件寫入隊列中。
因此,在報警模塊中需要對歷史數(shù)據(jù)進行存儲(只需要存儲最新的幾個數(shù)據(jù)點)。本系統(tǒng)需要對數(shù)據(jù)存儲進行選型,是應該把歷史數(shù)據(jù)存儲到外部機器上,還是應該把歷史數(shù)據(jù)存儲到本地的內(nèi)存當中。如果把歷史數(shù)據(jù)存儲到報警服務器的本地內(nèi)存中,那么就會導致報警服務器具有狀態(tài),當進行水平擴展時,存在一定的難度。如果把數(shù)據(jù)存儲到外部服務器的內(nèi)存中,則每次進行報警判斷時都需要經(jīng)過網(wǎng)絡獲取歷史數(shù)據(jù)點,對報警判斷的性能存在很大的影響。基于如下幾個原因:首先,監(jiān)控系統(tǒng)中數(shù)據(jù)量非常的大,報警判斷的效率是至關重要的,它很可能會成為整個監(jiān)控系統(tǒng)的瓶頸;監(jiān)控數(shù)據(jù)是持續(xù)不斷的發(fā)送到報警服務器的,對報警模塊添加服務器節(jié)點進行水平擴展時,雖然有數(shù)據(jù)丟失,但是影響也不會很大,歷史數(shù)據(jù)點很快就可以填充上。本系統(tǒng)決定把最新的n條歷史監(jiān)控數(shù)據(jù)點存儲在報警服務器的內(nèi)存中。
參考文獻
[1]沈青,董波,肖德寶.基于服務器集群的云監(jiān)控系統(tǒng)設計與實現(xiàn)[J].計算機工程與科學,2012,34(10):73-77.
[2]車路,張煥遠,夏亞東.基于開源軟件的云監(jiān)控平臺設計與實現(xiàn)[J].計算技術與自動化,2015(01):136-140.
[3]Clay R W,Wild N R,Bird D J,eta1.A cloud monitoring system for remote sites[J].Publications of the Astronomical Society of Australia,1 998,15(03):332-335.
[4]ceto G,Botta A,De Donato W,et a1.Cloud monitoring:A survey[J].ComputerNetworks,2013,57(09):2093-2115.
[5]Oetiker T.Rrdtool:Round robin database tool[J].1999.