Prometheus是新一代的監控系統解決方案,原生支持雲環境,和kubernetes無縫對接,的卻是容器化監控解決方案的不二之選。當然對傳統的監控方案也能夠兼容,通過自定義或是用開源社區提供的各種exporter無疑又為prometheus豐滿羽翼。那麼從今天開始我將會持續更新我對prometheus使用過程中的了解和踩坑記錄,一是為了沉澱自己,二是為同學們提供個思路。
1、架構介紹
上圖就是prometheus的一個整體的架構圖,這篇文章就圍繞這張圖展開,介紹prometheus的工作機制和各組件提供的功能。
1.1 Prometheus server組件介紹 a. Prometheus server: 它是prometheus的主程序,本身也是一個時序資料庫,它來負責整個監控集群的數據拉取、處理、計算和存儲。和zabbix採取push監控數據的方式不同, 1、prometheus的設計是使用pull方式由服務端主動拉取監控數據。關於push和pull兩種方式的優缺點爭論一直存在,這裡不再過多贅述,只需知道即可。 當prometheus拉取到數據之後首先進行的操作是數據的處理:根據配置的數據格式或者標籤轉換/刪除等操作。 2、數據處理完成後是根據rule中配置的規則進行計算:比如CPU使用率達到80%是一條告警規則,則prometheus會對數據進行計算看是否命中規則,命中則發送消息給alertmanager組件,否則不做操作。 3、完成上面的一些操作之後,prometheus會根據配置時間周期保存數據到本地或者是第三方存儲中 以上便是prometheus server做的比較重要的事情(大致流程是這樣,細節方面未做探討。)1.2 Alertmanager 組件介紹 b. Alertmanager: 它是prometheus的告警組件,負責整個集群的告警發送、分組、調度、警告抑制等功能。 需要知道的是alertmanager本身是不做告警規則計算的,簡單來說就是,alertmanager不去計算當前的監控取值是否達到我設定的閾值,上面已經提過該部分規則計算是prometheus server來計算的,alertmanager監聽prometheus server發來的消息,然後在結合自己的配置,比如等待周期,重複發送告警時間,路由匹配等配置項,然後把接收到的消息發送到指定的接收者。同時他還支持多種告警接收方式,常見的如郵件、企業微信、釘釘等。1.3 Pushgateway 組件介紹 c. Pushgateway 它是prometheus的一個中間網管組件,類似於zabbix的zabbix-proxy。它主要解決的問題是一些不支持pull方式獲取數據的場景,比如:自定義shell腳本來監控服務的健康狀態,這個就沒辦法直接讓prometheus來拉數據,這時就可以藉助pushgateway,它是支持推送數據的,我們可以把對應的數據按照prometheus的格式推送到pushgateway,然後配置prometheus server拉取pushgateway即可。1.4 數據展示組件介紹 上圖右下角的幾個組件,grafana、prometheus-ui是用來圖形化展示數據的組件,其中prometheus-ui是prometheus項目原生的ui界面,但是在數據展示方面不太好用,因此推薦grafana來展示你的數據,grafana支持prometheus的PromQL語法,能夠和prometheus資料庫交互,加上grafana強大的ui功能,我們可以很輕鬆的獲取到很多好看的界面,同時也有很多做好的模版可以使用。1.5 服務發現組件介紹 對一個監控系統來說,自動發現肯定是一個最基礎的功能,試想如果沒有自動發現,添加10000臺主機到監控系統該是中什麼體驗?還好,prometheus是有該組件的,而且還很多,支持多種自動發現機制,比如基於文件、DNS、consul、zookeeper、etcd、kuberbetes等服務自動發現的方式,這些服務發現方式後面都會寫到。本篇寫到這裡就要結束了,主要是簡要介紹了下prometheus中各組件的大致功能,對prometheus又一個大致的了解。下一篇會寫幾種prometheus的安裝方式。