我們知道zabbix在監控界占有不可撼動的地位,功能強大。但是對容器監控顯得力不從心。為解決監控容器的問題,引入了prometheus技術。prometheus號稱是下一代監控。接下來的文章打算圍繞prometheus做一個系列的介紹,順便幫自己理清知識點。
一、簡介
prometheus是由谷歌研發的一款開源的監控軟件,目前已經被雲計算本地基金會托管,是繼k8s托管的第二個項目。
二、優勢
易於管理
輕易獲取服務內部狀態
高效靈活的查詢語句
支持本地和遠程存儲
采用http協議,默認pull模式拉取數據,也可以通過中間網關push數據
支持自動發現
可擴展
易集成
三、prometheus運行流程
prometheus根據配置定時去拉取各個節點的數據,默認使用的拉取方式是pull,也可以使用pushgateway提供的push方式獲取各個監控節點的數據。將獲取到的數據存入TSDB,一款時序型數據庫。此時prometheus已經獲取到了監控數據,可以使用內置的PromQL進行查詢。它的報警功能使用Alertmanager提供,Alertmanager是prometheus的告警管理和發送報警的一個組件。prometheus原生的圖標功能過於簡單,可將prometheus數據接入grafana,由grafana進行統一管理。
四、監控的目的
google指出,監控分為白盒監控和黑盒監控之分。
白盒監控:通過監控內部的運行狀態及指標判斷可能會發生的問題,從而做出預判或對其進行優化。
黑盒監控:監控系統或服務,在發生異常時做出相應措施。
監控的目的如下:
1、根據歷史監控數據,對為了做出預測
2、發生異常時,即使報警,或做出相應措施
3、根據監控報警及時定位問題根源
4、通過可視化圖表展示,便於直觀獲取信息
五、常用概念
prometheus采集到的監控數據均以metric(指標)形式保存在時序數據庫中(TSDB)
每一條時間序列由 metric 和 labels 組成,每條時間序列按照時間的先后順序存儲它的樣本值。
默認情況下各監控client向外暴露一個HTTP服務,prometheus會通過pull方式獲取client的數據,數據格式如下:
# HELP node_cpu Seconds the cpus spent in each mode. # TYPE node_cpu counter node_cpu{cpu="cpu0",mode="idle"} 362812.7890625 # HELP node_load1 1m load average. # TYPE node_load1 gauge node_load1 3.0703125
以#開頭的表示注釋信息,解釋了每一個指標的監控目的和類型
node_cpu表示監控指標的名稱
{}內的內容是標簽,以鍵值對的方式記錄
數字是這個指標監控的數據
下圖橫坐標代表的是時間(時間戳的方式記錄在TSDB中),縱坐標代表了各種不同的指標名稱,坐標系中的黑點代表了各個指標在不同時間下的值。
每一個橫線 就是時間序列
每個黑點就是樣本(prometheus將樣本以時間序列的方式保存在內存中,然后定時保存到硬盤上)
指標(metric)的格式如下:
<metric name>{<label name>=<label value>, ...}
指標名稱反映的是監控了什么。
標簽反映的是樣本的維度,可以理解成指標的細化。比如:
api_http_requests_total{method="POST", handler="/messages"}
指標是“api_http_requests_total”,含義是通過api請求的http總數。
標簽“method="POST"” "handler="/messages""代表了這些http請求中 POST 請求 並且 handler是/messages的數量
上述指標等同於:
{__name__="api_http_requests_total",method="POST", handler="/messages"}
指標有四種類型
1、Counter 只增不減 計數器
2、Gauge 可增可減 儀表盤
3、Histogram 直方圖
4、Summary 摘要型