咱們知道zabbix在監控界佔有不可撼動的地位,功能強大。可是對容器監控顯得力不從心。爲解決監控容器的問題,引入了prometheus技術。prometheus號稱是下一代監控。接下來的文章打算圍繞prometheus作一個系列的介紹,順便幫本身理清知識點。node
prometheus是由谷歌研發的一款開源的監控軟件,目前已經被雲計算本地基金會託管,是繼k8s託管的第二個項目。數據庫
易於管理api
輕易獲取服務內部狀態bash
高效靈活的查詢語句優化
支持本地和遠程存儲google
採用http協議,默認pull模式拉取數據,也能夠經過中間網關push數據雲計算
支持自動發現spa
可擴展blog
易集成內存
prometheus根據配置定時去拉取各個節點的數據,默認使用的拉取方式是pull,也可使用pushgateway提供的push方式獲取各個監控節點的數據。將獲取到的數據存入TSDB,一款時序型數據庫。此時prometheus已經獲取到了監控數據,可使用內置的PromQL進行查詢。它的報警功能使用Alertmanager提供,Alertmanager是prometheus的告警管理和發送報警的一個組件。prometheus原生的圖標功能過於簡單,可將prometheus數據接入grafana,由grafana進行統一管理。
google指出,監控分爲白盒監控和黑盒監控之分。
白盒監控:經過監控內部的運行狀態及指標判斷可能會發生的問題,從而作出預判或對其進行優化。
黑盒監控:監控系統或服務,在發生異常時作出相應措施。
監控的目的以下:
一、根據歷史監控數據,對爲了作出預測
二、發生異常時,即便報警,或作出相應措施
三、根據監控報警及時定位問題根源
四、經過可視化圖表展現,便於直觀獲取信息
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"}
指標有四種類型
一、Counter 只增不減 計數器
二、Gauge 可增可減 儀表盤
三、Histogram 直方圖
四、Summary 摘要型