黃 靜,陳秋燕
(1.中國移動通信集團廣東有限公司,廣東 廣州 510640;2.浪潮世科(山東)信息技術(shù)有限公司,山東 濟南 250000)
Prometheus是一種開源的系統(tǒng)監(jiān)視和警報工具,基本原理是通過HTTP協(xié)議周期性抓取被監(jiān)控組件的狀態(tài),只要提供HTTP接口就可以接入監(jiān)控系統(tǒng),不需要任何SDK或者其他的集成過程[1]。
Grafana是一個跨平臺的開源的度量分析和可視化工具,可以通過將采集的數(shù)據(jù)查詢?nèi)缓罂梢暬恼故?,并及時通知[2]。
Prometheus作為Google發(fā)起的linux基金會的第二大開源項目有如下優(yōu)點[3]:
(1)提供多維度數(shù)據(jù)模型(基于時間序列的k/v鍵值對)。(2)靈活的查詢及聚合語句(PromQL)。(3)支持服務(wù)器節(jié)點的本地存儲,并且可以對接第三方時序數(shù)據(jù)庫和OpenTSDB等。(4)支持通過靜態(tài)文件配置和動態(tài)發(fā)現(xiàn)機制發(fā)現(xiàn)監(jiān)控對象,自動完成數(shù)據(jù)采集。(5)易于維護,可以通過二進制文件直接啟動,并且提供了容器化部署鏡像。(6)支持?jǐn)?shù)據(jù)的分區(qū)采樣和聯(lián)邦部署,支持大規(guī)模集群監(jiān)控。
支持多種模式的圖形和儀表板。
Grafana作為開源的可視化工具有如下優(yōu)點:
(1)可視化:快速和靈活的客戶端圖形具有多種選項。面板插件為許多不同的方式可視化指標(biāo)和日志。(2)混合數(shù)據(jù)源:在同一個圖中混合不同的數(shù)據(jù)源,可根據(jù)每個查詢指定數(shù)據(jù)源。適用于自定義數(shù)據(jù)源。(3)告警:可視化地為最重要的指標(biāo)定義告警規(guī)則。Grafana將持續(xù)評估它們,并發(fā)送通知。(4)動態(tài)儀表盤:使用模板變量創(chuàng)建動態(tài)和可重用的儀表板,根據(jù)所選的模板變量動態(tài)創(chuàng)建面板。(5)注釋:注釋來自不同數(shù)據(jù)源圖表。將鼠標(biāo)懸停在事件上可以顯示完整的事件元數(shù)據(jù)和標(biāo)記。(6)過濾器:過濾器允許您動態(tài)創(chuàng)建新的鍵/值過濾器,這些過濾器將自動應(yīng)用于使用該數(shù)據(jù)源的所有查詢。
Prometheus+Grafana是Kubernetes集群常用的一套比較成熟的預(yù)警監(jiān)控方案,在Kubernetes官方社區(qū)或騰訊云社區(qū)也有很多相關(guān)的案例。 Prometheus支持?jǐn)?shù)據(jù)的分區(qū)采樣和聯(lián)邦部署,支持大規(guī)模集群監(jiān)控。 Grafana可以根據(jù)各個業(yè)務(wù)線需要監(jiān)控的需求定義各種各樣的圖表,操作簡單并提供預(yù)警功能?;贙ubernetes集群搭建的PaaS平臺選擇Prometheus+Grafana來實現(xiàn)平臺的監(jiān)控預(yù)警功能,使企業(yè)園區(qū)信息化系統(tǒng)更加穩(wěn)定、高效運行。
監(jiān)控的實現(xiàn)過程是,將平臺和業(yè)務(wù)系統(tǒng)中所涉及的硬件資源、軟件資源、系統(tǒng)信息等納入統(tǒng)一的運維監(jiān)控平臺中,并通過消除管理軟件的差別,數(shù)據(jù)采集手段的差別,對各種不同的數(shù)據(jù)來源實現(xiàn)統(tǒng)一管理、統(tǒng)一規(guī)范、統(tǒng)一處理、統(tǒng)一展現(xiàn),最終實現(xiàn)運維規(guī)范化、自動化、智能化的大運維管理。
運行監(jiān)控和故障告警是一個監(jiān)控系統(tǒng)的兩個主要功能模塊。根據(jù)以上原理,PaaS平臺監(jiān)控的實現(xiàn)架構(gòu)設(shè)計如下圖所示,劃分兩大模塊,分別是數(shù)據(jù)收集提取模塊和監(jiān)控告警模塊。具體的,從低到高又分為6層,分別是數(shù)據(jù)收集層、數(shù)據(jù)提取層、數(shù)據(jù)展示層、告警規(guī)則配置層,告警發(fā)生層、告警顯示層。
主要收集主機數(shù)據(jù)、系統(tǒng)數(shù)據(jù)、容器數(shù)據(jù)等,然后將收集到的數(shù)據(jù)進行規(guī)范化,并進行存儲。
①根據(jù)實際業(yè)務(wù)及資源情況需求,搭建好Kubernetes集群,把集群作為監(jiān)控目標(biāo)。
②在集群內(nèi)安裝exporter和cadvisor,實現(xiàn)對集群性能數(shù)據(jù)的獲取。如cpu、內(nèi)存、磁盤、網(wǎng)絡(luò)等資源數(shù)據(jù)信息。
③通過exporter采集不同維度的監(jiān)控指標(biāo),并通過Prometheus支持的數(shù)據(jù)格式暴露出來,Prometheus定期pull數(shù)據(jù)并用Grafana展示。
④通過cadvisor采集容器、Pod相關(guān)的性能指標(biāo)數(shù)據(jù),并通過暴露的metrics接口用prometheus抓取。
⑤通過prometheus-node-exporter采集主機的性能指標(biāo)數(shù)據(jù),并通過暴露的metrics接口用prometheus抓取。
主要是通過部署時編寫好的yaml文件內(nèi)的告警規(guī)則語言,將數(shù)據(jù)收集層獲取到的數(shù)據(jù)進行規(guī)格化和過濾處理,提取需要的數(shù)據(jù)到監(jiān)控告警模塊, Prometheus把收集到的數(shù)據(jù)通過exporter保存統(tǒng)一格式的數(shù)據(jù)存儲到Prometheus自帶的時序數(shù)據(jù)庫,用于grafana調(diào)用。
(1)Prometheus搭建安裝具體實現(xiàn)操作如下六個步驟:
①把Prometheus鏡像打包好并且放到集群鏡像倉庫中,用于后面Prometheus的安裝。
②在搭建好的Kubernetes集群中創(chuàng)建名字為monitoring的命名空間,主要用于存放Prometheus運行的容器。
③給monitoring分配集群的讀取權(quán)限,用于Prometheus可以通過Kubernetes的API獲取集群的資源相關(guān)信息。
④在monitoring創(chuàng)建ConfigMap用來存儲Prometheus容器的一些配置以及Kubernetes集群中動態(tài)發(fā)現(xiàn)pod和運行中的服務(wù)的配置。
⑤創(chuàng)建Deployment模式的Prometheus,通過yaml文件安裝Prometheus。
⑥連接Prometheus,通過yaml文件把Prometheus內(nèi)部端口映射成外部端口,用于Kubernetes集群自動連接到Prometheus,即Prometheus部署成功。
(2)Prometheus工作流程
如圖所示,工作流程為:Prometheus server 定期從配置好的exporters 中拉 metrics;Prometheus server 在本地存儲收集到的 metrics,并運行已定義好的 alert.rules,記錄新的時間序列或者向 Grafana推送警報;Grafana根據(jù)配置文件,對接收到的警報進行處理,發(fā)出告警;在圖形界面中,可視化采集數(shù)據(jù)。
數(shù)據(jù)展示層是一個web展示界面,主要是將數(shù)據(jù)收集層獲取到的數(shù)據(jù)進行統(tǒng)一展示,展示的方式可以是曲線圖、柱狀圖、餅狀態(tài)等,通過將數(shù)據(jù)圖形化,可以幫助運維人員了解一段時間內(nèi)主機或網(wǎng)絡(luò)的運行狀態(tài)和運行趨勢,并作為運維人員排查問題或解決問題的依據(jù)。實現(xiàn)數(shù)據(jù)展示層主要通過Grafana工具,具體操作步驟如下[4]:
把Grafana鏡像打包好并且放到集群鏡像倉庫中,用于后面Grafana的安裝。
①通過yaml文件安裝Grafana。
②連接Grafana,通過yaml文件把Grafana內(nèi)部端口映射成外部端口,用于Kubernetes集群自動連接到
Grafana。
③使用管理員賬號登錄Grafana,并且配置Prometheus的數(shù)據(jù)源。
④編輯好需要圖表類型的JSON文件,導(dǎo)入到Grafana,用于調(diào)用各個圖表的樣式,顯示各個數(shù)據(jù)類型的圖表。
⑤連接Grafana,即可看到相關(guān)默認(rèn)模式的監(jiān)控數(shù)據(jù),即Grafana部署成功。
告警規(guī)則配置層主要是根據(jù)第三層獲取到的數(shù)據(jù)進行告警規(guī)則設(shè)置、告警閥值設(shè)置、告警聯(lián)系人設(shè)置和告警方式設(shè)置等。該功能主要通過grafana進行配置,具體操作如下:
①連接登錄Grafana
②打開設(shè)置面板,選擇預(yù)警接收類型,如郵箱、短信
③設(shè)置預(yù)警值的范圍
④預(yù)警配置成功,當(dāng)資源到達(dá)設(shè)置的預(yù)警范圍,即能發(fā)送預(yù)警通知。
告警事件發(fā)生層主要是將告警事件進行實時記錄以及通知用戶。
用戶顯示層是一個web展示界面,主要是將監(jiān)控統(tǒng)計結(jié)果、告警故障結(jié)果進行統(tǒng)一展示。
(1)集群內(nèi)存、CPU概況
(2)集群網(wǎng)絡(luò)情況
(1)集群pod資源概況
(2)cpu/內(nèi)存實時監(jiān)控顯示圖
(3)網(wǎng)絡(luò)/文件系統(tǒng)實時監(jiān)控顯示圖
使用開源工具Prometheus與Grafana結(jié)合實現(xiàn)PaaS平臺進行監(jiān)控部署的方法,可以提高運維人的維護能力,實現(xiàn)監(jiān)控手段的自維。