前言
本文來自Prometheus官網手冊1、Prometheus官網手冊2 和 Prometheus簡介
說明
metrics和labels(度量指標名稱和標簽)
每一個時間序列數據由metric度量指標名稱和它的標簽labels鍵值對集合唯一確定。
這個metric度量指標名稱指定監控目標系統的測量特征(如:http_requests_total- 接收http請求的總計數)。
注意:冒號保留用於用戶定義的錄制規則。 它們不應被exporter或直接儀表使用。
labbels開啟了Prometheus的多維數據模型:對於相同的度量名稱,通過不同標簽列表的結合, 會形成特定的度量維度實例。(例如:所有包含度量名稱為/api/tracks的http請求,打上method=POST的標簽,則形成了具體的http請求)。這個查詢語言在這些度量和標簽列表的基礎上進行過濾和聚合。改變任何度量上的任何標簽值,則會形成新的時間序列圖。
metric度量指標可能包含ASCII字母、數字、下划線和冒號,他必須配正則表達式[a-zA-Z_:][a-zA-Z0-9_:]*。
label標簽名稱可以包含ASCII字母、數字和下划線。它們必須匹配正則表達式[a-zA-Z_][a-zA-Z0-9_]*。
帶有_下划線的標簽名稱被保留內部使用,標簽labels值包含任意的Unicode碼。
具體詳見metrics和labels命名最佳實踐。
樣本
樣本形成了實際的時間序列數據列表。每個采樣值包括:
- 一個64位的浮點值
- 一個精確到毫秒級的時間戳
Notation(符號)
表示一個度量指標和一組鍵值對標簽,需要使用以下符號:
[metric name]{[label name]=[label value], ...}
例如,度量指標名稱是api_http_requests_total, 標簽為method="POST", handler="/messages" 的示例如下所示:
api_http_requests_total{method="POST", handler="/messages"}
這些命名和OpenTSDB使用方法是一樣的。
度量指標類型
Prometheus客戶端庫提供了四種核心的metrics類型,這四種類型目前僅在客戶端庫和wire協議中區分。Prometheus服務還沒有充分利用這些類型,將來可能會發生改變。
Counter(計數器)
counter 是表示單個單調遞增計數器的累積度量,其值只能在重啟時增加或重置為零。 例如,您可以使用計數器來表示所服務的請求數,已完成的任務或錯誤。
不要使用計數器來暴露可能減少的值。例如,不要使用計數器來處理當前正在運行的進程數,而是使用gauge。
客戶端使用計數器的文檔:
Gauge(測量器)
gauge是一個度量指標,它表示一個既可以遞增, 又可以遞減的值。
測量器主要測量類似於溫度、當前內存使用量等,也可以統計當前服務運行隨時增加或者減少的Goroutines數量
客戶端使用計量器的文檔:
Histogram(柱狀圖)
直方圖對觀察結果進行采樣(通常是請求持續時間或響應大小等),並將其計入可配置存儲桶中。它還提供所有觀察值的總和。基本度量標准名稱為<basename>的直方圖在scrape期間顯示多個時間序列:
- 暴露的觀察桶的累積計數器:
<basename>_bucket{le="<upper inclusive bound>"} - 所有觀測值的總和:
<basename>_sum - 已觀察到的事件數:
<basename>_count,和<basename>_bucket{le="+Inf"}相同
使用histogram_quantile函數, 計算直方圖或者是直方圖聚合計算的分位數閾值。 一個直方圖計算Apdex值也是合適的, 當在buckets上操作時,記住直方圖是累計的。詳見直方圖和總結
客戶庫的直方圖使用文檔:
Summary
類似histogram柱狀圖,summary是采樣點分位圖統計(通常是請求持續時間和響應大小等)。雖然它還提供觀察的總數和所有觀測值的總和,但它在滑動時間窗口上計算可配置的分位數。基本度量標准名稱<basename>的summary在scrape期間公開了多個時間序列:
- 流φ-quantiles (0 ≤ φ ≤ 1), 顯示為
<basename>{quantiles="[φ]"} <basename>_sum, 是指所有觀察值的總和<basename>_count, 是指已觀察到的事件計數值
有關φ-分位數,Summary用法和histogram圖差異的詳細說明,詳見histogram和summaries
有關summaries的客戶端使用文檔:
任務與實例
例如, 一個被稱作api-server的任務有四個相同的實例。
job: api-server instance 1:1.2.3.4:5670 instance 2:1.2.3.4:5671 instance 3:5.6.7.8:5670 instance 4:5.6.7.8:5671
自動化生成的標簽和時間序列
當Prometheus拉取一個目標,會自動地把兩個標簽添加到度量名稱的標簽列表中,分別是:
job: 目標所屬的配置任務名稱。
instance: 被抓取的目標網址的一部分: host:port
如果以上兩個標簽二者之一存在於采樣點中,這個取決於honor_labels配置選項。詳見文檔
對於每個采樣點所在服務instance,Prometheus都會存儲以下的度量指標采樣點:
up{job="[job-name]", instance="instance-id"}:1,表示采樣點所在服務健康;0,標識抓取失敗
scrape_duration_seconds{job="[job-name]", instance="[instance-id]"}: 抓取的持續時間
scrape_samples_post_metric_relabeling{job="<job-name>", instance="<instance-id>"}: 應用度量標准重新標記后剩余的樣本數。
scrape_samples_scraped{job="<job-name>", instance="<instance-id>"}: 目標暴露的樣本數量。
運行時間序列對於實例可用性監視很有用。
