範本化標籤和註釋 - Amazon Managed Grafana

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

範本化標籤和註釋

本文件主題是針對支援 Grafana 10.x 版的 Grafana 工作區所設計。

如需支援 Grafana 9.x 版的 Grafana 工作區,請參閱。在 Grafana 第 9 版中工作

如需支援 Grafana 8.x 版的 Grafana 工作區,請參閱。在 Grafana 第 8 版中工作

您可以使用樣板在標示和註解中包括查詢和表示式中的資料。例如,您可能想要根據查詢的值來設定警示的嚴重性標籤,或在摘要註釋中使用查詢中的執行個體標籤,以便知道哪個伺服器的 CPU 使用率很高。

所有模板都應該用文本/模板編寫。無論您是模板化標籤還是註釋,都應該在模板化的標籤或註釋中內嵌地寫入每個模板。這意味著您無法在標示和註解之間共用樣板,而是需要將樣板複製到您想要使用的任何位置。

每當評估警示規則時,系統都會評估每個範本,並分別評估每個警示。例如,如果您的警示規則具有範本化摘要註釋,且警示規則有 10 個觸發警示,則範本會針對每個警示執行一次 10 次。您應該盡量避免在模板中進行昂貴的計算。

範例

下面的示例不是在文本/模板上編寫完整的教程,而是試圖展示我們看到的模板最常見的用例。您可以逐字使用這些範例,或根據您的使用案例進行調整。有關如何編寫文本/模板的更多信息,請參閱文本/模板檔。

打印所有標籤,逗號分隔

要打印所有標籤,逗號分隔,打印$labels變量:

{{ $labels }}

例如,給定帶有標籤的警報alertname=High CPU usagegrafana_folder=CPU alerts並且instance=server1,這將打印:

alertname=High CPU usage, grafana_folder=CPU alerts, instance=server1
注意

如果您使用的是傳統條件,則不$labels會包含查詢中的任何標籤。如需詳細資訊,請參閱 $ 標籤變數

列印所有標籤,每行一個

要打印所有標籤,每行一個,請使用 a range 遍歷每個鍵/值對並單獨打印它們。這裡$k指的是名稱和$v指的是當前標籤的值:

{{ range $k, $v := $labels -}} {{ $k }}={{ $v }} {{ end }}

例如,給定帶有標籤的警報alertname=High CPU usagegrafana_folder=CPU alerts並且instance=server1,這將打印:

alertname=High CPU usage grafana_folder=CPU alerts instance=server1
注意

如果您使用的是傳統條件,則不$labels會包含查詢中的任何標籤。如需詳細資訊,請參閱 $ 標籤變數

列印個別標籤

若要列印個別標籤,請使用具有$labels變數的index函數:

The host {{ index $labels "instance" }} has exceeded 80% CPU usage for the last 5 minutes

例如,給定帶有標籤的警報instance=server1,這將打印:

The host server1 has exceeded 80% CPU usage for the last 5 minutes
注意

如果您使用的是傳統條件,則不$labels會包含查詢中的任何標籤。如需詳細資訊,請參閱 $ 標籤變數

打印查詢的值

要打印即時查詢的值,您可以使用index$values數和變量打印其 Ref ID:

{{ index $values "A" }}

例如,給定一個返回值 81.2345 的即時查詢,這將打印:

81.2345

若要列印範圍查詢的值,您必須先將其從時間序列縮減為具有 reduce 運算式的即時向量。然後,您可以改用 Reef ID 來列印 reduce 運算式的結果。例如,如果 reduce 運算式取得 A 的平均值,且具有參考 ID B,您可以寫入:

{{ index $values "B" }}

打印查詢的人性化價值

要打印即時查詢的人性化值,請使用以下humanize函數:

{{ humanize (index $values "A").Value }}

例如,給定一個返回值 81.2345 的即時查詢,這將打印:

81.234

若要列印範圍查詢的人性化值,您必須先將其從時間序列縮減為具有 reduce 運算式的即時向量。然後,您可以改用 Reef ID 來列印 reduce 運算式的結果。例如,如果 reduce 運算式取得 A 的平均值,且具有參考 ID B,您可以寫入:

{{ humanize (index $values "B").Value }}

以百分比列印查詢的值

要以百分比打印即時查詢的值,請使用以下humanizePercentage函數:

{{ humanizePercentage (index $values "A").Value }}

該函數期望該值是 0 和 1 之間的十進制數字。如果該值是介於 0 到 100 之間的十進位數字,您可以在查詢中或使用數學運算式將其除以 100。如果查詢是範圍查詢,您必須先將其從時間序列縮減為具有 reduce 運算式的即時向量。

根據查詢的值設定嚴重性

若要從查詢的值設定嚴重性標籤,請使用 if 陳述式和大於比較函數。確保在進行比較時使用小數(80.050.00.0,等),$values因為文本/模板不支持類型強制。您可以這裡找到所有支持的比較函數的列表。

{{ if (gt $values.A.Value 80.0) -}} high {{ else if (gt $values.A.Value 50.0) -}} medium {{ else -}} low {{- end }}

從經典條件打印所有標籤

如果您使$labels用傳統條件,則無法使用從查詢列印標籤,$values而且必須改為使用。原因是傳統條件會捨棄這些標籤以強制執行一維行為 (每個警示規則最多一個警示)。如果傳統條件沒有捨棄這些標籤,則傳回許多時間序列的查詢會導致警示在觸發和不斷解決之間切換,因為每次評估警示規則時,標籤都會變更。

