董 博,李 翀,劉學(xué)敏,董科軍
(中國科學(xué)院 計(jì)算機(jī)網(wǎng)絡(luò)信息中心,北京 100190)
基于爬蟲的數(shù)據(jù)監(jiān)控系統(tǒng)①
董 博,李 翀,劉學(xué)敏,董科軍
(中國科學(xué)院 計(jì)算機(jī)網(wǎng)絡(luò)信息中心,北京 100190)
近年來,隨著互聯(lián)網(wǎng)技術(shù)的快速發(fā)展,云計(jì)算服務(wù)開始全面普及,大型互聯(lián)網(wǎng)公司以及中小型企業(yè)已經(jīng)開始提供自己的云計(jì)算服務(wù),中國科學(xué)院也提供了云計(jì)算服務(wù)平臺(tái)——中科院“科技云”.本文針對中國科學(xué)院 “科技云”項(xiàng)目的實(shí)際需求,參考已有商業(yè)云監(jiān)控系統(tǒng)的功能和運(yùn)行模式,設(shè)計(jì)并實(shí)現(xiàn)了一種基于爬蟲的數(shù)據(jù)監(jiān)控系統(tǒng).該系統(tǒng)相比商業(yè)云監(jiān)控系統(tǒng),支持URL(布爾)類型數(shù)據(jù)監(jiān)測的同時(shí),增加了對數(shù)值類型、文本類型的監(jiān)測,更好的支持第三方服務(wù)的監(jiān)測,并實(shí)現(xiàn)了服務(wù)故障警報(bào),監(jiān)測數(shù)據(jù)可視化以及監(jiān)測數(shù)據(jù)分布式存儲(chǔ).
數(shù)據(jù)監(jiān)控; 網(wǎng)絡(luò)爬蟲; 云計(jì)算; 分布式; 可視化
隨著信息技術(shù)和互聯(lián)網(wǎng)產(chǎn)業(yè)創(chuàng)新的不斷發(fā)展,以云計(jì)算為代表的變革性技術(shù)正在迅速的普及,互聯(lián)網(wǎng)進(jìn)入了大數(shù)據(jù)時(shí)代,云計(jì)算技術(shù)得到了廣泛的應(yīng)用和快速的發(fā)展.特別是近幾年來,隨著云基礎(chǔ)服務(wù)能力的提升,基于云計(jì)算的互聯(lián)網(wǎng)輕量級小規(guī)模服務(wù)不斷增多,大量的微小服務(wù)急需第三方支持的松耦合數(shù)據(jù)監(jiān)控系統(tǒng),進(jìn)行有效的服務(wù)監(jiān)控和提醒[1].
本論文針對中國科學(xué)院 “科技云”項(xiàng)目的實(shí)際需求,設(shè)計(jì)并實(shí)現(xiàn)了一種基于爬蟲的數(shù)據(jù)監(jiān)控系統(tǒng).此系統(tǒng)為“科技云”項(xiàng)目所所涵蓋的基礎(chǔ)設(shè)施服務(wù)、平臺(tái)服務(wù)、軟件即服務(wù)等公開發(fā)布的數(shù)據(jù)及服務(wù)狀態(tài),提供有效的服務(wù)監(jiān)控和數(shù)據(jù)匯聚.以滿足服務(wù)管理人員對服務(wù)進(jìn)行實(shí)時(shí)監(jiān)控、以及用戶對服務(wù)狀況進(jìn)行了解,并提供科技云服務(wù)門戶監(jiān)控服務(wù).
云計(jì)算,是一種基于互聯(lián)網(wǎng)的計(jì)算方式,通過此種方式,可以按需把共享的軟硬件資源和信息提供給計(jì)算機(jī)和其他設(shè)備.云計(jì)算描述了一種基于互聯(lián)網(wǎng)的新的IT服務(wù)增加、使用和交付模式,其通常涉及通過互聯(lián)網(wǎng)來提供動(dòng)態(tài)易擴(kuò)展且經(jīng)常是虛擬化的資源[2].
根據(jù)美國國家標(biāo)準(zhǔn)和技術(shù)院對云計(jì)算服務(wù)的定義可明確三種服務(wù)模式[3]:Software-as-a-Service(SaaS,軟件即服務(wù))、Platform-as-a-Service(PaaS,平臺(tái)即服務(wù))及Infrastructure-as-a-Service(IaaS,基礎(chǔ)設(shè)施即服務(wù)).如今的云計(jì)算服務(wù)已經(jīng)非常普及,包括大型互聯(lián)網(wǎng)公司提供的公有云服務(wù)、中小型企業(yè)提供的私有云服務(wù)等.他們在提供云服務(wù)的同時(shí),還提供負(fù)責(zé)監(jiān)控云服務(wù)資源的使用情況、健康狀況等信息的云服務(wù)監(jiān)測功能,如大型的云服務(wù)提供商Amazon、阿里巴巴、騰訊等都有自己的云服務(wù)監(jiān)控系統(tǒng).下面簡單介紹一下以上三個(gè)云服務(wù)監(jiān)控系統(tǒng):
Amazon CloudWatch 是一項(xiàng)針對 AWS (Amazon web services)云資源和在AWS上運(yùn)行的應(yīng)用程序進(jìn)行監(jiān)控的服務(wù).Amazon CloudWatch 能夠監(jiān)控 Amazon EC2 實(shí)例、Amazon DynamoDB 表和 Amazon RDS DB實(shí)例等各種AWS資源,同時(shí)也能夠監(jiān)控應(yīng)用程序和服務(wù)生成的定制指標(biāo),以及應(yīng)用程序生成的任何日志文件[4].
阿里云監(jiān)控是一項(xiàng)針對阿里云資源和互聯(lián)網(wǎng)應(yīng)用進(jìn)行監(jiān)控的服務(wù).云監(jiān)控服務(wù)可用于收集獲取阿里云資源的監(jiān)控指標(biāo),探測互聯(lián)網(wǎng)服務(wù)可用性,以及針對指標(biāo)設(shè)置警報(bào).阿里云監(jiān)控服務(wù)能夠監(jiān)控云服務(wù)ECS、云數(shù)據(jù)庫RDS和負(fù)載均衡等各種云服務(wù)資源,同時(shí)也能夠通過HTTP、CMP等通用網(wǎng)絡(luò)協(xié)議監(jiān)控互聯(lián)網(wǎng)應(yīng)用的可用性[5].
騰訊云監(jiān)控為騰訊云服務(wù)提供全方位監(jiān)控,借助于騰訊海量數(shù)據(jù)處理能力能夠?qū)τ谫Y源及成本進(jìn)行智能化的分析,直觀展示各種云服務(wù)的資源使用狀況、負(fù)載狀況性能及系統(tǒng)健康狀況等[6].
以上公有云服務(wù)平臺(tái)提供的云監(jiān)控服務(wù),存在以下兩個(gè)方面的缺陷:
(1)以企業(yè)自有的公有云服務(wù)為出發(fā)點(diǎn).例如阿里云監(jiān)控主要針對阿里ECS等主機(jī)服務(wù)提供詳細(xì)的云監(jiān)控服務(wù),依賴于具體主機(jī)所提供的內(nèi)部接口服務(wù).例如主機(jī)安全監(jiān)控服務(wù)、網(wǎng)絡(luò)流量監(jiān)控服務(wù)等.
(2)針對第三方的監(jiān)控服務(wù)類型有限.例如對于外部的第三方服務(wù),阿里云只能提供URL服務(wù)正常率訪問監(jiān)測等服務(wù),利用分布式站點(diǎn)來實(shí)現(xiàn)對第三方端口服務(wù)的定期探測,為第三方服務(wù)提供服務(wù)故障郵件等提醒通知.但是沒有提供文本類型數(shù)據(jù)和數(shù)值類型數(shù)據(jù)的監(jiān)測功能.
通過對以上云監(jiān)控系統(tǒng)的分析可知,目前還沒有一款能夠友好全面支持第三方服務(wù)的云監(jiān)控系統(tǒng).根據(jù)中科院“科技云”的實(shí)際需求,在能夠定期監(jiān)測服務(wù)健康率的同時(shí),還需實(shí)現(xiàn)對文本類型和數(shù)值類型數(shù)據(jù)的監(jiān)測功能,因此在已有商業(yè)云服務(wù)監(jiān)控系統(tǒng)的功能和運(yùn)行模式,本課題增加了基于文本類型數(shù)據(jù)和數(shù)值類型數(shù)據(jù)的監(jiān)測方法,并對云服務(wù)資源和監(jiān)控系統(tǒng)之間進(jìn)行解耦,使其能夠友好地支持第三方服務(wù)監(jiān)控,同時(shí)滿足對中科院“科技云”云服務(wù)的監(jiān)控.
本文參考阿里云監(jiān)控等已有商業(yè)云服務(wù)監(jiān)控系統(tǒng)的功能和運(yùn)行模式,結(jié)合中科院“科技云”的實(shí)際需求,設(shè)計(jì)并實(shí)現(xiàn)了一種基于爬蟲的數(shù)據(jù)監(jiān)控平臺(tái).
根據(jù)中國科學(xué)院科技云服務(wù)監(jiān)控需求,科技云服務(wù)監(jiān)控的類型劃分為以下三種類型:文本類型數(shù)據(jù)監(jiān)控、數(shù)值類型數(shù)據(jù)監(jiān)控以及布爾類型數(shù)據(jù)監(jiān)控(URL類型數(shù)據(jù)監(jiān)控).其中URL類型數(shù)據(jù)指傳統(tǒng)的服務(wù)可用性監(jiān)控,通常每次監(jiān)控為布爾值數(shù)據(jù),即 0或 1; 數(shù)值類型的數(shù)據(jù)指具體以浮點(diǎn)類型所監(jiān)控到的數(shù)據(jù),例如某項(xiàng)服務(wù)的數(shù)據(jù)值等; 文本類型數(shù)據(jù)為字符串類型,每種類型的文本類型數(shù)據(jù)可自定義解析代碼,在后期進(jìn)行數(shù)據(jù)解析、處理和可視化.
根據(jù)每種數(shù)據(jù)類型的特點(diǎn)和網(wǎng)絡(luò)爬蟲技術(shù),分別實(shí)現(xiàn)對相應(yīng)數(shù)據(jù)的爬取; 并為方便服務(wù)管理人員和用戶快速聚焦到關(guān)注的服務(wù)和數(shù)據(jù)上,而實(shí)現(xiàn)了數(shù)據(jù)的可視化,以及發(fā)生故障的報(bào)警.系統(tǒng)設(shè)計(jì)主要分為數(shù)據(jù)獲取層、數(shù)據(jù)存儲(chǔ)層及數(shù)據(jù)訪問層三部分,整體架構(gòu)圖如圖1所示.
數(shù)據(jù)獲取層通過爬蟲引擎和相應(yīng)的適配器獲取各類資源數(shù)據(jù),然后按照對應(yīng)的時(shí)間單位 (例如:分鐘,小時(shí),天等)拼接成JSON字符串,每次爬取都會(huì)生成一個(gè)JSON字符串.把JSON數(shù)據(jù)傳輸?shù)綌?shù)據(jù)存儲(chǔ)層,通過Cobar中間件交由分布式MySQL數(shù)據(jù)庫進(jìn)行存儲(chǔ).當(dāng)數(shù)據(jù)訪問層訪問數(shù)據(jù)時(shí),直接從數(shù)據(jù)存儲(chǔ)層拉取對應(yīng)的JSON數(shù)據(jù)并解析,對解析出來的數(shù)據(jù)進(jìn)行可視化或者提供給接口訪問等.為了方便對數(shù)據(jù)的處理,這三個(gè)模塊之間統(tǒng)一利用JSON數(shù)據(jù)作為傳輸手段,省去了各模塊之間傳輸數(shù)據(jù)不一致造成的麻煩.
圖1 系統(tǒng)總體框圖
數(shù)據(jù)獲取層主要實(shí)現(xiàn)用戶定制監(jiān)測項(xiàng)、服務(wù)器定時(shí)監(jiān)測指定監(jiān)測項(xiàng)并爬取監(jiān)測項(xiàng)數(shù)據(jù).根據(jù)監(jiān)測的數(shù)據(jù)類型,分別利用不同適配器進(jìn)行監(jiān)測和爬取數(shù)據(jù).適配器主要分為布爾類型、數(shù)值類型、文本類型以及數(shù)據(jù)庫爬取等類型.
布爾類型適配器通過http協(xié)議訪問[7],定時(shí)探測URL 地址,分為 GET、POST、HEAD 訪問,根據(jù)訪問獲取的狀態(tài)碼和響應(yīng)時(shí)間判斷監(jiān)控對象是否能夠正常訪問,然后將其轉(zhuǎn)換成布爾值并存儲(chǔ).監(jiān)測數(shù)值類型與文本類型數(shù)據(jù)的方法相一致,都是通過URL地址去訪問被監(jiān)測對象的接口[8],兩者利用相同的適配器爬取其中的數(shù)據(jù),然后在后臺(tái)分析數(shù)據(jù)所屬類型,并進(jìn)行相應(yīng)的存儲(chǔ).數(shù)據(jù)庫爬取適配器即根據(jù)用戶的數(shù)據(jù)庫配置信息連接遠(yuǎn)程數(shù)據(jù)庫,從中爬取數(shù)據(jù),并根據(jù)分析數(shù)據(jù)的所屬類型進(jìn)行存儲(chǔ).
數(shù)據(jù)存儲(chǔ)層主要實(shí)現(xiàn)對監(jiān)測數(shù)據(jù)的存儲(chǔ)和查詢.由于單節(jié)點(diǎn)數(shù)據(jù)庫無法滿足對大量監(jiān)測數(shù)據(jù)的存取,且對服務(wù)器的性能要求較高,因此本系統(tǒng)數(shù)據(jù)存儲(chǔ)層采用分布式數(shù)據(jù)庫存儲(chǔ)技術(shù)[9].分布式數(shù)據(jù)庫對網(wǎng)絡(luò)中各結(jié)點(diǎn)計(jì)算機(jī)配置要求不高,同時(shí)提高了系統(tǒng)的可靠性,再者其非常便于擴(kuò)充[10].
本系統(tǒng)的分布式數(shù)據(jù)庫將數(shù)據(jù)表進(jìn)行水平拆分,均衡地分配給各個(gè)數(shù)據(jù)庫結(jié)點(diǎn),然后利用中間件來管理各個(gè)數(shù)據(jù)庫結(jié)點(diǎn),并將其作為應(yīng)用層訪問數(shù)據(jù)庫的統(tǒng)一接口.如圖2所示.
圖2 數(shù)據(jù)存儲(chǔ)層架構(gòu)
數(shù)據(jù)訪問層包括接口封裝和訪問、可視化與展示、故障報(bào)警.
接口封裝和訪問,是提供給用戶的公共URL訪問接口.接口模塊有兩種用途:第一,用于供用戶訪問并獲取監(jiān)測的數(shù)據(jù).用戶可以通過URL請求,訪問指定監(jiān)測對象的監(jiān)測數(shù)據(jù),數(shù)據(jù)以統(tǒng)一的JSON格式展現(xiàn),支持三種數(shù)據(jù)類型的數(shù)據(jù).第二,用于給可視化模塊提供接口訪問,完成數(shù)據(jù)的可視化,數(shù)據(jù)格式的統(tǒng)一,為數(shù)據(jù)可視化提供很大的便利; 可視化模塊通過訪問對應(yīng)的接口,利用統(tǒng)一的解析方法對數(shù)據(jù)進(jìn)行解析,最終可視化出相應(yīng)的圖表.
本監(jiān)控系統(tǒng)的監(jiān)控流程為:用戶定制監(jiān)測項(xiàng)(包括監(jiān)測時(shí)間粒度、監(jiān)測地址、數(shù)據(jù)庫配置信息等)、服務(wù)器提取監(jiān)測項(xiàng)配置信息并按照配置進(jìn)行定時(shí)監(jiān)測、服務(wù)器把監(jiān)測數(shù)據(jù)持久化、用戶通過系統(tǒng)提供的接口查看監(jiān)測數(shù)據(jù)以及對監(jiān)測數(shù)據(jù)進(jìn)行可視化.
本系統(tǒng)支持多類型數(shù)據(jù)的監(jiān)測,包括URL探測、對象接口以及DB的爬取.監(jiān)測不同類型的數(shù)據(jù)需要實(shí)現(xiàn)不同的適配器,且需要在同樣的任務(wù)調(diào)度邏輯中進(jìn)行,因此抽取共有的任務(wù)調(diào)度邏輯聲明為接口job,其中調(diào)度方法為call().不同類型數(shù)據(jù)的適配器通過實(shí)現(xiàn)job中的call()方法完成不同的監(jiān)測邏輯,且共用一致的調(diào)度邏輯,這樣任務(wù)調(diào)度不用關(guān)心每種類型監(jiān)測項(xiàng)的監(jiān)測邏輯的具體實(shí)現(xiàn),只需執(zhí)行接口job中的call()方法即可.如圖3所示.
圖3 任務(wù)調(diào)度架構(gòu)
本平臺(tái)通過爬取不同類型的數(shù)據(jù)實(shí)現(xiàn)對各類云服務(wù)的監(jiān)控.數(shù)據(jù)類型有文本類型、數(shù)值類型、以及布爾類型數(shù)據(jù),爬取不同類型數(shù)據(jù)需要不同的適配器,不同適配器的實(shí)現(xiàn)方式包括通過HTTP協(xié)議的GET、POST、HEAD請求訪問監(jiān)控對象,爬取監(jiān)控對象的接口,直接爬取監(jiān)控對象數(shù)據(jù)庫等方式.如圖4所示.
圖4 爬取策略
根據(jù)GET、POST、HEAD請求訪問服務(wù)器,監(jiān)測服務(wù)器響應(yīng)時(shí)間、狀態(tài)碼等數(shù)據(jù),并根據(jù)以上數(shù)據(jù)判斷服務(wù)是否能夠正常訪問,此類數(shù)據(jù)歸為布爾類型數(shù)據(jù),即用1、0分別表示服務(wù)正常與否,主要用來監(jiān)測云服務(wù)的健康度,這也是主流的監(jiān)控系統(tǒng)所具備的通用功能,如阿里云監(jiān)控、騰訊云監(jiān)控等.
爬取數(shù)據(jù)庫是通過服務(wù)器端直接訪問監(jiān)測對象數(shù)據(jù)庫,并利用用戶設(shè)置的SQL語句直接查詢監(jiān)測對象的數(shù)據(jù)庫,并把數(shù)據(jù)存儲(chǔ)到監(jiān)控系統(tǒng)中,由于數(shù)據(jù)庫中存儲(chǔ)著多種類型的數(shù)據(jù),包括文本類型、數(shù)值類型等,不能把爬取的數(shù)據(jù)統(tǒng)一歸為某一數(shù)據(jù)類型,必須對爬取的數(shù)據(jù)進(jìn)行解析并判斷所屬類型,然后存儲(chǔ)至相應(yīng)的數(shù)據(jù)庫或表中.
爬取監(jiān)控對象接口是通過訪問監(jiān)控對象提供的接口獲取數(shù)據(jù).服務(wù)提供的數(shù)據(jù)接口主要以JSON數(shù)據(jù)返回,但是直接將JSON數(shù)據(jù)存儲(chǔ)到監(jiān)控系統(tǒng)中無法從中挖掘到監(jiān)控信息,必須對JSON數(shù)據(jù)進(jìn)行解析,從而獲取有價(jià)值的數(shù)據(jù),并分辨出數(shù)據(jù)類型,然后把數(shù)據(jù)存儲(chǔ)至對應(yīng)的數(shù)據(jù)庫或表中,供監(jiān)控系統(tǒng)分析監(jiān)控對象的狀況.
數(shù)據(jù)的爬取策略主要目的是通過對爬取到的各類型數(shù)據(jù)進(jìn)行統(tǒng)一的解析、過濾,從中挖掘出有價(jià)值的數(shù)據(jù),并按照對應(yīng)的類型存儲(chǔ)至相應(yīng)的數(shù)據(jù)庫或表中.通過對數(shù)據(jù)進(jìn)行統(tǒng)一地處理、存儲(chǔ),大大降低了監(jiān)控系統(tǒng)對監(jiān)測對象數(shù)據(jù)分析的難度,監(jiān)控系統(tǒng)只需從數(shù)據(jù)庫提取數(shù)據(jù),并對數(shù)值類型、文本類型、布爾類型這三種數(shù)據(jù)進(jìn)行處理分析即可,而無需關(guān)心數(shù)據(jù)的來源.此外,接口訪問模塊只需提供這三類數(shù)據(jù)接口,同時(shí)可視化只要針對這三種類型數(shù)據(jù)進(jìn)行可視化.數(shù)據(jù)的爬取策略從整體上減少了各模塊的耦合,降低了開發(fā)成本.
以下是爬取的三類數(shù)據(jù)示例:
(1)該類數(shù)據(jù)中只有單純的數(shù)值,這類數(shù)據(jù)歸為數(shù)值類型數(shù)據(jù).
(2)這類數(shù)據(jù)中除了數(shù)值數(shù)據(jù)外,還有其它文本數(shù)據(jù),不能對其進(jìn)行統(tǒng)一的解析,必須為其實(shí)現(xiàn)單獨(dú)的解析策略,因此將其歸為文本類型數(shù)據(jù).
(3)該類數(shù)據(jù)是通過http協(xié)議訪問URL地址獲取的數(shù)據(jù),用來監(jiān)測服務(wù)是否正常,其中health表示服務(wù)是否正常(1表示正常),avgReponseTime表示響應(yīng)時(shí)間,該類數(shù)據(jù)歸為URL監(jiān)測數(shù)據(jù),即布爾類型數(shù)據(jù).
本系統(tǒng)主要爬取三種類型數(shù)據(jù),因此存儲(chǔ)時(shí)需對三類數(shù)據(jù)進(jìn)行分別存儲(chǔ),同時(shí)為方便對三類監(jiān)測數(shù)據(jù)進(jìn)行訪問以及可視化,需對這些數(shù)據(jù)分別進(jìn)行統(tǒng)計(jì),以此滿足系統(tǒng)的需求.
監(jiān)控系統(tǒng)爬取的數(shù)據(jù)是以用戶或管理人員配置監(jiān)測項(xiàng)的時(shí)間粒度為單位,以五分鐘、十分鐘、三十分鐘或者一個(gè)小時(shí)等為時(shí)間間隔,每個(gè)監(jiān)測項(xiàng)的時(shí)間粒度不一定一致,但為方便數(shù)據(jù)的統(tǒng)計(jì)以及可視化,需要統(tǒng)一這些監(jiān)測數(shù)據(jù)的統(tǒng)計(jì)單位,例如,全部轉(zhuǎn)換為以天、周或者月等為單位的監(jiān)測數(shù)據(jù),這樣將極大地簡化后續(xù)的數(shù)據(jù)統(tǒng)計(jì)及可視化.本系統(tǒng)采用的統(tǒng)計(jì)單位為天,即把各個(gè)監(jiān)測數(shù)據(jù)最終按天進(jìn)行統(tǒng)計(jì)存儲(chǔ).
爬取的數(shù)據(jù)類型不同,統(tǒng)一統(tǒng)計(jì)單位時(shí)所用的策略也就不同,下面對布爾類型數(shù)據(jù)和數(shù)值類型數(shù)據(jù)的統(tǒng)計(jì)策略進(jìn)行簡單介紹.
(1)布爾類型數(shù)據(jù),其數(shù)據(jù)內(nèi)容主要由1、0組成,其代表所監(jiān)測的服務(wù)健康與否.監(jiān)測的時(shí)間粒度一般為一小時(shí)以內(nèi),但按此時(shí)間粒度為單位進(jìn)行統(tǒng)計(jì),統(tǒng)計(jì)的數(shù)據(jù)偶然性較大且統(tǒng)計(jì)單位過小,不利于從大范圍觀察服務(wù)一段時(shí)間內(nèi)的整體運(yùn)行情況.
布爾類型數(shù)據(jù)按天為單位進(jìn)行統(tǒng)計(jì)時(shí),云服務(wù)管理人員和用戶關(guān)心的是云服務(wù)一天的健康情況,即一天內(nèi)服務(wù)正常運(yùn)行所在的比率——健康率,因此我們計(jì)算一天內(nèi)服務(wù)正常的次數(shù)與上一天的監(jiān)測次數(shù)的比值,算出一天的健康率.
(2)數(shù)值類型數(shù)據(jù),其數(shù)據(jù)內(nèi)容為整型或浮點(diǎn)型數(shù)據(jù),其通常表示一些服務(wù)的注冊人數(shù)、登錄人數(shù)、資源使用率等情況.
數(shù)值類型數(shù)據(jù)按天為單位統(tǒng)計(jì)時(shí),服務(wù)管理人員或用戶關(guān)心的是服務(wù)在一天內(nèi)增加的個(gè)數(shù)、峰值、最小值等信息.關(guān)注的是某個(gè)點(diǎn)的數(shù)據(jù),而不是比率數(shù)據(jù),因此統(tǒng)計(jì)數(shù)值類型數(shù)據(jù)時(shí),主要統(tǒng)計(jì)一天內(nèi)最后監(jiān)測的值、最大值以及最小值等數(shù)據(jù).
數(shù)據(jù)訪問通過接口訪問模塊進(jìn)行,接口訪問模塊主要供用戶獲取監(jiān)測數(shù)據(jù),以及給可視化提供數(shù)據(jù)來源.本平臺(tái)通過對監(jiān)測數(shù)據(jù)進(jìn)行處理、解析、格式化,最終轉(zhuǎn)換為統(tǒng)一的JSON格式.系統(tǒng)對每種類型的監(jiān)測數(shù)據(jù)進(jìn)行單獨(dú)的解析,抽取出對應(yīng)的關(guān)鍵數(shù)據(jù),并把這些數(shù)據(jù)拼接成統(tǒng)一格式的JSON數(shù)據(jù),返回給訪問者,這樣極大地簡化了解析通過接口獲取監(jiān)測數(shù)據(jù)的過程.
通過上一章可知,系統(tǒng)會(huì)對爬取的數(shù)據(jù)進(jìn)行統(tǒng)計(jì).系統(tǒng)會(huì)在每天凌晨一點(diǎn)對前一天的布爾類型、數(shù)值類型及文本類型三類數(shù)據(jù)按不同邏輯進(jìn)行統(tǒng)計(jì),并把實(shí)時(shí)的監(jiān)測數(shù)據(jù)和統(tǒng)計(jì)的監(jiān)測數(shù)據(jù)分開存儲(chǔ)至數(shù)據(jù)庫中.這樣當(dāng)訪問統(tǒng)計(jì)結(jié)果時(shí)不用臨時(shí)計(jì)算,而是直接從數(shù)據(jù)庫中查詢即可.
對于布爾類型、數(shù)值類型及文本類型這三類數(shù)據(jù),系統(tǒng)提供了基于JSON的數(shù)據(jù)訪問方式,并提供了基于標(biāo)準(zhǔn)數(shù)據(jù)訪問的可視化訪問.用戶通過URL地址訪問系統(tǒng)接口來進(jìn)行數(shù)據(jù)訪問和可視化,分別通過以下幾種方式進(jìn)行訪問(productName為產(chǎn)品名稱、collector-Name為監(jiān)測項(xiàng)名稱):
(1)最新數(shù)據(jù)訪問
訪問最新數(shù)據(jù)時(shí),系統(tǒng)會(huì)從數(shù)據(jù)庫中查詢存放實(shí)時(shí)監(jiān)測數(shù)據(jù)的數(shù)據(jù)表,查詢出距訪問時(shí)間最近的一次監(jiān)測數(shù)據(jù),系統(tǒng)將查詢結(jié)果拼接成JSON數(shù)據(jù)返回給訪問者.因?yàn)槿N類型的監(jiān)測數(shù)據(jù)存儲(chǔ)在不同的數(shù)據(jù)表中,所以通過發(fā)送不同的URL請求進(jìn)行訪問.
目前,企業(yè)文化受到了企業(yè)管理者的高度重視,具體是從和諧、發(fā)展、利益角度進(jìn)行規(guī)范。在財(cái)務(wù)管理方面的文化構(gòu)建還是較少的,中小企業(yè)必須要從這方面進(jìn)行完善。企業(yè)文化指導(dǎo)財(cái)務(wù)管理制度的制定,主要是因?yàn)樨?cái)務(wù)管理是企業(yè)的核心,同時(shí)企業(yè)文化需要財(cái)務(wù)管理作為介質(zhì)進(jìn)行體現(xiàn)。企業(yè)經(jīng)營的目的是收益最大化,而財(cái)務(wù)管理恰恰是有效的控制和計(jì)算該目的的工具。企業(yè)能否正常經(jīng)營并得到高效的回報(bào),取決于正確的準(zhǔn)則和精神指導(dǎo),這樣才能加強(qiáng)員工之間的交流合作,為企業(yè)創(chuàng)造更多的經(jīng)濟(jì)效益[4]。
http://{hostname}/probe/api/data/{productName}/{c ollectorName},訪問最新數(shù)值和文本類型數(shù)據(jù);http://{hostname}/probe/api/url/{productName}/{collecto rName},訪問最新布爾類型數(shù)據(jù),如下所示:
獲取最新的數(shù)據(jù)類型數(shù)據(jù),其中watchTime是這條數(shù)據(jù)的獲取時(shí)間,data字段是監(jiān)控值.
(2)統(tǒng)計(jì)數(shù)據(jù)訪問
用戶可訪問最近n天、n月或者n年的統(tǒng)計(jì)數(shù)據(jù).系統(tǒng)把各類統(tǒng)計(jì)數(shù)據(jù)存放在單獨(dú)的數(shù)據(jù)表中,本系統(tǒng)只存儲(chǔ)以天為單位的統(tǒng)計(jì)數(shù)據(jù).當(dāng)用戶訪問統(tǒng)計(jì)數(shù)據(jù)時(shí),系統(tǒng)通過解析URL地址判斷訪問的數(shù)據(jù)類型,并判斷訪問統(tǒng)計(jì)數(shù)據(jù)的計(jì)量單位(天、月、年等).若以天為單位進(jìn)行訪問,系統(tǒng)直接根據(jù)URL中指定的天數(shù),從存放統(tǒng)計(jì)數(shù)據(jù)的表中查詢最近的n天數(shù)據(jù); 若按月或者年為單位進(jìn)行訪問時(shí),系統(tǒng)依然從存放統(tǒng)計(jì)數(shù)據(jù)的表中查詢,由于表中只存放以天為單位的統(tǒng)計(jì)數(shù)據(jù),因此系統(tǒng)需對查詢的統(tǒng)計(jì)數(shù)據(jù)進(jìn)行計(jì)算,并把結(jié)果拼接成JSON數(shù)據(jù)返回給用戶.
不同類型的數(shù)據(jù),其計(jì)算方式不同.如上一章所述,若為布爾類型數(shù)據(jù),對查詢的最近n月或者n年數(shù)據(jù)按時(shí)間段求平均值; 若為數(shù)值類型或文本類型,則查詢最近n月或者n年的數(shù)據(jù)中每個(gè)時(shí)間段的最后的監(jiān)測數(shù)據(jù),或者最大值、最小值等數(shù)據(jù).
http://{hostname}/probe/api/stats/{productName}/{c ollectorName}?[day|month|year]=value,訪問最近一段時(shí)間的監(jiān)測數(shù)據(jù),其中參數(shù)“day|month|year”表示“天|月|年”為單位,例如day=30表示之前30天的數(shù)值統(tǒng)計(jì).如下所示:
獲取監(jiān)測項(xiàng)最近5天的統(tǒng)計(jì)數(shù)據(jù),data中的五組數(shù)據(jù)為每天的統(tǒng)計(jì)結(jié)果.
布爾類型數(shù)據(jù)主要展示一個(gè)服務(wù)的正常率,反映一個(gè)網(wǎng)站或服務(wù)近期的健康狀態(tài),為用戶維護(hù)網(wǎng)站或服務(wù)提供參考.監(jiān)控系統(tǒng)對每個(gè)監(jiān)控對象的監(jiān)測數(shù)據(jù)(主要包括狀態(tài)碼,響應(yīng)時(shí)間等)進(jìn)行統(tǒng)計(jì),計(jì)算出監(jiān)控對象每天、每周、每月、每年等不同時(shí)間粒度的服務(wù)正常率,即對監(jiān)測數(shù)據(jù)按不同時(shí)間粒度求平均值.該值通過訪問系統(tǒng)的統(tǒng)計(jì)數(shù)據(jù)接口獲得,然后結(jié)合時(shí)間粒度的數(shù)據(jù),組成坐標(biāo)軸中的X軸、Y軸(平均值為Y軸,時(shí)間粒度為X軸),通過折線圖、柱狀圖等形式可視化,以此反映最近一段時(shí)間內(nèi)不同時(shí)間粒度下的服務(wù)正常率.
數(shù)值類型數(shù)據(jù)的可視化主要是展示一些隨著時(shí)間變化、且對用戶有參考價(jià)值的數(shù)值數(shù)據(jù)或者展示某一類資源的實(shí)時(shí)狀態(tài).數(shù)值類型數(shù)據(jù)的可視化由二維數(shù)據(jù)構(gòu)成,其中X 軸為一組數(shù)據(jù),Y軸為一組數(shù)據(jù),通過折線圖或者柱狀圖展示兩者之間的關(guān)系.例如,注冊用戶數(shù)、網(wǎng)站訪問量、服務(wù)器資源利用率、超級計(jì)算機(jī)的作業(yè)數(shù)量等都是數(shù)值類型數(shù)據(jù)的可視化.
通過該 URL 地址,http://{hostname}/probe/api/chart/{productName}/{collectorName},訪問監(jiān)測對象的可視化結(jié)果,圖5為某布爾類型數(shù)據(jù)的可視化結(jié)果.
本監(jiān)控系統(tǒng)基于Spring MVC框架,利用分布式數(shù)據(jù)庫存儲(chǔ)服務(wù)監(jiān)測項(xiàng)以及服務(wù)監(jiān)測數(shù)據(jù),采用Spring中集成的Quartz——開源作業(yè)調(diào)度框架實(shí)現(xiàn)服務(wù)平臺(tái)的定時(shí)任務(wù)功能,借用Echarts——純Javascript的圖表庫,設(shè)計(jì)并實(shí)現(xiàn)監(jiān)測數(shù)據(jù)的可視化.
數(shù)據(jù)訪問層利用Spring MVC框架實(shí)現(xiàn).Spring MVC框架是一個(gè)基于驅(qū)動(dòng)的MVC框架,通過實(shí)現(xiàn)Model-View-Controller模式很好的將數(shù)據(jù)、業(yè)務(wù)與展現(xiàn)進(jìn)行分離.用戶在視圖層可以配置監(jiān)測對象信息,在模型層進(jìn)行任務(wù)調(diào)度、數(shù)據(jù)爬取以及存儲(chǔ)邏輯.
數(shù)據(jù)爬取通過定時(shí)執(zhí)行多種適配器來爬取監(jiān)測數(shù)據(jù),本系統(tǒng)利用Quartz來實(shí)現(xiàn)任務(wù)調(diào)度和定時(shí)任務(wù).Quartz是OpenSymphony開源組織在Job scheduling領(lǐng)域的一個(gè)開源項(xiàng)目,其開源作業(yè)調(diào)度框架完全由java編寫,它可以與J2EE和J2SE應(yīng)用程序相結(jié)合也可以單獨(dú)使用.Quartz具有很大的靈活性而又不失簡單性,用戶可以通過它來為一個(gè)作業(yè)創(chuàng)建簡單的或復(fù)雜的調(diào)度[11].
數(shù)據(jù)存儲(chǔ)層利用分布式數(shù)據(jù)庫存儲(chǔ)數(shù)據(jù).本系統(tǒng)的分布式數(shù)據(jù)庫由Cobar中間件和多個(gè)MySQL數(shù)據(jù)庫實(shí)例組成.
Cobar是Alibaba開源的MySQL分布式處理中間件,是阿里巴巴B2B前臺(tái)應(yīng)用訪問數(shù)據(jù)庫的統(tǒng)一入口[12],它可以在分布式的環(huán)境下像傳統(tǒng)數(shù)據(jù)庫一樣提供海量數(shù)據(jù)服務(wù).Cobar支持將一張表水平拆分成多份并分別放入不同的庫,以此實(shí)現(xiàn)表的水平拆分,也支持將不同的表放入不同的庫.本系統(tǒng)主要使用第一種方式,將監(jiān)測數(shù)據(jù)表進(jìn)行水平拆分,均衡地分配到每個(gè)數(shù)據(jù)庫實(shí)例中,每個(gè)數(shù)據(jù)庫中保存被分配的數(shù)據(jù)分片,以及其他數(shù)據(jù)分片的備份,在保證高性能的同時(shí)提高穩(wěn)定性.
應(yīng)用層通過Cobar進(jìn)行數(shù)據(jù)訪問,Cobar根據(jù)解析收到的SQL語句,判斷該語句所涉及的數(shù)據(jù)分布在哪些分庫上,然后分發(fā)到各個(gè)分庫執(zhí)行,Cobar將分庫的執(zhí)行結(jié)果進(jìn)行合并、處理,最后返回給應(yīng)用層.
可視化模塊通過百度的Echarts——純Javascript的圖表庫實(shí)現(xiàn),此圖表庫可以流暢的運(yùn)行在PC和移動(dòng)端,兼容當(dāng)前主流瀏覽器 (IE8/9/10/11,Chrome,Firefox,Safari等),底層依賴輕量級的 Canvas類庫 ZRender,提供直觀、生動(dòng)、可交互、可高度個(gè)性化定制的數(shù)據(jù)可視化圖表.
本系統(tǒng)將Echarts集成到系統(tǒng)中,并基于Echarts實(shí)現(xiàn)更多的定制功能,讓其在同一表中實(shí)現(xiàn)對多種時(shí)間粒度的可視化,并可任意切換.如圖5所示可同時(shí)對以日、周、月、年為時(shí)間粒度進(jìn)行可視化.
目前,本監(jiān)控系統(tǒng)已部署在服務(wù)器上并應(yīng)用于中科院科技云中,用戶可以根據(jù)配置信息定時(shí)監(jiān)控科技云的用戶數(shù)據(jù)、服務(wù)資源利用率、服務(wù)健康率等數(shù)據(jù).服務(wù)管理人員和用戶可以通過監(jiān)控系統(tǒng)定制監(jiān)控對象,監(jiān)控時(shí)間粒度來監(jiān)測關(guān)注的服務(wù).該系統(tǒng)除監(jiān)控科技云服務(wù)外,可對第三方服務(wù)進(jìn)行監(jiān)控,用戶只需正確配置監(jiān)控對象信息,系統(tǒng)便可執(zhí)行監(jiān)控,實(shí)現(xiàn)了對布爾類型、數(shù)值類型、文本類型的監(jiān)控.本監(jiān)控系統(tǒng)除可用于中科院科技云監(jiān)控外,也可作為企業(yè)和公司內(nèi)部私有云的監(jiān)控系統(tǒng).
圖6列出了中科院“科技云”托管的云服務(wù)的運(yùn)行情況.可視化出了各個(gè)服務(wù)每天的健康運(yùn)行情況.
圖5 監(jiān)測對象可視化結(jié)果
圖6 服務(wù)資源使用情況
圖7和圖8是中科院計(jì)算機(jī)網(wǎng)絡(luò)信息中心下超級計(jì)算機(jī)中的作業(yè)運(yùn)行情況和資源利用率等信息,包含了中科院內(nèi)一些研究所利用超級計(jì)算機(jī)的情況.圖9和圖10是中科院“科技云”下團(tuán)隊(duì)文檔庫的.團(tuán)隊(duì)文檔庫是計(jì)算機(jī)網(wǎng)絡(luò)信息中心對外提供的團(tuán)隊(duì)協(xié)作服務(wù),圖中分別列出了團(tuán)隊(duì)文檔庫的月活躍用戶數(shù)和日訪問量.
圖7 超級計(jì)算機(jī)作業(yè)運(yùn)行情況
圖8 超級計(jì)算機(jī)資源使用情況
圖9 團(tuán)隊(duì)文檔庫月活躍用戶
圖10 團(tuán)隊(duì)文檔庫日訪問量
本文根據(jù)中科院科技云的實(shí)際情況,基于網(wǎng)絡(luò)爬蟲技術(shù)設(shè)計(jì)并實(shí)現(xiàn)了數(shù)據(jù)監(jiān)控系統(tǒng).結(jié)合科技云的服務(wù)和數(shù)據(jù)的特點(diǎn),重點(diǎn)設(shè)計(jì)了數(shù)據(jù)爬取和統(tǒng)計(jì)策略、監(jiān)控和存取邏輯,以適應(yīng)對多種類型數(shù)據(jù)的爬取和存儲(chǔ); 同時(shí),為保證服務(wù)正常、高效地運(yùn)行,設(shè)計(jì)和實(shí)現(xiàn)了對數(shù)據(jù)的可視化以及故障報(bào)警功能.該系統(tǒng)兼容多類型數(shù)據(jù)的爬取,具備可定制性強(qiáng)、可視化界面簡潔重點(diǎn)突出、實(shí)時(shí)故障報(bào)警等特點(diǎn),能夠滿足服務(wù)管理人員和用戶對科技云服務(wù)監(jiān)控的需求.
1Aceto G,Botta A,DE Donato W,et al.Cloud monitoring:A survey.Computer Networks,2013,57(9):2093–2115.[doi:10.1016/j.comnet.2013.04.001]
2Armbrust M,Fox A,Griffith R,et al.A view of cloud computing.Communications of the ACM,2010,53(4):50–58.[doi:10.1145/1721654]
3Mell P,Grance T.The NIST definition of cloud computing.Communications of the ACM,2010,53(6):50–50.
4Varia J,Mathew S.Overview of amazon web services.Amazon Web Services,2014.
5云監(jiān)控.http://www.aliyun.com/product/jiankong/.
6基礎(chǔ)監(jiān)控 BCM.https://www.qcloud.com/product/cm.html#wiki.
7劉繼紅,吳軍華,任明鑫.基于改進(jìn)的網(wǎng)絡(luò)蜘蛛算法抽取Web站點(diǎn)結(jié)構(gòu)的方法.江南大學(xué)學(xué)報(bào)(自然科學(xué)版),2009,8(5):555–559.
8徐遠(yuǎn)超,劉江華,劉麗珍,等.基于 Web 的網(wǎng)絡(luò)爬蟲的設(shè)計(jì)與實(shí)現(xiàn).微計(jì)算機(jī)信息,2007,23(21):119–121.[doi:10.3969/j.issn.1008-0570.2007.21.048]
9邵佩英.分布式數(shù)據(jù)庫系統(tǒng)及其應(yīng)用.北京:科學(xué)出版社,2000.
10龐惠,翟正利.論分布式數(shù)據(jù)庫.電腦知識與技術(shù),2011,7(2):271–273.
11胡利強(qiáng),周冬初,王偉.Quartz 調(diào)度器與 Web 程序整合的研究和應(yīng)用.計(jì)算機(jī)與現(xiàn)代化,2010,(8):98–99,104.
Spider-Based Data Monitor System
DONG Bo,LI Chong,LIU Xue-Min,DONG Ke-Jun
(Computer Network Information Center,Chinese Academy of Sciences,Beijing 100190,China)
In recent years,with the rapid development of Internet technology,cloud computing services begin to widely spread.Large-scale Internet companies,small and medium enterprises have begun to provide their own cloud computing services.The Chinese Academy of Sciences also provides a cloud computing service platform - CAS “science-cloud”.Concerned with the actual needs of the “Science Cloud” project of the Chinese Academy of Sciences,this paper designs and implements a spider-based data monitoring system referencing the function and operation mode of the existing commercial cloud monitoring systems.Compared with the commercial cloud monitoring system,this system supports the monitoring of URL (Boolean)type data,adds the monitoring of numeric types and text types,supports better monitoring of the third party services,and realizes service failure alarm and monitoring data Visualization and monitoring data distributed storage.
data monitor; web crawler; cloud computing; distributed; visualization
董博,李翀,劉學(xué)敏,董科軍.基于爬蟲的數(shù)據(jù)監(jiān)控系統(tǒng).計(jì)算機(jī)系統(tǒng)應(yīng)用,2017,26(10):53–60.http://www.c-s-a.org.cn/1003-3254/5978.html
中國科學(xué)院十二五信息化專項(xiàng)《科研信息化應(yīng)用推進(jìn)工程》(XXH12503)
2017-01-10; 采用時(shí)間:2017-02-13