Prometheus是一個最初在SoundCloud上構建的開源系統監視和警報工具包 。自2012年成立以來,許多公司和組織都採用Prometheus,該項目擁有一個很是活躍的開發人員和用戶社區。它如今是一個獨立的開源項目。Prometheus於2016年加入谷歌主導的頂級開源社區雲原生計算基金會(CNCF),成爲第二個頂級託管項目。第一是大名鼎鼎的k8s。 prometheus是屬於下一代監控。可用來監控應用、容器、JVM、nginx 等nginx
普羅米修斯的主要特色是:正則表達式
Prometheus生態系統由多個組件組成,其中許多組件是可選的,主要有:數據庫
此圖說明了Prometheus的體系結構及其一些生態系統組件: api
Prometheus直接或者間接拉取應用的監控指標,彙總並轉化成自有的時間序列數據模型或者生成告警信息。提供api給具備可視化的一些UI展示層。緩存
Prometheus在記錄時間序列的數據方面表現很是好。它既適用於面向服務器等硬件指標的監控,也適用於高動態的面向服務架構的監控。對於如今流行的微服務,Prometheus的多維度數據收集和數據篩選查詢語言也是很是的強大。Prometheus是爲服務的可靠性而設計的,當服務出現故障時,它可使你快速定位和診斷問題。它的搭建過程對硬件和服務沒有很強的依賴關係。
Prometheus的價值在於可靠性,甚至在很惡劣的環境下,你均可以隨時訪問它和查看系統服務各類指標的統計信息。 若是你對統計數據須要百分之百的精確,那麼Prometheus不是一個很好的選擇。服務器
Prometheus存儲的是時序數據, 即按照相同時序(相同的名字和標籤),以時間維度存儲連續的數據的集合。時間序列由metric名稱和label組成,由於隨着時間而改變,因此時序數據都是向量。架構
[a-zA-Z_:][a-zA-Z0-9_:]*
, 其名字應該具備語義化,通常表示一個能夠度量的指標。假如咱們來度量http請求的總數,咱們能夠用http_requests_total
來表示。http_requests_total
,若是咱們須要監控來自應用名稱爲myapp
的應用時,咱們就能夠這樣來過濾出咱們想要的數據:http_requests_total{ appliaction="myapp",}
。若是有多個label用逗號隔開並以逗號結尾。app
綜上所述,能夠概括出即時向量選擇器通用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/pr...
函數 | 功能 |
---|---|
rate | 計算每秒平均值,僅適用於Counter,例如統計QPS |
sum | 計算求和 |
histogram_quantile | 計算分位值 |
Prometheus的時序數據分爲 Counter, Gauge, Histogram, Summary 四種類型:
Histogram: 採樣觀測值,可進行分位計算和數據聚合,計算在server端完成。一個名爲<basename>的metric,其histogram有3個固定的時間序列
關注公衆號:碼農小胖哥 獲取更多資訊