容器監控-Prometheus:1. 適用於容器監控-Prometheus
起源
曾幾何時,kubernetes 監控體系繁雜,社區也很多方案。現在已經演變成以Prometheus爲重要體系的方案。
-
與kubernetes 同源
kubernetes源自於Borg系統,Prometheus也是同時開發Borg系統的工程師而來。SoundCloud創建這個項目。
-
2016 .5 加入CNCF
-
2018.8從CNCF畢業
說明這個項目已經具備成熟和穩定性,可以放心的集成在商業平臺中。跟kubernetes一樣從CNCF畢業後投入生產的速度加快了不少。
Prometheus是什麼
-
一系列服務的組合
並不是一個單獨的服務,是一系列服務的組合
-
系統和服務的監控報警平臺
監控系統和服務包括不限於kubernetes集羣的監控和docker 監控,並且支持靜態監控目標,同時也支持很多動態的服務發現,對spring-boot支持也很好,引入Prometheus的插件就可以讓spring-boot項目自動納入Prometheus的監控
Prometheus特徵
- 由
metric
名稱和kv
標識的多維度數據模型
http_response_total就是metric的名字,method和endpoint 就算具體的kv,每個名字加上不同的kv組合都是一條時間序列。
-
靈活的查詢語言(PromQL)
類似於sql
查詢方式
-
支持pull、push兩種方式添加數據
-
支持基於kubernetes服務發現的動態配置
架構
Prometheus有很多組件組成,其中很多組件都是可選的。核心組件的Prometheus Server
,用pull的方式在各個地方拉去數據,過程就是Retrieval
。把數據拉去過來存儲Storage
,數據會保存到tsb時間序列數據庫裏。通過PromQL
對外提供數據的查詢。其他的組件都是圍繞這個核心展開的。
Job / Exporters
暴露指標,讓Retrieval
抓取。主要想法設法採集到數據,提供一個對外http接口,可以拿到採集的數據。我們前面說過NoExporters 就是其中的一種。
Pushgatewary
通過push方式將數據推送到網關,比如定時任務,一次性執行任務,就可以採用這種主動pu sh方式。Prometheus Server也是通過push方式在garewary拉取數據。
Service Discovery
是Prometheus支持的服務發現。支持DNS、kubernetes、Consul…,深度對這些服務發現做了一些開發,深入到服務內部支持這些發現的機制。
Alertmanager
當Prometheus定義的規則被觸發之後,就會把報警的信息,push給Alertmanager,Alertmanager支持自定義的報警規則。對報警做過濾聚合,對報警頻率做控制。最好實現報警通知,可以發送到郵箱、短信、微信、釘釘 、企業微信…也可以發送到http接口實現對報警的自定義處理。
Web UI
是Prometheus可以多種的UI展現。最常見的是Grafana。UI的實現是通過PromQL對Prometheus數據做查詢。然後把數據做一個豐富漂亮的展現。
數據類型
Prometheus的key 是metric
名稱還有kv 的組成,那value 是一個lang類型的整型值。這個值一般放什麼數據呢?
- Counter
應用於記錄累計的值,這個值會一直增加,不會減少,比如請求次數,異常增加的次數。
-
Gauge
常規數值,可以變大變小,比如內存的變化磁盤變化,CPU負載變化。
-
Hostagram && Sunmary
用於統計分析樣本的分佈情況。大多數情況下會使用某些量化指標的平均值比如CPU平均使用率,頁面平均響應時間,但是這種方式有一個明顯的問題。比如我有一個nginx服務大多數的請求都維持在了100毫秒以內,而有個別請求響應時間是5s,10s,就導致平均時間不能體現的問題。這種現象被稱爲“常維問題”。
爲了區分開是平均時間還是常維情況的時間,最簡單的處理方式就是按照請求的延遲範圍進行分組比如0~100毫秒請求有多少個。0~500毫秒請求有多少個,500毫秒~1s請求有多少個,1~5s請求有多少個,通過這種方式可以快速分析系統慢的原因。Hostagram && Sunmary就是爲了解決這樣的問題出現的。通過這兩個指標快速瞭解樣本的分佈情況。區別Hostagram類似於子房圖,就是剛纔說的先定義好區間,統計每個區間的個數。Sunmary樣本排序後分配情況跟99線類似。
數據來源
服務器基礎指標
採集的數據說服務器的基礎指標,Prometheus提供了NodeExporter
工具,一般實現方式是通過daemonSet 方式把它運行在每臺主機上,抓取節點信息 比如負載CPU內存磁盤網絡。內置http服務給Prometheus pull數據。
NodeExporter
是Prometheus子項目
docker 容器指標
我們的服務都是通過docker 運行的所有我們要採集的是每個docker 容器的本身的數據。這個kubernetes幫我們準備好了,每個節點上都有一個kubelet服務,這個服務啓動的時候內置一個cAdvisor
,cAdvisor 負責採集容器的詳細信息,容器CPU容器文件系統容器內存,容器網絡。同樣也會啓動一個http服務給Prometheus pull數據。
kubernetes 組件指標
最後上集羣之前各個組件的監控,比如etcd apiserver controller-manager scheduler kubelet,每個組件都自帶了metric
,讓Prometheus定期抓取數據就可以。
kubernetes如何傳遞給Prometheus的大方向就是這樣。異常報警和數據展現我們也知道是哪些組件,如何跟Prometheus對接,接下就是如何把這一整套服務給他部署起來。並且按照我們預期的方式提供服務,完成監控報警。具體怎麼來做請聽下回分解。