羅 波 董東野 田曉玲 劉鵬飛
(1.北京工業(yè)職業(yè)技術(shù)學(xué)院信息工程學(xué)院,北京 100042;2.北京優(yōu)特捷信息技術(shù)有限公司,北京 100102)
隨著云計算技術(shù)的快速發(fā)展,越來越多的高校開始采用云計算平臺來支持各類教學(xué)、科研和管理工作。高校數(shù)據(jù)中心云計算平臺作為高校的核心基礎(chǔ)設(shè)施,承擔(dān)著大量計算、存儲和網(wǎng)絡(luò)資源的管理及調(diào)度任務(wù)。為了確保云計算平臺的可靠性、通用性和資源動態(tài)伸縮,需要對整個云計算平臺的應(yīng)用服務(wù)進(jìn)行實時監(jiān)控和管理。
在監(jiān)控系統(tǒng)中,最重要的就是采集應(yīng)用程序運行的各項數(shù)據(jù)指標(biāo),這些指標(biāo)能夠說明應(yīng)用程序在系統(tǒng)中資源占用的情況。例如,當(dāng)請求數(shù)較高時,系統(tǒng)響應(yīng)變慢,如果有請求計數(shù)指標(biāo),則可以確定原因并增加計算資源?;赑rometheus的監(jiān)控系統(tǒng)具有高度可擴(kuò)展性和靈活性,能夠滿足高校數(shù)據(jù)中心云計算平臺的監(jiān)控和管理需求。
監(jiān)控是生產(chǎn)環(huán)境必需的一部分,是穩(wěn)定服務(wù)的基礎(chǔ)。在高校Kubernetes容器資源管理平臺中面臨的監(jiān)控需求:①合理的維護(hù)成本;②監(jiān)控大量高動態(tài)的系統(tǒng)組件;③既要對單個組件、也要對整體區(qū)域的多個維度進(jìn)行測量、分析和報警。
負(fù)責(zé)谷歌Borg集群管理系統(tǒng)的監(jiān)控系統(tǒng)從自定義的腳本進(jìn)化到Borgmon,提供了基于時間序列(Time-Series)的監(jiān)控系統(tǒng)。Prometheus是一款開源的、基于谷歌Borgmon開發(fā)的監(jiān)控和警報系統(tǒng)[1],具有高度可擴(kuò)展性和靈活性,適用于大規(guī)模的分布式系統(tǒng)監(jiān)控。高校Kubernetes容器資源管理平臺源于谷歌的Borg系統(tǒng),故Prometheus系統(tǒng)非常適合用于Kubernetes對Pod的監(jiān)控。
在高校Kubernetes容器資源管理平臺中,啟用的業(yè)務(wù)大部分是以Pod的方式發(fā)布[2]。cAdvisor(Container Advisor)是一個用于監(jiān)控和分析容器性能的開源工具,它可以與Prometheus等監(jiān)控系統(tǒng)集成,提供容器級別的監(jiān)控數(shù)據(jù)。
cAdvisor不僅可以搜集一臺機(jī)器上所有運行的容器信息,還提供基礎(chǔ)查詢界面和http接口,方便Prometheus進(jìn)行數(shù)據(jù)抓取,此外還可以對節(jié)點機(jī)器上的資源及容器進(jìn)行實時監(jiān)控和性能數(shù)據(jù)采集,包括CPU使用情況、內(nèi)存使用情況、網(wǎng)絡(luò)吞吐量及文件系統(tǒng)使用情況等。cAdvisor使用Go語言開發(fā),利用Linux的Cgroups獲取容器的資源使用信息。
Prometheus將所有抓取來的服務(wù)監(jiān)控數(shù)據(jù)存儲在內(nèi)存數(shù)據(jù)庫,定時到磁盤上進(jìn)行數(shù)據(jù)檢查(CheckPoint),將這些監(jiān)控數(shù)據(jù)周期性打包到外部的時序數(shù)據(jù)庫(Time-Series Database,TSDB)中。對于一個周期性1 min的檢測任務(wù),每次產(chǎn)生12 B數(shù)據(jù),若106個時間序列數(shù)據(jù)需要存儲12 h,則可以計算出所需的存儲空間
圖1所示為數(shù)據(jù)存儲模型,主機(jī)1、主機(jī)2等分別表示每一個時間序列,每個點的數(shù)據(jù)存儲格式是(Timestamp,Value),表示時間點和具體值,縱列串起來的是一個時間序列,由一個標(biāo)簽(Label)集合定義。
圖1 數(shù)據(jù)存儲模型圖
監(jiān)控數(shù)據(jù)時間序列存放如圖2所示,時間序列(Time-Series)[3]被存儲為(Timestamp,Value)序列,通常稱為矢量(Vectors)。隨著時間的不斷推進(jìn),舊的數(shù)據(jù)會被忽略掉。
圖2 監(jiān)控數(shù)據(jù)時間序列存放圖
存儲數(shù)據(jù)的方式是一塊固定大小的內(nèi)存空間,稱為時間序列空間(Time-Series Arena)。當(dāng)這塊內(nèi)存空間滿了之后,由回收者(Garbage Collector)回收最老的數(shù)據(jù)。通常情況下,空間會存儲12 h的數(shù)據(jù),底層服務(wù)存儲的時間會更少。
如圖3所示,常見的云平臺Prometheus數(shù)據(jù)監(jiān)控指標(biāo)可分為業(yè)務(wù)層監(jiān)控、應(yīng)用層監(jiān)控、中間件及基礎(chǔ)設(shè)施類監(jiān)控和系統(tǒng)層監(jiān)控。
圖3 Prometheus數(shù)據(jù)監(jiān)控指標(biāo)圖
除了常見監(jiān)控指標(biāo),還可以根據(jù)實驗研究需要自定義指標(biāo),對常見的監(jiān)控指標(biāo)進(jìn)行細(xì)化。通過Prometheus提供的客戶端庫,將自定義的監(jiān)控指標(biāo)推送給Prometheus進(jìn)行數(shù)據(jù)采集,實時掌握監(jiān)控指標(biāo)的運行狀態(tài)。
如圖4所示,Prometheus包含多個組件。根據(jù)作用不同,將監(jiān)控系統(tǒng)設(shè)計為數(shù)據(jù)采集層、存儲計算層和應(yīng)用層三個部分,并自行選擇組件。
圖4 Prometheus生態(tài)組件圖
監(jiān)控系統(tǒng)中,數(shù)據(jù)采集層主要進(jìn)行數(shù)據(jù)采集工作。Pushgateway組件是Prometheus的一個中間網(wǎng)管組件,類似于Zabbix的Zabbix-proxy,主要解決一些不支持主動拉取方式獲取數(shù)據(jù)的場景問題。例如使用自定義shell腳本監(jiān)控一些臨時服務(wù)的健康狀態(tài),但這些shell腳本無法讓Prometheus服務(wù)監(jiān)控其運行的數(shù)據(jù)。具體解決方案是在shell腳本中,將臨時服務(wù)的數(shù)據(jù)按Prometheus監(jiān)控數(shù)據(jù)的格式主動推送到Pushgateway組件中,然后配置Prometheus server拉取Pushgateway。
存儲計算層主要負(fù)責(zé)所有監(jiān)控數(shù)據(jù)的存儲。Prometheus的設(shè)計是由服務(wù)端主動拉取監(jiān)控數(shù)據(jù),并將數(shù)據(jù)根據(jù)配置的數(shù)據(jù)格式或標(biāo)簽進(jìn)行轉(zhuǎn)換、刪除等操作,然后根據(jù)規(guī)則中配置的標(biāo)識進(jìn)行計算,按照計算結(jié)果發(fā)出告警或者不操作。以CPU使用率達(dá)到80%是一條告警規(guī)則為例,Prometheus對數(shù)據(jù)進(jìn)行判斷是否符合告警規(guī)則,符合就發(fā)送消息給應(yīng)用層的Alertmanager組件,不符合就不操作。最后,Prometheus根據(jù)配置時間周期將數(shù)據(jù)保存到本地或第三方存儲。
應(yīng)用層實現(xiàn)整個集群的告警發(fā)送、分組、調(diào)度、警告抑制等功能。Alertmanager組件的作用是監(jiān)聽Prometheus服務(wù)發(fā)來的消息,結(jié)合自己的配置,如等待周期、重復(fù)發(fā)送告警時間、路由匹配等配置項,將消息發(fā)送給指定的接收者;Alertmanager組件還支持多種告警接收方式,如告警頁、郵件、短信等。目前PrometheusWeb UI自帶的組件在數(shù)據(jù)展示方面不太友好,一般平臺使用Grafana組件展示Prometheus數(shù)據(jù)。Grafana支持Prometheus的PromQL語法,能夠和Prometheus數(shù)據(jù)庫交互,加上Grafana強(qiáng)大的UI功能,平臺可以輕松獲取很多好看的界面,調(diào)用已經(jīng)做好的模板。
在現(xiàn)有高校云計算平臺中進(jìn)行Prometheus部署實施,采用Operator的方式。Prometheus的版本為0.7。
(1)在“kube-prometheus-release-0.7/manifests”目錄替換鏡像源
(2)在prometheus-service.yaml文件中進(jìn)行修改
(3)在grafana-service.yaml文件中進(jìn)行修改
(4)部署過程
(5)“kube-prometheus-release-0.7/manifests/” 目錄下執(zhí)行操作
平臺執(zhí)行上述操作,部署Grafana,Prometheus及node - exporter 組件,如圖5 所示,在Kubernetes的集群中通過kubectl 命令查看service 的信息可知,在Kubernetes 集群任意節(jié)點使用“IP 地址:30090”或“IP 地址:30091”可以訪問Prometheus或 Grafana。
圖5 部署的監(jiān)控組件圖
服務(wù)發(fā)現(xiàn)可通過第三方提供的接口來實現(xiàn)。Prometheus查詢需要監(jiān)控的靜態(tài)配置數(shù)據(jù),獲取需要監(jiān)視的目標(biāo)列表,輪詢這些目標(biāo)獲取監(jiān)控數(shù)據(jù)。
自動發(fā)現(xiàn)機(jī)制便于使用者在監(jiān)控系統(tǒng)中動態(tài)添加或者刪除資源。在Prometheus監(jiān)控系統(tǒng)中,file_sd_configs可以用來動態(tài)添加或刪除目標(biāo)(target)。
可以通過在scrape_configs添加如下配置,修改Prometheus配置文件。
files 表示文件的路徑,文件為.yaml 或.json 格式,可以用通配符*.json,讓Prometheus定期掃描這些文件并加載新配置。用refresh_interval 定義掃描的時間間隔,掃描以.json 結(jié)尾的文件。
target.json 文件包含的項與prometheus.yml 配置文件中job_name.static_configs 的項一致,用戶可以為每組targets 加labels,便于告警分組、告警抑制時使用。
Prometheus負(fù)責(zé)時序型指標(biāo)數(shù)據(jù)的采集及存儲,而數(shù)據(jù)的分析、聚合及直觀展示等功能都由Grafana負(fù)責(zé)。在平臺中部署的Grafana組件,可以提供豐富的圖表和儀表盤,將各種數(shù)據(jù)源中的指標(biāo)數(shù)據(jù)進(jìn)行可視化展示和分析,是一個開源的數(shù)據(jù)可視化和監(jiān)控工具[4]。Grafana支持與多種數(shù)據(jù)源集成,包括Prometheus,InfluxDB,Elasticsearch,MySQL等。用戶可以通過Grafana的Web界面創(chuàng)建和設(shè)計儀表盤,選擇不同的圖表類型、指標(biāo)和時間范圍,自定義儀表盤的外觀和布局[5],把監(jiān)控數(shù)據(jù)以圖形化形式展示。Grafana支持實時更新數(shù)據(jù),用戶通過設(shè)置刷新頻率,使儀表盤中的數(shù)據(jù)始終保持最新狀態(tài)。此外,Grafana還提供了告警功能。用戶可以設(shè)置告警規(guī)則,當(dāng)指標(biāo)數(shù)據(jù)達(dá)到或超過設(shè)定的閾值時,Grafana觸發(fā)告警,發(fā)送通知給指定的用戶或團(tuán)隊。如圖6所示,通過Grafana,用戶可以更直觀地了解數(shù)據(jù)的趨勢和變化,進(jìn)行系統(tǒng)監(jiān)控和性能分析。
圖6 通過Grafana的W eb界面創(chuàng)建的儀表盤呈現(xiàn)圖
在高校Kubernetes容器資源管理平臺中部署nginx業(yè)務(wù)容器,模擬業(yè)務(wù)入口,通過ab命令進(jìn)行壓力測試,業(yè)務(wù)壓力上升,CPU指標(biāo)增加。通過Grafana觀察nginx業(yè)務(wù)容器CPU的趨勢變化,并得到不同時間段的CPU資源占用率,如圖7所示,Grafana顯示的曲線圖在時間點09:06:15時,Pod的CPU資源占用率達(dá)到了71.4%,已經(jīng)達(dá)到告警的范圍。后續(xù)的研究可以結(jié)合CPU資源占用率進(jìn)行及時的告警處理。
圖7 不同時間段的CPU資源占用率圖
通過分析高校Kubernetes容器資源管理平臺面臨的監(jiān)控需求,在高校數(shù)據(jù)中心云計算平臺監(jiān)控系統(tǒng)中加入Prometheus監(jiān)控組件,實時監(jiān)控云計算平臺中的服務(wù)和節(jié)點運行狀態(tài),并將采集的數(shù)據(jù)存儲到Prometheus的時間序列數(shù)據(jù)庫。使用可視化展示工具Grafana對數(shù)據(jù)進(jìn)行查詢、分析,并通過業(yè)務(wù)壓力測試證明了本文研究的可行性與普適性,可以在高校數(shù)據(jù)中心系統(tǒng)推廣使用。