本發(fā)明涉及一種云平臺(tái)安全監(jiān)控?cái)?shù)據(jù)處理方法,尤其涉及一種面向云平臺(tái)的安全監(jiān)控?cái)?shù)據(jù)采集與存儲(chǔ)方法。
背景技術(shù):
云計(jì)算以其成本低廉、快速部署和規(guī)模靈活等優(yōu)勢吸引了學(xué)術(shù)界和工業(yè)界的高度關(guān)注,與此同時(shí),針對云平臺(tái)的安全監(jiān)控與分析也成為了研究熱點(diǎn)。
但是現(xiàn)有虛擬化平臺(tái)采集到的基礎(chǔ)數(shù)據(jù)粒度過粗,無法及時(shí)精準(zhǔn)地反映云平臺(tái)安全狀態(tài)。
云平臺(tái)中多個(gè)虛擬化軟件共存,基礎(chǔ)數(shù)據(jù)來源多樣化,缺乏統(tǒng)一表達(dá)方式,不適合直接用于展示與分析。
云平臺(tái)數(shù)據(jù)源遍布整個(gè)計(jì)算體系的各個(gè)層次,包涵主機(jī),網(wǎng)絡(luò),存儲(chǔ)等線上線下豐富數(shù)據(jù)來源。然而,云平臺(tái)內(nèi)部包含超大規(guī)模服務(wù)節(jié)點(diǎn),節(jié)點(diǎn)內(nèi)中又包含海量的、層次復(fù)雜的服務(wù),節(jié)點(diǎn)間也會(huì)形成規(guī)模龐大結(jié)構(gòu)復(fù)雜的網(wǎng)絡(luò)。從各類節(jié)點(diǎn)、服務(wù)中采集到的基礎(chǔ)數(shù)據(jù)匯總成為層次多,數(shù)據(jù)量大,數(shù)據(jù)類型復(fù)雜的數(shù)據(jù)集。對這樣的數(shù)據(jù)集進(jìn)行信息提取和分析十分的困難。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例所要解決的技術(shù)問題在于,針對現(xiàn)有云平臺(tái)從各類節(jié)點(diǎn)、服務(wù)中采集到的基礎(chǔ)數(shù)據(jù)匯總成為層次多,數(shù)據(jù)量大,數(shù)據(jù)類型復(fù)雜的數(shù)據(jù)集對這樣的數(shù)據(jù)集進(jìn)行信息提取和分析十分的困難的問題,提出了一種面向云平臺(tái)的安全監(jiān)控?cái)?shù)據(jù)采集與存儲(chǔ)方法。
為了解決上述技術(shù)問題,本發(fā)明實(shí)施例提供了一種面向云平臺(tái)的安全監(jiān)控?cái)?shù)據(jù)采集與存儲(chǔ)方法,包括步驟:初始化消息隊(duì)列步驟,依次初始化監(jiān)控代理傳輸?shù)皆朴?jì)算平臺(tái)的消息隊(duì)列remote和監(jiān)控代理傳輸?shù)奖镜卮鎯?chǔ)的消息隊(duì)列l(wèi)ocal;載入采集插件步驟,獲取采集插件的相關(guān)信息;采集數(shù)據(jù)步驟,數(shù)據(jù)采集后端根據(jù)已加載的插件信息運(yùn)行采集插件,獲取云平臺(tái)基礎(chǔ)數(shù)據(jù);發(fā)送數(shù)據(jù)步驟,數(shù)據(jù)采集后端將采集到的數(shù)據(jù)通過消息隊(duì)列發(fā)送給傳輸代理;上述步驟為數(shù)據(jù)采集步驟,下列步驟為數(shù)據(jù)存儲(chǔ)步驟:啟動(dòng)傳輸代理broker,預(yù)讀tagmodel和metricmodel所有文檔的時(shí)間戳,并將其緩存在內(nèi)存中;在緩存中查詢tagmodel,取得監(jiān)控指標(biāo)的tags;若緩存命中,則向緩存和數(shù)據(jù)庫中同時(shí)插入一條記錄;若緩存未命中,則以tags和時(shí)間戳作為查詢條件,在currentmodel中查詢;若查詢到存在相應(yīng)文檔,則更新數(shù)據(jù)庫中相應(yīng)文檔的value值;若未查詢到存在相應(yīng)文檔,則需要生成一條新的文檔,存入數(shù)據(jù)庫。
其中,在進(jìn)行數(shù)據(jù)存儲(chǔ)時(shí),使用統(tǒng)一數(shù)據(jù)表達(dá)方式。
其中,統(tǒng)一數(shù)據(jù)表達(dá)方式為使用四元組:name、tags、value以及timestamp來描述一條監(jiān)控?cái)?shù)據(jù)。
其中,在進(jìn)行數(shù)據(jù)存儲(chǔ)時(shí),進(jìn)行數(shù)據(jù)去重處理。
其中,在進(jìn)行數(shù)據(jù)去重處理時(shí),包括如下兩個(gè)步驟:基礎(chǔ)數(shù)據(jù)標(biāo)簽分離;數(shù)據(jù)壓縮。
其中,基礎(chǔ)數(shù)據(jù)標(biāo)簽分離的步驟包括:將冗余信息集中的name和tags字段獨(dú)立出來作為tagmodel,其它模型以tagmodel為外鍵,以實(shí)現(xiàn)標(biāo)簽分離機(jī)制。
其中,數(shù)據(jù)壓縮步驟包括:將預(yù)定時(shí)間內(nèi)的數(shù)據(jù)壓縮存儲(chǔ)到一條文檔內(nèi)以降低時(shí)序性所帶來的監(jiān)控指標(biāo)數(shù)據(jù)冗余,同時(shí),在metricmodel中增加cur_v和cur_t字段分別表示當(dāng)前小時(shí)內(nèi)的最新數(shù)據(jù)和最新時(shí)間戳。
其中,在進(jìn)行數(shù)據(jù)存儲(chǔ)時(shí),為需要經(jīng)常查詢的tagmodel增加緩存,并為metricmodel緩存當(dāng)前文檔是否存在的狀態(tài)。
實(shí)施本發(fā)明實(shí)施例,具有如下有益效果:本發(fā)明通過采集插件從多個(gè)節(jié)點(diǎn)獲取云平臺(tái)基礎(chǔ)數(shù)據(jù),獲取全面,并且存儲(chǔ)方式合理,不會(huì)產(chǎn)生重復(fù)存儲(chǔ)。
附圖說明
圖1是本發(fā)明第一實(shí)施例的面向云平臺(tái)的安全監(jiān)控?cái)?shù)據(jù)采集與存儲(chǔ)方法的流程圖;
圖2是采集插件通信圖;
圖3是采集插件結(jié)構(gòu)圖。
具體實(shí)施方式
下面將對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
參見圖1與圖2,圖1是本發(fā)明第一實(shí)施例的面向云平臺(tái)的安全監(jiān)控?cái)?shù)據(jù)采集與存儲(chǔ)方法的流程圖,圖2是采集插件通信圖。本發(fā)明提供了一種面向云平臺(tái)的安全監(jiān)控?cái)?shù)據(jù)采集與存儲(chǔ)方法,該面向云平臺(tái)的安全監(jiān)控?cái)?shù)據(jù)采集與存儲(chǔ)方法包括步驟:
在步驟s11中,初始化消息隊(duì)列步驟,依次初始化監(jiān)控代理傳輸?shù)皆朴?jì)算平臺(tái)的消息隊(duì)列remote和監(jiān)控代理傳輸?shù)奖镜卮鎯?chǔ)的消息隊(duì)列l(wèi)ocal。遠(yuǎn)程隊(duì)列remote_mq負(fù)責(zé)與數(shù)據(jù)傳輸代理相連接,本地隊(duì)列l(wèi)ocal_mq用于收集本地平臺(tái)代理的消息。
在步驟s12中,載入采集插件步驟,獲取采集插件的相關(guān)信息。具體為:讀取插件的配置信息plugin_desc,獲取采集插件的命令行,數(shù)據(jù)指標(biāo)等信息。
在步驟s13中,采集數(shù)據(jù)步驟,數(shù)據(jù)采集后端根據(jù)已加載的插件信息運(yùn)行采集插件,獲取云平臺(tái)基礎(chǔ)數(shù)據(jù)。在此步驟中,進(jìn)一步進(jìn)行輪詢更新數(shù)據(jù)步驟,遍歷配置文件中所有插件的描述信息,將其按照輪詢周期分組。每個(gè)周期輪詢一次,更新監(jiān)控指標(biāo)。
在步驟s14中,發(fā)送數(shù)據(jù)步驟,數(shù)據(jù)采集后端將采集到的數(shù)據(jù)通過消息隊(duì)列發(fā)送給傳輸代理。
在步驟s15中,啟動(dòng)傳輸代理broker,預(yù)讀tagmodel和metricmodel所有文檔的時(shí)間戳,并將其緩存在內(nèi)存中。
在步驟s16中,在緩存中查詢tagmodel,取得監(jiān)控指標(biāo)的tags。若緩存命中,則進(jìn)入步驟s17。若緩存未命中,則進(jìn)入步驟s18。
在步驟s17中,若緩存命中,則向緩存和數(shù)據(jù)庫中同時(shí)插入一條記錄。
在步驟s18中,若緩存未命中,則以tags和時(shí)間戳作為查詢條件,在currentmodel中查詢。若查詢到存在相應(yīng)文檔,則進(jìn)入步驟s19。若未查詢到存在相應(yīng)文檔,則進(jìn)入步驟s20。
在步驟s19中,若查詢到存在相應(yīng)文檔,則更新數(shù)據(jù)庫中相應(yīng)文檔的value值。
在步驟s20中,若未查詢到存在相應(yīng)文檔,則需要生成一條新的文檔,存入數(shù)據(jù)庫。
其中,步驟s11~步驟s14為數(shù)據(jù)采集步驟,步驟s15~步驟s20為數(shù)據(jù)存儲(chǔ)步驟。
通過該代理預(yù)讀標(biāo)簽?zāi)P蛅agmodel:{name,tags}和歷史監(jiān)控測量值模型metricmodel:{name,tags,timestamp,value}所有文檔的時(shí)間戳,并將其緩存在內(nèi)存中;在緩存中查詢tagmodel,取得監(jiān)控指標(biāo)的tags;向緩存和數(shù)據(jù)庫中同時(shí)插入一條記錄或以tags和時(shí)間戳作為查詢條件,在當(dāng)前監(jiān)控測量值模型currentmodel:{name,tags,timestamp,value}中查詢;若查詢到則更新數(shù)據(jù)庫中相應(yīng)文檔的value值;若未查詢到則需要生成一條新的文檔存入數(shù)據(jù)庫。
參閱圖3,圖3是采集插件結(jié)構(gòu)圖。數(shù)據(jù)采集機(jī)制分為兩層:數(shù)據(jù)采集插件,數(shù)據(jù)采集后端。
數(shù)據(jù)采集插件提供統(tǒng)一數(shù)據(jù)采集api供數(shù)據(jù)采集后端調(diào)用,本發(fā)明所使用默認(rèn)采集插件包括vsphere/vcenter平臺(tái)插件、服務(wù)發(fā)現(xiàn)插件、windows平臺(tái)監(jiān)控插件、linux平臺(tái)監(jiān)控插件,用戶可根據(jù)需要自行添加插件;數(shù)據(jù)采集后端負(fù)責(zé)根據(jù)配置文件具體控制數(shù)據(jù)采集插件的行為、數(shù)據(jù)的初步過濾以及周期性發(fā)送。
數(shù)據(jù)采集后端啟動(dòng)后,首先讀取配置文件,確認(rèn)監(jiān)控代理的運(yùn)行環(huán)境和數(shù)據(jù)采集任務(wù)(如位于物理主機(jī)的linux服務(wù)器、需要采集云節(jié)點(diǎn)信息和物理主機(jī)運(yùn)行狀態(tài)),根據(jù)配置文件配置代理,加載對應(yīng)的數(shù)據(jù)采集插件,周期性的調(diào)用采集插件得到的監(jiān)測指標(biāo)。
基礎(chǔ)數(shù)據(jù)存儲(chǔ)方法如下:
由于云平臺(tái)監(jiān)控?cái)?shù)據(jù)具有源數(shù)據(jù)異構(gòu)的特點(diǎn),為保證存儲(chǔ)一致性及數(shù)據(jù)源的兼容性,需要設(shè)計(jì)統(tǒng)一的,便于交互和存儲(chǔ),因此在進(jìn)行數(shù)據(jù)存儲(chǔ)時(shí),使用統(tǒng)一數(shù)據(jù)表達(dá)方式。
本方案使用四元組:name、tags、value以及timestamp來描述一條監(jiān)控?cái)?shù)據(jù),其定義為:
name:監(jiān)控測量值的名稱,如,cpu_usage,表示cpu負(fù)載。
tags:監(jiān)控測量值的附加屬性,是一個(gè)字典結(jié)構(gòu),主要用來表示測量值的來源(集群,主機(jī),虛擬機(jī)),類型,單位等。
value:監(jiān)控測量值的具體測量數(shù)值,可以是一個(gè)數(shù)組或者字典。
timestamp:監(jiān)控測量值獲取時(shí)的精確時(shí)間戳。
顯然,{name,tags,timestamp}三元組可唯一定位一個(gè)數(shù)據(jù)點(diǎn),使用其中任意一項(xiàng)或兩項(xiàng)可以獲取滿足一定條件的一系列數(shù)據(jù)點(diǎn)。此格式不僅可以用來存儲(chǔ),也可以用來作為系統(tǒng)模塊之間的數(shù)據(jù)交互格式。這種數(shù)據(jù)格式可以方便的轉(zhuǎn)化為json。即使監(jiān)控服務(wù)器或監(jiān)控代理采用了其他程序設(shè)計(jì)語言實(shí)現(xiàn),json也能很好的滿足服務(wù)間消息傳遞的兼容性和交互性。同時(shí),這種形式的存儲(chǔ),可以很容易的進(jìn)行擴(kuò)展:當(dāng)增加新的監(jiān)控對象時(shí),只需往監(jiān)控測量值列表加入該對象類型。
其中,在進(jìn)行數(shù)據(jù)存儲(chǔ)時(shí),進(jìn)行數(shù)據(jù)去重處理。而在進(jìn)行數(shù)據(jù)去重處理時(shí),包括如下兩個(gè)步驟:基礎(chǔ)數(shù)據(jù)標(biāo)簽分離、數(shù)據(jù)壓縮。
數(shù)據(jù)標(biāo)簽分離:本文以反范式化為基礎(chǔ)進(jìn)行數(shù)據(jù)存儲(chǔ),但由監(jiān)控?cái)?shù)據(jù)多維度,樹形結(jié)構(gòu),多數(shù)維度高重復(fù)性(lowcardinality)的特點(diǎn)可以預(yù)見到,采用反范式化必然會(huì)引入大量冗余信息。當(dāng)監(jiān)控集群增大,監(jiān)控指標(biāo)增多時(shí),會(huì)帶來過多的空間消耗。故本文采用標(biāo)簽分離機(jī)制,將冗余信息集中的name和tags字段獨(dú)立出來作為tagmodel,其它模型以tagmodel為外鍵,以實(shí)現(xiàn)標(biāo)簽分離機(jī)制。
數(shù)據(jù)壓縮:數(shù)據(jù)壓縮機(jī)制用于消除監(jiān)控指標(biāo)數(shù)據(jù)冗余。監(jiān)控?cái)?shù)據(jù)是時(shí)序性數(shù)據(jù),相同的監(jiān)控指標(biāo),時(shí)間戳不同,會(huì)在數(shù)據(jù)庫中存在多條文檔。當(dāng)一段時(shí)間內(nèi),監(jiān)控指標(biāo)相對穩(wěn)定時(shí),這多條記錄除了時(shí)間戳不同沒有任何其它區(qū)別。而將一段時(shí)間內(nèi)的數(shù)據(jù)壓縮存儲(chǔ)到一條文檔內(nèi)可極大降低時(shí)序性所帶來的監(jiān)控指標(biāo)數(shù)據(jù)冗余。同時(shí),為方便查詢當(dāng)前數(shù)據(jù),在metricmodel中增加cur_v和cur_t字段分別表示當(dāng)前小時(shí)內(nèi)的最新數(shù)據(jù)和最新時(shí)間戳。
這種存儲(chǔ)方式帶來的最直接的好處是記錄條數(shù)大量減少。用t表示壓縮時(shí)長,每t秒更新一條數(shù)據(jù),則記錄條數(shù)的壓縮比p=t/t。每條文檔大小為vp,測量指標(biāo)大小為vi,直接存儲(chǔ)t時(shí)間段的數(shù)據(jù)所需空間為v=pvp=tvp/t,壓縮存儲(chǔ)后,存儲(chǔ)t時(shí)間段的數(shù)據(jù)所需空間為vc=vp+vip-vi=vp+(t-t)vi/t;壓縮比為p′=v/vc=vpt/vpt+(t-t)vi。若壓縮時(shí)長為一小時(shí),每2秒更新一條數(shù)據(jù),每條文檔的平均大小為200b,測量值平均大小為16b。則壓縮比為12:1。此外,由于只存儲(chǔ)發(fā)生變化的數(shù)據(jù),監(jiān)控代理只需在數(shù)據(jù)變化時(shí)發(fā)送數(shù)據(jù),會(huì)大大降低網(wǎng)絡(luò)(隊(duì)列)負(fù)載并減小傳輸代理接收數(shù)據(jù)的壓力。
預(yù)熱緩存機(jī)制用于消除存儲(chǔ)過程中的寫入放大效應(yīng)。數(shù)據(jù)壓縮和標(biāo)簽分離機(jī)制雖然能夠降低數(shù)據(jù)冗余,提高空間利用率,但同時(shí)也會(huì)增加數(shù)據(jù)結(jié)構(gòu)的復(fù)雜度,帶來嚴(yán)重的數(shù)據(jù)庫寫入放大問題。如圖3,以性能數(shù)據(jù)為例,某監(jiān)控指標(biāo)的第一份數(shù)據(jù)送入數(shù)據(jù)庫時(shí),需要做2次查詢和2次寫入操作,才能把數(shù)據(jù)完整的寫入數(shù)據(jù)庫。即使正常情況下,監(jiān)控?cái)?shù)據(jù)的tags可以在tagmodel中查詢得到,仍需要2次查詢1次修改(或1次寫入)。顯然這樣的寫放大效應(yīng)無法滿足實(shí)際需求。
解決方案是為需要經(jīng)常查詢的tagmodel增加緩存,并為metricmodel緩存當(dāng)前文檔是否存在的狀態(tài)。tagmodel相當(dāng)于監(jiān)控指標(biāo)的一張目錄表,即使是監(jiān)控大型云平臺(tái),監(jiān)控指標(biāo)所有的tag也不會(huì)太多,所以完全可以將tagmodel緩存在內(nèi)存中。在緩存命中的情況下,只需要1次寫入(更新)即可完成數(shù)據(jù)存儲(chǔ)。
而實(shí)際上只有極少數(shù)情況下tagmodel緩存不會(huì)命中:
(1)如果數(shù)據(jù)庫中沒有數(shù)據(jù),則預(yù)讀到內(nèi)存的tagmodel緩存為空,此時(shí)每次出現(xiàn)新的tags,tagmodel緩存都不會(huì)命中。
(2)查詢條件錯(cuò)誤時(shí),tagmodel緩存不會(huì)命中。
(3)控制操作完成后會(huì)生成一條文檔存入數(shù)據(jù)庫,在此之前查詢此文檔,tagmodel緩存不會(huì)命中。
(4)監(jiān)控指標(biāo)變化或者云平臺(tái)節(jié)點(diǎn)改變等原因?qū)е滦碌膖ags產(chǎn)生時(shí),tagmodel緩存不會(huì)命中。
在絕大多數(shù)情況下,tagmodel緩存命中率為100%,其查詢的時(shí)間復(fù)雜度為o(1),基本上解決了寫入放大的問題。
也就是說,在進(jìn)行數(shù)據(jù)存儲(chǔ)時(shí),為需要經(jīng)常查詢的tagmodel增加緩存,并為metricmodel緩存當(dāng)前文檔是否存在的狀態(tài)。
本發(fā)明與現(xiàn)有技術(shù)相比具有如下優(yōu)勢:
(1)結(jié)合虛擬機(jī)/主機(jī)監(jiān)控代理與虛擬化平臺(tái)監(jiān)控代理采集到的基礎(chǔ)數(shù)據(jù),提高了云平臺(tái)基礎(chǔ)數(shù)據(jù)采集的精度和廣度。
(2)本發(fā)明采用插件化采集代理,支持各類云平臺(tái),方便二次開發(fā)。
(3)結(jié)合統(tǒng)一數(shù)據(jù)表達(dá)方式、標(biāo)簽分離、數(shù)據(jù)壓縮與預(yù)熱緩存四種機(jī)制,抵消彼此不足,全方位提高數(shù)據(jù)存儲(chǔ)性能。為監(jiān)控?cái)?shù)據(jù)的高效寫入、更新與查詢以及數(shù)據(jù)可擴(kuò)展和輕量級數(shù)據(jù)維護(hù)特性提供了保障。
實(shí)施本發(fā)明實(shí)施例,具有如下有益效果:本發(fā)明通過采集插件從多個(gè)節(jié)點(diǎn)獲取云平臺(tái)基礎(chǔ)數(shù)據(jù),獲取全面,并且存儲(chǔ)方式合理,不會(huì)產(chǎn)生重復(fù)存儲(chǔ)。
以上僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。