Prometheus是什么
首先, Prometheus 是一款時序(time series) 數據庫, 但他的功能卻並非支部與 TSDB , 而是一款設計用於進行目標 (Target) 監控的關鍵組件.
結合生態系統內的其他組件, 例如: Pushgateway, Altermanager, Grafana等,可構成一個完整的IT監控系統.
時序數據簡介
時序數據, 是在一段時間內通過重復測量(measurement)而獲得的觀測值的結合, 將這些觀測值繪制於圖形之上, 他會有一個數據軸和時間軸.
服務器指標數據, 應用程序性能監控數據, 網絡數據等也是時序數據.
Prometheus 的優點
Prometheus怎么工作的
基於 HTTP call, 從配置文件指定的網絡端點(endpoint) 上周期性獲取指標數據
Prometheus 支持的監控方式
Prometheus 支持通過三種類型的途徑從目標上 "抓取(Scrape)" 指標數據.
-
Exporters
-
Instrumentation (測量系統, 應用程序內建的支持Prometheus采集格式)
-
Pushgateway
Prometheus Push and Push
Prometheus 同其他的 TSDB 相比有一個非常典型的特性: 它主動從各 Target 上 "拉取(pull)"數據, 而非等待被監控端的推送"push" .
兩個方式各有優劣, 其中, Pull 模型的優勢在於.
集中控制: 有利於將配置集中在 Prometheus Server 上完成, 包括指標及采取速率等.
Prometheus的根本目標在於手機在 Target 上預先完成集合的聚合型數據, 而非一款由時間驅動的存儲系統.
Prometheus 生態組件
Prometheus 負責時序性指標數據的采集以及存儲, 但是數據的分析, 聚合及直觀展示以及告警等功能並非由 Prometheus Server 所負責.
Prometheus數據模型
Prometheus 僅用於以 "鍵值" 形式存儲時序式的聚合數據, 它並不支持存儲文本信息,
其中的 "鍵" 稱為指標 (Metric), 它通常意味着CPU速率, 內存使用率或區分空閑比例等
同一個指標會適配多個目標設備, 因而他使用 "標簽作為元數據", 從而為 Metric添加更多的信息描述緯度.
這些標簽可以作為過濾器進行指標過濾及聚合運算.
Prometheus 的指標定義
Prometheus 的所有指標 (Metric) 被統一定義為: <metric name> {label_name=<label_value>,....}
指標定義設計指標名稱和標簽兩個部分.
指標名稱(metric name)
指標名稱用於說明指標的含義, 例如 http_request_total 代表 HTTP 請求總數.
指標名稱必須由字母, 數字, 瞎花錢或者冒號組成. 其中的冒號指標不能用於 exporter.
標簽(label)
標簽可以體現指標的緯度特征, 用於過濾和聚合, 它通過指標名 (label name) 和標簽值 (label value ) 這種鍵值對的形式, 形成多種緯度.
指標的某些標簽以 "__"開頭的, 這些標簽時在 Prometheus 系統內部使用的, 在形式上 http_request_total{status="200"} 和 {__name__="http_request_total ", status="200"} 代表相同的指標.
Prometheus 指標采用標簽的方式能夠很好的與容器結合, 無論是原生 Docker 還是 Kubernetes, 都通過標簽關聯資源.
指標類型(Metric Types)
Prometheus 使用四種方法來描述監控的指標
Counter
計數器, 用於保存單調遞增型的數據, 例如站點訪問次數, 機器的啟動時間, HTTP訪問量等, 不能為負值, 也不支持減少, 但可以重置回0;
Counter 具有很好的不關聯性, 不會因為重啟而置0, 我們使用 Counter 指標是, 通常會結合 rate() 方法獲取該指標在某個時間段的變化, 例如, "HTTP請求總數", 指標就屬於典型的 Counter 指標, 通過對他進行 rate()操作, 可以得出請求的變化率.
Gauge
儀表盤, 用於存儲有着起伏特征的數據實施變化的數據, 例如內存空閑大小等可增可減.
Gauge 是 Counter 的超集, 但存在指標數據丟失的可能性, Counter 能讓用戶確切的了解指標隨時間的變化狀態, 而 Gauge 則可能隨時間流逝而精准度越來越低.
Histogram
直方圖, 它會在一段時間范圍內對數據進行采樣, 並將其計入可配置的 bucket 之中, Histogram 能夠存儲更多的信息, 包括樣本值分布在每個 bucket (bucket 自身可配置) 中的數量, 所有樣本值之和以及總的樣本數量, 從而 Prometheus 能夠使用內置函數進行如下操作.
-
計算樣本平均值, 以值的總和除以值的數量.
-
計算樣本分位值: 分位數有助於來哦接符合特定標准數據個數, 例如評估響應時長超過1秒中的請求比例, 若超過20%即發送告警信息.
Summary
摘要, Histogram 的擴展類型, 單他是直接被檢測端自行聚合計算出分位數, 並將計算結果響應給Prometheus Server 的樣本采集請求, 因而其分位數計算是由監控端完成.
作業(Job)和實例(Instance)
Instance: 即能夠接收 Prometheus Server 數據 Scrape 操作的每個網絡端點(endpoint), 即為一個 Instance(實例)
通常, 具有類似功能的 Instance 的集合成為一個 Job, 例如一個 Mysql 主從復制幾圈中的所有 Mysql 進程.