相反地,$values變數會針對所有觸發的條件,包含所有時間序列的減少值。例如,如果您的警示規則包含傳回兩個時間序列的查詢 A,而傳回兩個條件的傳統條件 B,則$values會包含B0B1B2B3。如果經典條件 B 只有一個條件,那麼$values將包含只是B0B1

要打印所有觸發時間序列的所有標籤,請使用以下模板(如果不同,請確保B在正則表達式中用經典條件的 Ref ID 替換):

{{ range $k, $v := $values -}} {{ if (match "B[0-9]+" $k) -}} {{ $k }}: {{ $v.Labels }}{{ end }} {{ end }}

例如,超過單一條件的兩個時間序列的傳統條件將會列印:

B0: instance=server1 B1: instance=server2

如果傳統條件具有兩個或多個條件,且時間序列同時超過多個條件,則會針對每個超出的條件複製其標籤:

B0: instance=server1 B1: instance=server2 B2: instance=server1 B3: instance=server2

如果您需要列印唯一的標籤,您應該考慮改為將警示規則從單維變更為多維度。您可以通過使用 reduce 和數學表達式替換經典條件來做到這一點。

從經典條件打印所有值

要打印經典條件中的所有值,請參考前面的示例並$v.Labels替換為$v.Value

{{ range $k, $v := $values -}} {{ if (match "B[0-9]+" $k) -}} {{ $k }}: {{ $v.Value }}{{ end }} {{ end }}

例如,超過單一條件的兩個時間序列的傳統條件將會列印:

B0: 81.2345 B1: 84.5678

如果傳統條件有兩個或更多個條件,且時間序列同時超過多個條件,則$values會包含所有條件的值:

B0: 81.2345 B1: 92.3456 B2: 84.5678 B3: 95.6789

Variables

對標籤和註釋進行範本化時,您可以使用下列變數:

標籤變量

$labels變量包含查詢中的所有標籤。例如,假設您有一個查詢傳回所有伺服器的 CPU 使用率,而且您的警示規則會在過去 5 分鐘內任何伺服器超過 80% 的 CPU 使用率時觸發。您想要將摘要註釋新增至警示,告訴您哪個伺服器的 CPU 使用率過高。使用$labels變量,您可以編寫一個模板來打印一個人類可讀的句子,例如:

CPU usage for {{ index $labels "instance" }} has exceeded 80% for the last 5 minutes
注意

如果您使用的是傳統條件,則不$labels會包含查詢中的任何標籤。傳統條件會捨棄這些標籤,以便強制執行一維行為 (每個警示規則最多一個警示)。如果要在模板中使用查詢中的標籤,請按照以前的操作打印經典條件示例中的所有標籤

值變量

$value變數是包含所有即時查詢的標籤和值的字串;臨界值、reduce 和數學運算式,以及警示規則中的傳統條件。它不包含範圍查詢的結果,因為這些查詢可以返回從 10 到 10,000 行或指標的任何位置。如果是這樣,對於特別大的查詢,單個警報可以使用 10 MB 的內存,並且 Grafana 很快就會耗盡內存。

要在摘要中打印$value變量,您可以寫這樣的內容:

CPU usage for {{ index $labels "instance" }} has exceeded 80% for the last 5 minutes: {{ $value }}

它看起來像這樣:

CPU usage for instance1 has exceeded 80% for the last 5 minutes: [ var='A' labels={instance=instance1} value=81.234 ]

這裡var='A'指的是 Ref ID A 的即時查詢,labels={instance=instance1}指的是標籤,並value=81.234指的是過去 5 分鐘的平均 CPU 使用率。

如果你只想打印一些字符串而不是完整的字符串,然後使用$values變量。它包含與結構化表相同的信息$value,但在結構化表中,並且編寫正則表達式以匹配所需的文本要容易得多。

值變量

$values變數是一個資料表,其中包含所有即時查詢和運算式的標籤和浮點值,並以其 Ref ID 編製索引。

若要使用 Ref ID A 列印即時查詢的值,請執行下列動作:

CPU usage for {{ index $labels "instance" }} has exceeded 80% for the last 5 minutes: {{ index $values "A" }}

例如,給定帶有標籤的警報以instance=server1及帶有該值的即時查詢81.2345,這將打印:

CPU usage for instance1 has exceeded 80% for the last 5 minutes: 81.2345

如果 Ref ID A 中的查詢是範圍查詢而不是即時查詢,請使用 Ref ID B 添加一個 reduce 表達式並(index $values "A")替換為(index $values "B")

CPU usage for {{ index $labels "instance" }} has exceeded 80% for the last 5 minutes: {{ index $values "B" }}

函數

對標籤和註釋進行範本化時,您可以使用以下功能:

參數

args函數將對象列表轉換為帶有鍵 arg0,arg1 等的地圖。這是為了允許將多個參數傳遞給模板。

{{define "x"}}{{.arg0}} {{.arg1}}{{end}}{{template "x" (args 1 "2")}}
1 2

外部網址

externalURL函數返回 Grafana 服務器的外部 URL。

{{ externalURL }}
https://example.com/grafana

圖形連結

graphLink函數會探索在 Grafana 第 10 版針對指定的運算式和資料來源,傳回中圖形檢視的路徑。

{{ 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函數返回 Grafana 服務器的路徑。

{{ pathPrefix }}
/grafana

。表格鏈接

tableLink函數會探索在 Grafana 第 10 版針對指定的運算式和資料來源,傳回中表格檢視的路徑。

{{ 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