模板參考

Prometheus 支援在告警的註解(annotation)和標籤(label)中以及提供的控制檯頁面中使用模板。模板能夠對本地資料庫執行查詢、迴圈遍歷資料、使用條件判斷、格式化資料等。Prometheus 模板語言基於 Go 模板  系統。

資料結構

處理時間序列資料的主要資料結構是樣本(sample),定義為

type sample struct {
  Labels map[string]string
  Value  interface{}
}

樣本的指標名稱編碼在 Labels 對映(map)中特殊的 __name__ 標籤裡。

[]sample 表示樣本列表。

Go 中的 interface{} 類似於 C 中的 void 指標。

函式

除了 Go 模板提供的預設函式 之外,Prometheus 還提供了能在模板中更輕鬆處理查詢結果的函式。

如果函式用於管道中,管道值將作為最後一個引數傳遞。

查詢

名稱引數返回備註
query查詢字串[]sample查詢資料庫,不支援返回範圍向量(range vector)。
first[]samplesample等同於 index a 0
labellabel, samplestring等同於 index sample.Labels label
valuesampleinterface{}等同於 sample.Value
sortByLabellabel, []samples[]sample按給定的標籤對樣本進行排序。該排序是穩定的(stable)。

firstlabelvalue 旨在讓查詢結果能夠輕鬆在管道中使用。

數字

名稱引數返回備註
humanize數字或字串string使用指標字首 將數字轉換為更具可讀性的格式。
humanize1024數字或字串string類似於 humanize,但使用 1024 作為基數,而不是 1000。
humanizeDuration數字或字串string將以秒為單位的持續時間轉換為更具可讀性的格式。
humanizePercentage數字或字串string將比例值轉換為百分比(100的分數)。
humanizeTimestamp數字或字串string將以秒為單位的 Unix 時間戳轉換為更具可讀性的格式。
toTime數字或字串*time.Time將以秒為單位的 Unix 時間戳轉換為 time.Time。
toDuration數字或字串*time.Duration將以秒為單位的持續時間轉換為 time.Duration。
nowfloat64返回評估模板時的 Unix 時間戳(以秒為單位)。

人性化(humanizing)函式旨在產生適合人類閱讀的合理輸出,且不保證在不同的 Prometheus 版本之間返回相同的結果。

字串

名稱引數返回備註
titlestringstringcases.Title ,將每個單詞的首字母大寫。
toUpperstringstringstrings.ToUpper ,將所有字元轉換為大寫。
toLowerstringstringstrings.ToLower ,將所有字元轉換為小寫。
stripPortstringstringnet.SplitHostPort ,將字串拆分為主機和埠,然後僅返回主機。
matchpattern, text布林值regexp.MatchString  測試未錨定的正則表示式匹配。
reReplaceAllpattern, replacement, textstringRegexp.ReplaceAllString  正則表示式替換,未錨定。
graphLinkexprstring返回表示式在表示式瀏覽器中圖表(graph)檢視的路徑。
tableLinkexprstring返回表示式在表示式瀏覽器中表格("Table")檢視的路徑。
parseDurationstringfloat將持續時間字串(例如 "1h")解析為其表示的秒數。
stripDomainstringstring刪除 FQDN 的域名部分。保留埠不變。
urlQueryEscapestringstringurl.QueryEscape  對字串進行轉義,使其可以安全地放入 URL 查詢中。

其他

名稱引數返回備註
args[]interface{}map[string]interface{}這會將物件列表轉換為一個鍵為 arg0、arg1 等的對映(map)。旨在允許將多個引數傳遞給模板。
tmplstring, []interface{}類似於內建的 template,但允許使用非字面量作為模板名稱。請注意,結果被假定為安全的,不會自動進行轉義。僅在控制檯中可用。
safeHtmlstringstring將字串標記為不需要自動轉義的 HTML。
externalURLstringPrometheus 可從外部訪問的外部 URL。
pathPrefixstring用於控制檯模板中的外部 URL 路徑 

模板型別差異

每種型別的模板都提供不同的資訊,可用於使模板引數化,並且還有一些其他差異。

告警欄位模板

.Value.Labels.ExternalLabels.ExternalURL 分別包含告警值、告警標籤、全域性配置的外部標籤以及外部 URL(使用 --web.external-url 配置)。為了方便起見,它們還分別作為 $value$labels$externalLabels$externalURL 變數暴露。

控制檯模板

控制檯暴露在 /consoles/ 上,並源自 -web.console.templates 標誌所指向的目錄。

控制檯模板使用 html/template  進行渲染,該引擎提供了自動轉義。要繞過自動轉義,請使用 safe* 函式。,

URL 引數在 .Params 中以對映(map)形式可用。要訪問具有相同名稱的多個 URL 引數,.RawParams 是每個引數的列表值的對映。URL 路徑在 .Path 中可用,不包括 /consoles/ 字首。全域性配置的外部標籤在 .ExternalLabels 中可用。這四個引數也都有方便的變數:$rawParams$params$path$externalLabels

控制檯還可以訪問透過 -web.console.libraries 標誌指向的目錄中的 *.lib 檔案中定義的所有具有 {{define "templateName"}}...{{end}} 的模板。由於這是一個共享名稱空間,請注意避免與其他使用者發生衝突。以 prom_prom__ 開頭的模板名稱保留給 Prometheus 使用,上述列出的函式也是如此。

本頁內容