容器監控-Prometheus:1. 適用於容器監控-Prometheus

容器監控-Prometheus:1. 適用於容器監控-Prometheus

起源

640?wx_fmt=png

曾幾何時,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標識的多維度數據模型
image-20200204113532484

http_response_total就是metric的名字,method和endpoint 就算具體的kv,每個名字加上不同的kv組合都是一條時間序列。

  • 靈活的查詢語言(PromQL)

    類似於sql

    查詢方式

    image-20200204113923303
  • 支持pull、push兩種方式添加數據

  • 支持基於kubernetes服務發現的動態配置

架構

image-20200204123106156

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數據。

image-20200204125557574

NodeExporter是Prometheus子項目

image-20200204125709827

docker 容器指標

我們的服務都是通過docker 運行的所有我們要採集的是每個docker 容器的本身的數據。這個kubernetes幫我們準備好了,每個節點上都有一個kubelet服務,這個服務啓動的時候內置一個cAdvisor,cAdvisor 負責採集容器的詳細信息,容器CPU容器文件系統容器內存,容器網絡。同樣也會啓動一個http服務給Prometheus pull數據。

image-20200204130309842

kubernetes 組件指標

最後上集羣之前各個組件的監控,比如etcd apiserver controller-manager scheduler kubelet,每個組件都自帶了metric,讓Prometheus定期抓取數據就可以。

image-20200204130816565

kubernetes如何傳遞給Prometheus的大方向就是這樣。異常報警和數據展現我們也知道是哪些組件,如何跟Prometheus對接,接下就是如何把這一整套服務給他部署起來。並且按照我們預期的方式提供服務,完成監控報警。具體怎麼來做請聽下回分解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章