資料模型
Prometheus 從根本上將所有資料儲存為 時間序列:屬於相同指標和相同標籤維度集的時間戳值流。除了儲存的時間序列外,Prometheus 還可以生成臨時派生的時間序列作為查詢的結果。
指標名稱和標籤
每個時間序列都由其指標名稱和稱為標籤的可選鍵值對唯一標識。
指標名稱
- 指標名稱應該(SHOULD)指定被測量系統的一般特徵(例如,
http_requests_total- 接收到的 HTTP 請求總數)。 - 指標名稱可以使用(MAY)任何 UTF-8 字元。
- 為了獲得最佳體驗和相容性,指標名稱應該(SHOULD)匹配正則表示式
[a-zA-Z_:][a-zA-Z0-9_:]*(參見下文警告)。該集合之外的指標名稱在 PromQL 等中使用時將需要加引號(參見 UTF-8 指南)。
注意冒號(':')保留用於使用者定義的記錄規則。它們不應該(SHOULD NOT)被匯出器或直接檢測(direct instrumentation)使用。
指標標籤
標籤使您能夠捕獲相同指標名稱的不同例項。例如:所有對 /api/tracks 處理程式使用 POST 方法的 HTTP 請求。我們將其稱為 Prometheus 的“多維資料模型”。查詢語言允許基於這些維度進行過濾和聚合。任何標籤值的更改(包括新增或刪除標籤)都會建立一個新的時間序列。
- 標籤名稱可以使用(MAY)任何 UTF-8 字元。
- 以
__(兩個下劃線)開頭的標籤名稱必須(MUST)保留給 Prometheus 內部使用。 - 為了獲得最佳體驗和相容性,標籤名稱應該(SHOULD)匹配正則表示式
[a-zA-Z_][a-zA-Z0-9_]*(參見下文警告)。該正則表示式之外的標籤名稱在 PromQL 等中使用時將需要加引號(參見 UTF-8 指南)。 - 標籤值可以(MAY)包含任何 UTF-8 字元。
- 具有空標籤值的標籤被視為等同於不存在的標籤。
警告:Prometheus v3.0.0 中相對較晚地添加了對指標和標籤名稱的 UTF-8 支援。更廣泛的生態系統(下游相容 PromQL 的專案和廠商、工具、第三方檢測、收集器等)可能需要時間來採用新的引號機制、放寬驗證等。為了獲得最佳相容性,建議堅持使用推薦的(“應當/SHOULD”)字元集。
資訊:另請參閱命名指標和標籤的最佳實踐。
樣本
樣本構成了實際的時間序列資料。每個樣本由以下部分組成:
- 一個 float64 或 原生直方圖(native histogram) 值
- 一個毫秒精度的時間戳
表示法
給定一個指標名稱和一組標籤,通常使用以下表示法來標識時間序列:
<metric name>{<label name>="<label value>", ...}
例如,一個指標名稱為 api_http_requests_total 且標籤為 method="POST" 和 handler="/messages" 的時間序列可以這樣寫:
api_http_requests_total{method="POST", handler="/messages"}
這與 OpenTSDB 使用的表示法相同。
含有推薦集之外的 UTF-8 字元的名稱必須加引號,使用以下表示法:
{"<metric name>", <label name>="<label value>", ...}
由於指標名稱在內部表示為具有特殊標籤名稱的標籤對(__name__="<指標名稱>"),因此也可以使用以下表示法:
{__name__="<metric name>", <label name>="<label value>", ...}