翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
ラベルと注釈のテンプレート化
このドキュメントトピックは、Grafana バージョン 10.x をサポートする Grafana ワークスペース向けに設計されています。
Grafana バージョン 9.x をサポートする Grafana ワークスペースについては、「」を参照してくださいGrafana バージョン 9 での作業。
Grafana バージョン 8.x をサポートする Grafana ワークスペースについては、「」を参照してくださいGrafana バージョン 8 での作業。
テンプレートを使用して、クエリや式からのデータをラベルや注釈に含めることができます。例えば、クエリの値に基づいてアラートの重要度ラベルを設定したり、サマリーアノテーションでクエリのインスタンスラベルを使用して、CPU 使用率が高いサーバーを特定したりできます。
すべてのテンプレートはテキスト/テンプレート
各テンプレートは、アラートルールが評価されるたびに評価され、アラートごとに個別に評価されます。例えば、アラートルールにテンプレートサマリーアノテーションがあり、アラートルールに 10 個の発動アラートがある場合、テンプレートはアラートごとに 10 回実行されます。テンプレートで高額な計算を行わないようにする必要があります。
例
テキスト/テンプレートに関する完全なチュートリアルを書くのではなく、次の例では、テンプレートで見られた最も一般的なユースケースを表示しようとします。これらの例を逐語的に使用したり、ユースケースに合わせて必要に応じて調整したりできます。テキスト/テンプレートの記述方法の詳細については、テキスト/テンプレート
すべてのラベルをカンマで区切って印刷する
すべてのラベルをカンマで区切って印刷するには、$labels
変数を出力します。
{{ $labels }}
例えば、ラベル alertname=High CPU usage
、、 grafana_folder=CPU alerts
のアラートがあるとinstance=server1
、次のように出力されます。
alertname=High CPU usage, grafana_folder=CPU alerts, instance=server1
注記
クラシック条件を使用している場合、 $labels
にはクエリのラベルは含まれません。詳細については、$labels 変数を参照してください。
すべてのラベルを 1 行に 1 つずつ印刷する
すべてのラベルを 1 行に 1 つずつ印刷range
するには、 を使用して各キーと値のペアを反復処理し、個別に印刷します。ここでは$k
、 の名前を参照し、現在のラベルの値$v
を参照します。
{{ range $k, $v := $labels -}} {{ $k }}={{ $v }} {{ end }}
例えば、ラベル alertname=High CPU usage
、、 grafana_folder=CPU alerts
のアラートがあるとinstance=server1
、次のように出力されます。
alertname=High CPU usage grafana_folder=CPU alerts instance=server1
注記
クラシック条件を使用している場合、 $labels
にはクエリのラベルは含まれません。詳細については、$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
にはクエリのラベルは含まれません。詳細については、$labels 変数を参照してください。
クエリの値を出力する
インスタントクエリの値を出力するには、 index
関数と $values
変数を使用して Ref ID を出力します。
{{ index $values "A" }}
例えば、値 81.2345 を返すインスタントクエリがあると、次のように出力されます。
81.2345
範囲クエリの値を出力するには、まず、減少式を使用して時系列からインスタントベクトルに減らす必要があります。その後、代わりに Ref ID を使用して reduce 式の結果を出力できます。例えば、Reduce 式が A の平均を取り、Ref ID B がある場合、次のように記述します。
{{ index $values "B" }}
クエリのヒューマナイズされた値を印刷する
インスタントクエリのヒューマナイズされた値を出力するには、 humanize
関数を使用します。
{{ humanize (index $values "A").Value }}
例えば、値 81.2345 を返すインスタントクエリがあると、次のように出力されます。
81.234
範囲クエリのヒューマナイズされた値を出力するには、まず減少式を使用して時系列からインスタントベクトルに減らす必要があります。その後、代わりに Ref ID を使用して reduce 式の結果を出力できます。例えば、Reduce 式が A の平均を取り、Ref ID B がある場合、次のように記述します。
{{ humanize (index $values "B").Value }}
クエリの値をパーセンテージで出力する
インスタントクエリの値をパーセンテージで出力するには、 humanizePercentage
関数を使用します。
{{ humanizePercentage (index $values "A").Value }}
この関数は、値が 0~1 の 10 進数であることを想定しています。代わりに値が 0 から 100 までの 10 進数である場合は、クエリまたは数式を使用して 100 で除算できます。クエリが範囲クエリである場合は、まず、減少式を使用して時系列からインスタントベクトルにクエリを減らす必要があります。
クエリの値から重要度を設定する
クエリの値から重要度ラベルを設定するには、if ステートメントとより大きい比較関数を使用します。テキスト/テンプレートは型強制をサポートしていない$values
ため、 と比較するときは必ず小数 (80.0
50.0
、0.0
、 など) を使用してください。サポートされているすべての比較関数のリストは、 で
{{ if (gt $values.A.Value 80.0) -}} high {{ else if (gt $values.A.Value 50.0) -}} medium {{ else -}} low {{- end }}
クラシック条件からすべてのラベルを印刷する
クラシック条件を使用している場合、 $labels
を使用してクエリからラベルを印刷することはできません。$values
代わりに を使用する必要があります。これは、従来の条件がこれらのラベルを破棄して一次元的な動作 (アラートルールごとに最大 1 つのアラート) を適用するためです。クラシック条件がこれらのラベルを破棄しなかった場合、多くの時系列を返したクエリでは、アラートルールが評価されるたびにラベルが変更されるため、発砲と解決の間にアラートがフラッピングされます。
代わりに、 $values
変数には、発動しているすべての条件のすべての時系列の小さい値が含まれます。例えば、2 つの時系列を返すクエリ A と、2 つの条件を持つ従来の条件 B を持つアラートルールがある場合、 $values
には、B0
、、 B1
B2
が含まれますB3
。クラシック条件 B に 1 つの条件しかない場合、 には B0
と のみ$values
が含まれますB1
。
すべての発射時系列のすべてのラベルを出力するには、次のテンプレートを使用します (正規表現B
の を、異なる場合はクラシック条件の Ref ID に置き換えてください)。
{{ range $k, $v := $values -}} {{ if (match "B[0-9]+" $k) -}} {{ $k }}: {{ $v.Labels }}{{ end }} {{ end }}
例えば、1 つの条件を超える 2 つの時系列の従来の条件が出力されます。
B0: instance=server1 B1: instance=server2
クラシック条件に 2 つ以上の条件があり、時系列が同時に複数の条件を超える場合、超過した条件ごとにラベルが重複します。
B0: instance=server1 B1: instance=server2 B2: instance=server1 B3: instance=server2
一意のラベルを印刷する必要がある場合は、代わりにアラートルールを一次元から多次元に変更することを検討する必要があります。これを行うには、従来の条件を reduce 式と Math 式に置き換えます。
クラシック条件のすべての値を出力する
クラシック条件のすべての値を出力するには、前の例に従って を $v.Labels
に置き換えます$v.Value
。
{{ range $k, $v := $values -}} {{ if (match "B[0-9]+" $k) -}} {{ $k }}: {{ $v.Value }}{{ end }} {{ end }}
例えば、1 つの条件を超える 2 つの時系列の従来の条件が出力されます。
B0: 81.2345 B1: 84.5678
クラシック条件に 2 つ以上の条件があり、時系列が同時に複数の条件を超える場合、 $values
にはすべての条件の値が含まれます。
B0: 81.2345 B1: 92.3456 B2: 84.5678 B3: 95.6789
変数
ラベルと注釈をテンプレート化する場合、次の変数を使用できます。
labels 変数
$labels
変数には、クエリのすべてのラベルが含まれます。例えば、すべてのサーバーの CPU 使用率を返すクエリがあり、いずれかのサーバーが過去 5 分間に CPU 使用率の 80% を超えたときに発生するアラートルールがあるとします。アラートに、CPU 使用率が高いサーバーを示す概要アノテーションを追加します。$labels
変数を使用すると、次のような人間が読める文を出力するテンプレートを作成できます。
CPU usage for {{ index $labels "instance" }} has exceeded 80% for the last 5 minutes
注記
クラシック条件を使用している場合、 $labels
にはクエリのラベルは含まれません。クラシック条件は、一次元動作 (アラートルールごとに最大 1 つのアラート) を適用するために、これらのラベルを破棄します。テンプレートでクエリのラベルを使用する場合は、前の「従来の条件のラベルをすべて印刷する」の例に従います。
値変数
$value
変数は、アラートルールのすべてのインスタントクエリのラベルと値、しきい値、減少式と数式、および古典的な条件を含む文字列です。範囲クエリの結果は含まれません。範囲クエリは 10 から 10,000 行またはメトリクスまでの任意の場所を返す可能性があるためです。そうした場合、特に大きなクエリでは、1 つのアラートで 10 MBs のメモリが消費され、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}
を参照し、ラベルを参照し、過去 5 分間の平均 CPU 使用率value=81.234
を参照します。
完全な文字列ではなく文字列の一部だけを出力する場合は、 $values
変数を使用します。と同じ情報が含まれていますが$value
、構造化テーブルには含まれており、目的のテキストだけに一致する正規表現を記述する方がはるかに簡単です。
値変数
$values
変数は、すべてのインスタントクエリと式のラベルと浮動小数点値を含むテーブルで、Ref IDs によってインデックス化されます。
参照 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
参照 ID A のクエリがインスタントクエリではなく範囲クエリである場合は、参照 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
externalURL
関数は Grafana サーバーの外部 URL を返します。
{{ externalURL }}
https://example.com/grafana
graphLink
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
関数は 10 進数をヒューマナイズします。
{{ humanize 1000.0 }}
1k
humanize1024
humanize1024
は と似ていますhumanize
が、1000 ではなく 1024 をベースとして使用します。
{{ humanize1024 1024.0 }}
1ki
humanizeDuration
humanizeDuration
関数は、時間を秒単位でヒューマナイズします。
{{ humanizeDuration 60.0 }}
1m 0s
humanizePercentage
humanizePercentage
関数は、比率値をパーセンテージにヒューマナイズします。
{{ humanizePercentage 0.2 }}
20%
humanizeTimestamp
humanizeTimestamp
関数は Unix タイムスタンプをヒューマナイズします。
{{ humanizeTimestamp 1577836800.0 }}
2020-01-01 00:00:00 +0000 UTC
一致
match
関数は、テキストを正規表現パターンと照合します。
{{ match "a.*" "abc" }}
true
pathPrefix
pathPrefix
関数は Grafana サーバーのパスを返します。
{{ pathPrefix }}
/grafana
tableLink
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
関数は、各単語の最初の文字を大文字にします。
{{ 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