Prometheus是一個最初在SoundCloud上構建的開源系統監視和警報工具包 。自2012年成立以來,許多公司和組織都採用Prometheus,該項目擁有一個很是活躍的開發人員和用戶社區。它如今是一個獨立的開源項目。Prometheus於2016年加入谷歌主導的頂級開源社區雲原生計算基金會(CNCF),成爲第二個頂級託管項目。第一是大名鼎鼎的k8s。 prometheus是屬於下一代監控。可用來監控正則表達式
普羅米修斯的主要特色是:數據庫
Prometheus生態系統由多個組件組成,其中許多組件是可選的,主要有:api
此圖說明了Prometheus的體系結構及其一些生態系統組件: 緩存
Prometheus直接或者間接拉取應用的監控指標,彙總並轉化成自有的時間序列數據模型或者生成告警信息。提供api給具備可視化的一些UI展示層。服務器
Prometheus在記錄時間序列的數據方面表現很是好。它既適用於面向服務器等硬件指標的監控,也適用於高動態的面向服務架構的監控。對於如今流行的微服務,Prometheus的多維度數據收集和數據篩選查詢語言也是很是的強大。Prometheus是爲服務的可靠性而設計的,當服務出現故障時,它可使你快速定位和診斷問題。它的搭建過程對硬件和服務沒有很強的依賴關係。 Prometheus的價值在於可靠性,甚至在很惡劣的環境下,你均可以隨時訪問它和查看系統服務各類指標的統計信息。 若是你對統計數據須要百分之百的精確,那麼Prometheus不是一個很好的選擇。架構
Prometheus存儲的是時序數據, 即按照相同時序(相同的名字和標籤),以時間維度存儲連續的數據的集合。時間序列由metric名稱和label組成,由於隨着時間而改變,因此時序數據都是向量。app
[a-zA-Z_:][a-zA-Z0-9_:]*
, 其名字應該具備語義化,通常表示一個能夠度量的指標。假如咱們來度量http請求的總數,咱們能夠用http_requests_total
來表示。http_requests_total
,若是咱們須要監控來自應用名稱爲myapp
的應用時,咱們就能夠這樣來過濾出咱們想要的數據:http_requests_total{ appliaction="myapp",}
。 若是有多個label用逗號隔開並以逗號結尾。綜上所述,能夠概括出即時向量選擇器通用pattern爲: [metric name]{[label name]=[label value], ...}
函數
上面提到label是一個kv匹配表達式。並不侷限於 =
匹配。 如下是label的匹配運算符:微服務
以下例子:工具
http_requests_total{environment=~"prod|testing",method!="GET"}
用來匹配生產或者測試環境,並且不是get請求的總請求數。
範圍向量選擇器與即時向量選擇器工做原理相同,只不過返回當前時間之前的一系列採樣。時間範圍由附加在向量選擇器尾部的[]指定,具體的值由數字和單位組成,時間單位包括:
例如,返回5分鐘內metric名爲http_requests_total、job是prometheus的所有時間序列:
http_requests_total{job="prometheus"}[5m]
也就是若是咱們對即時向量要作範圍度量,能夠在其後用[rangTime] 來定義。
offset修飾符容許在單個即時向量或範圍向量查詢中設置相對於當前時間的時間偏移。下面的表達式返回http_requests_total5分鐘前的值:
http_requests_total offset 5m
請注意語法上offset修飾符應緊跟在selector後面。
函數 內置函數不少,說幾個使用過的,其餘函數可參考https://prometheus.io/docs/prometheus/latest/querying/functions/
函數 | 功能 |
---|---|
rate | 計算每秒平均值,僅適用於Counter,例如統計QPS |
sum | 計算求和 |
histogram_quantile | 計算分位值 |
Prometheus的時序數據分爲 Counter, Gauge, Histogram, Summary 四種類型:
Counter:計數器。只容許重置或者增長。咱們每每用它記錄服務請求總量,錯誤總數等。例如 Prometheus server 中 http_requests_total, 表示 Prometheus 處理的 http 請求總數,咱們可使用data, 很容易獲得任意區間數據的增量。
Gauge:表示蒐集的數據是一個瞬時的,與時間沒有關係,能夠任意變高變低,每每能夠用來記錄內存使用率、磁盤使用率等。表達一個瞬時的狀態。
Histogram: 採樣觀測值,可進行分位計算和數據聚合,計算在server端完成。一個名爲的metric,其histogram有3個固定的時間序列
Summary:不是根據區間計算出來的而是直接統計一段區間的採樣結果。如請求持續時間或響應大小。不一樣於Histogram,該數值是在客戶端直接統計計算。由於沒有最初值,故而不能聚合。
時間要對齊 大多數聚合的時間序列數據所對應的時間戳沒有對齊。因爲它們的獨立性,咱們須要在這些時間戳中選擇一個時間戳,並已這個時間戳爲基準,獲取小於且最接近這個時間戳的時間序列數據。
數據過時 若是5分鐘內,沒有獲取到任何的時間序列數據,則這個時間戳不會存在。那麼在圖表中看到的數據都是在當前時刻5分鐘前的數據
避免慢查詢和過載 若是一個查詢須要操做很是大的數據量,圖表繪製極可能會超時,或者服務器負載太高。因此對於一個選擇器指標來講須要儘量的精確度。簡而言之就是要儘量經過label來進行標記。
關注公衆號:碼農小胖哥,獲取更多資訊