ラベルと注釈のテンプレート化 - 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 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.050.00.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