本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
範本化標籤和註釋
本文件主題是針對支援 Grafana 9.x 版的 Grafana 工作區所設計。
如需支援 Grafana 10.x 版的 Grafana 工作區,請參閱。在 Grafana 第 10 版工作
如需支援 Grafana 8.x 版的 Grafana 工作區,請參閱。在 Grafana 第 8 版中工作
在 Grafana 中,您可以像在 Prometheus 中一樣模板標籤和註釋。如果您之前已經使用過 Prometheus,您應該熟悉$labels
和$value
變數,其中包含警示的標籤和值。即使警示不使用 Prometheus 資料來源,您也可以在 Grafana 中使用相同的變數。如果你還沒有使用 Prometheus 之前,然後不要擔心,因為每個這些變量,以及如何模板它們,將解釋你按照本頁的其餘部分。
Go 的模板語言
標籤和註釋的模板用 Go 的模板語言,文
開啟和結束標籤
在文本/模板中,模板開始{{
和結束與無}}
論模板是否打印一個變量還是運行控制結構,如 if 語句。這與其他模板語言(例如 Jinja)不同,其中打印變量使用{{
和}}
和控制結構使用{%
和%}
。
Print (列印)
要打印的東西使用{{
和的價值}}
。您可以打印函數的結果或變量的值。例如,要打印$labels
變量,您可以編寫以下內容:
{{ $labels }}
迭代標籤
要迭代中的每個標籤,$labels
可以使用range
. 這裡$k
指的是名稱,並$v
指的是當前標籤的值。例如,如果您的查詢返回了一個標籤,instance=test
那麼$k
將是instance
並且$v
將是test
。
{{ range $k, $v := $labels }} {{ $k }}={{ $v }} {{ end }}
標籤,值和值變量
標籤變量
$labels
變數包含查詢中的標籤。例如,檢查執行個體是否關閉的查詢可能會傳回含有停用執行個體名稱的執行個體標籤。例如,假設您的警示規則會在其中一個執行個體停用超過 5 分鐘時觸發。您想要在警示中新增摘要,告訴您哪個執行個體已關閉。您可以使用$labels
變數建立摘要,以便在摘要中列印執行個體標籤:
Instance {{ $labels.instance }} has been down for more than 5 minutes
標籤, 由于, 點
如果要打印的標籤在其名稱中使用模板中的相同點包含一個點(句號或句點)將無法正常工作:
Instance {{ $labels.instance.name }} has been down for more than 5 minutes
這是因為範本嘗試使用名為 in 的不存name
在$labels.instance
欄位。您應該改用該index
函數,該函數將在$labels
變量instance.name
中打印標籤:
Instance {{ index $labels "instance.name" }} has been down for more than 5 minutes
值變量
該$value
變量的工作原理不同於 Prometheus。在 Prometheus $value
是一個包含表達式值的浮點數,但在 Grafana 中,它是一個字符串,其中包含所有閾值,減少和數學表達式的標籤和值,以及此警報規則的經典條件。它不包含查詢結果,因為這些查詢結果可以返回從 10 到 10,000 個行或指標的任何位置。
如果您要在警示摘要中使用$value
變數:
{{ $labels.service }} has over 5% of responses with 5xx errors: {{ $value }})
摘要可能如下所示:
api has an over 5% of responses with 5xx errors: [ var='B' labels={service=api} value=6.789 ]
這裡var='B'
指的是帶有 ReFID B 的運算式。在 Grafana 中,所有查詢和運算式都由 ReFID 識別,該 ReFID 可識別警示規則中的每個查詢和運算式。同樣地labels={service=api}
指的是標籤,並value=6.789
指的是值。
您可能已經觀察到沒有 ReFID A。這是因為在大多數警報規則中,ReFID A 是指查詢,並且由於查詢可以返回許多行或時間序列,因此它們不包含在其中。$value
值變量
如果$value
變數包含的資訊超出您需要的資訊,您可以改為使用列印個別運算式的標籤和值$values
。與此不同的是$value
,$values
變數是一個物件表,其中包含每個運算式的標籤和浮點值,並以其 ReFID 編製索引。
如果您要B
在警報摘要中使用 reFID 列印運算式的值:
{{ $labels.service }} has over 5% of responses with 5xx errors: {{ $values.B }}%
摘要將只包含以下值:
api has an over 5% of responses with 5xx errors: 6.789%
但是,當打{{ $values.B }}
印數字 6.789 時,它實際上是一個字符串,因為您打印包含 ReFID B 的標籤和值的對象,而不是 B 的浮點值。要使用 ReFID B 的浮點值,您必須使用來自的字段。Value
$values.B
如果您要在警報摘要中將浮點值人性化:
{{ $labels.service }} has over 5% of responses with 5xx errors: {{ humanize $values.B.Value }}%
沒有數據,運行時錯誤和超時
如果警示規則中的查詢未傳回任何資料,或因為資料來源錯誤或逾時而失敗,則使用該查詢的任何臨界值、Reduce 或 Math 運算式也不會傳回任何資料或錯誤。發生這種情況時,這些表達式將不存在$values
。最好在使用它之前檢查 ReFID 是否存在,否則,如果查詢沒有返回任何數據或錯誤,則模板將中斷。您可以使用 if 語句來執行此操作:
{{ if $values.B }}{{ $labels.service }} has over 5% of responses with 5xx errors: {{ humanizePercentage $values.B.Value }}{{ end }}
經典條件
如果規則使用「傳統條件」而不是「臨界值」、「減少」和「數學」運算式,則$values
變數會由「傳統條件」中的「參照 ID」和條件的位置編製索引。例如,如果您有一個 ReFID B 包含兩個條件的傳統條件,則$values
將包含兩個條件B0
和B1
。
The first condition is {{ $values.B0 }}, and the second condition is {{ $values.B1 }}
函數
展開標籤和註釋時,也可以使用以下功能:
參數
該args
函數將對象列表轉換為帶有鍵 arg0,arg1 等的地圖。這是為了允許將多個參數傳遞給模板。
範例
{{define "x"}}{{.arg0}} {{.arg1}}{{end}}{{template "x" (args 1 "2")}}
1 2
外部網址
該externalURL
函數返回 Grafana 服務器的外部 URL 作為在 ini 文件(S)配置。
範例
{{ externalURL }}
https://example.com/grafana
圖形連結
此graphLink
函數會探索在 Grafana 第 9 版針對指定的運算式和資料來源,傳回中圖形檢視的路徑。
範例
{{ graphLink "{\"expr\": \"up\", \"datasource\": \"gdev-prometheus\"}" }}
/explore?left=["now-1h","now","gdev-prometheus",{"datasource":"gdev-prometheus","expr":"up","instant":false,"range":true}]
人性化
該humanize
函數使十進制數字人性化。
範例
{{ humanize 1000.0 }}
1k
人文化
其humanize1024
作品類似於,humanize
但使用 1024 作為基礎,而不是 1000。
範例
{{ humanize1024 1024.0 }}
1ki
人性化
該humanizeDuration
功能在幾秒鐘內使持續時間變得人性化。
範例
{{ humanizeDuration 60.0 }}
1m 0s
人性百分比
該humanizePercentage
功能使比率值與百分比進行人性化。
範例
{{ humanizePercentage 0.2 }}
20%
人性化時間戳
該humanizeTimestamp
函數人性化了 Unix 時間戳。
範例
{{ humanizeTimestamp 1577836800.0 }}
2020-01-01 00:00:00 +0000 UTC
比賽
該match
函數與正則表達式模式匹配文本。
範例
{{ match "a.*" "abc" }}
true
路徑前綴
該pathPrefix
函數返回在 ini 文件中配置的 Grafana 服務器的路徑。
範例
{{ pathPrefix }}
/grafana
。表格鏈接
此tableLink
函數會探索在 Grafana 第 9 版針對指定的運算式和資料來源,傳回中表格檢視的路徑。
範例
{{ tableLink "{\"expr\": \"up\", \"datasource\": \"gdev-prometheus\"}" }}
/explore?left=["now-1h","now","gdev-prometheus",{"datasource":"gdev-prometheus","expr":"up","instant":true,"range":false}]
標題
該title
函數大寫每個單詞的第一個字符。
範例
{{ title "hello, world!" }}
Hello, World!
toLower
該toLower
函數返回小寫的所有文本。
範例
{{ toLower "Hello, world!" }}
hello, world!
toUpper
該toUpper
函數返回大寫的所有文本。
範例
{{ toUpper "Hello, world!" }}
HELLO, WORLD!
reReplaceAll
reReplaceAll
函數會取代符合規則運算式的文字。
範例
{{ reReplaceAll "localhost:(.*)" "example.com:$1" "localhost:8080" }}
example.com:8080