黃 靜,陳秋燕
(1.中國移動通信集團廣東有限公司,廣東 廣州 510640;2.浪潮世科(山東)信息技術有限公司,山東 濟南 250000)
Prometheus是一種開源的系統監視和警報工具,基本原理是通過HTTP協議周期性抓取被監控組件的狀態,只要提供HTTP接口就可以接入監控系統,不需要任何SDK或者其他的集成過程[1]。
Grafana是一個跨平臺的開源的度量分析和可視化工具,可以通過將采集的數據查詢然后可視化的展示,并及時通知[2]。
Prometheus作為Google發起的linux基金會的第二大開源項目有如下優點[3]:
(1)提供多維度數據模型(基于時間序列的k/v鍵值對)。(2)靈活的查詢及聚合語句(PromQL)。(3)支持服務器節點的本地存儲,并且可以對接第三方時序數據庫和OpenTSDB等。(4)支持通過靜態文件配置和動態發現機制發現監控對象,自動完成數據采集。(5)易于維護,可以通過二進制文件直接啟動,并且提供了容器化部署鏡像。(6)支持數據的分區采樣和聯邦部署,支持大規模集群監控。
支持多種模式的圖形和儀表板。
Grafana作為開源的可視化工具有如下優點:
(1)可視化:快速和靈活的客戶端圖形具有多種選項。面板插件為許多不同的方式可視化指標和日志。(2)混合數據源:在同一個圖中混合不同的數據源,可根據每個查詢指定數據源。適用于自定義數據源。(3)告警:可視化地為最重要的指標定義告警規則。Grafana將持續評估它們,并發送通知。(4)動態儀表盤:使用模板變量創建動態和可重用的儀表板,根據所選的模板變量動態創建面板。(5)注釋:注釋來自不同數據源圖表。將鼠標懸停在事件上可以顯示完整的事件元數據和標記。(6)過濾器:過濾器允許您動態創建新的鍵/值過濾器,這些過濾器將自動應用于使用該數據源的所有查詢。
Prometheus+Grafana是Kubernetes集群常用的一套比較成熟的預警監控方案,在Kubernetes官方社區或騰訊云社區也有很多相關的案例。 Prometheus支持數據的分區采樣和聯邦部署,支持大規模集群監控。 Grafana可以根據各個業務線需要監控的需求定義各種各樣的圖表,操作簡單并提供預警功能?;贙ubernetes集群搭建的PaaS平臺選擇Prometheus+Grafana來實現平臺的監控預警功能,使企業園區信息化系統更加穩定、高效運行。
監控的實現過程是,將平臺和業務系統中所涉及的硬件資源、軟件資源、系統信息等納入統一的運維監控平臺中,并通過消除管理軟件的差別,數據采集手段的差別,對各種不同的數據來源實現統一管理、統一規范、統一處理、統一展現,最終實現運維規范化、自動化、智能化的大運維管理。
運行監控和故障告警是一個監控系統的兩個主要功能模塊。根據以上原理,PaaS平臺監控的實現架構設計如下圖所示,劃分兩大模塊,分別是數據收集提取模塊和監控告警模塊。具體的,從低到高又分為6層,分別是數據收集層、數據提取層、數據展示層、告警規則配置層,告警發生層、告警顯示層。

主要收集主機數據、系統數據、容器數據等,然后將收集到的數據進行規范化,并進行存儲。
①根據實際業務及資源情況需求,搭建好Kubernetes集群,把集群作為監控目標。
②在集群內安裝exporter和cadvisor,實現對集群性能數據的獲取。如cpu、內存、磁盤、網絡等資源數據信息。
③通過exporter采集不同維度的監控指標,并通過Prometheus支持的數據格式暴露出來,Prometheus定期pull數據并用Grafana展示。
④通過cadvisor采集容器、Pod相關的性能指標數據,并通過暴露的metrics接口用prometheus抓取。
⑤通過prometheus-node-exporter采集主機的性能指標數據,并通過暴露的metrics接口用prometheus抓取。
主要是通過部署時編寫好的yaml文件內的告警規則語言,將數據收集層獲取到的數據進行規格化和過濾處理,提取需要的數據到監控告警模塊, Prometheus把收集到的數據通過exporter保存統一格式的數據存儲到Prometheus自帶的時序數據庫,用于grafana調用。
(1)Prometheus搭建安裝具體實現操作如下六個步驟:
①把Prometheus鏡像打包好并且放到集群鏡像倉庫中,用于后面Prometheus的安裝。
②在搭建好的Kubernetes集群中創建名字為monitoring的命名空間,主要用于存放Prometheus運行的容器。
③給monitoring分配集群的讀取權限,用于Prometheus可以通過Kubernetes的API獲取集群的資源相關信息。
④在monitoring創建ConfigMap用來存儲Prometheus容器的一些配置以及Kubernetes集群中動態發現pod和運行中的服務的配置。
⑤創建Deployment模式的Prometheus,通過yaml文件安裝Prometheus。
⑥連接Prometheus,通過yaml文件把Prometheus內部端口映射成外部端口,用于Kubernetes集群自動連接到Prometheus,即Prometheus部署成功。
(2)Prometheus工作流程

如圖所示,工作流程為:Prometheus server 定期從配置好的exporters 中拉 metrics;Prometheus server 在本地存儲收集到的 metrics,并運行已定義好的 alert.rules,記錄新的時間序列或者向 Grafana推送警報;Grafana根據配置文件,對接收到的警報進行處理,發出告警;在圖形界面中,可視化采集數據。
數據展示層是一個web展示界面,主要是將數據收集層獲取到的數據進行統一展示,展示的方式可以是曲線圖、柱狀圖、餅狀態等,通過將數據圖形化,可以幫助運維人員了解一段時間內主機或網絡的運行狀態和運行趨勢,并作為運維人員排查問題或解決問題的依據。實現數據展示層主要通過Grafana工具,具體操作步驟如下[4]:
把Grafana鏡像打包好并且放到集群鏡像倉庫中,用于后面Grafana的安裝。
①通過yaml文件安裝Grafana。
②連接Grafana,通過yaml文件把Grafana內部端口映射成外部端口,用于Kubernetes集群自動連接到
Grafana。
③使用管理員賬號登錄Grafana,并且配置Prometheus的數據源。
④編輯好需要圖表類型的JSON文件,導入到Grafana,用于調用各個圖表的樣式,顯示各個數據類型的圖表。
⑤連接Grafana,即可看到相關默認模式的監控數據,即Grafana部署成功。
告警規則配置層主要是根據第三層獲取到的數據進行告警規則設置、告警閥值設置、告警聯系人設置和告警方式設置等。該功能主要通過grafana進行配置,具體操作如下:
①連接登錄Grafana
②打開設置面板,選擇預警接收類型,如郵箱、短信
③設置預警值的范圍
④預警配置成功,當資源到達設置的預警范圍,即能發送預警通知。
告警事件發生層主要是將告警事件進行實時記錄以及通知用戶。
用戶顯示層是一個web展示界面,主要是將監控統計結果、告警故障結果進行統一展示。
(1)集群內存、CPU概況

(2)集群網絡情況

(1)集群pod資源概況

(2)cpu/內存實時監控顯示圖

(3)網絡/文件系統實時監控顯示圖
使用開源工具Prometheus與Grafana結合實現PaaS平臺進行監控部署的方法,可以提高運維人的維護能力,實現監控手段的自維。