Go のテンプレート言語の使用 - Amazon Managed Grafana

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Go のテンプレート言語の使用

このドキュメントトピックは、Grafana バージョン 10.x をサポートする Grafana ワークスペース向けに設計されています。

Grafana バージョン 9.x をサポートする Grafana ワークスペースについては、「」を参照してくださいGrafana バージョン 9 での作業

Grafana バージョン 8.x をサポートする Grafana ワークスペースについては、「」を参照してくださいGrafana バージョン 8 での作業

通知テンプレートは、Go のテンプレート言語であるテキスト/テンプレート で記述します。

このセクションでは、Go のテンプレート言語の概要と、テキスト/テンプレートでのテンプレートの記述について説明します。

ドット

テキスト/テンプレートにはドットと呼ばれる特別なカーソルがあり、 として記述されます.。このカーソルは、テンプレートのどこで使用されるかによって値が変化する変数と考えることができます。例えば、通知テンプレートの開始時には、、、Alerts、、 などの多数のフィールドを含む ExtendedData オブジェクト.を参照StatusGroupLabelsCommonLabelsCommonAnnotationsしますExternalURL。ただし、ドットは、リストrange上の で使用する場合、 内で使用する場合、または他のテンプレートで使用する機能テンプレートを記述する場合にwith、別のものを参照することがあります。この例については、通知テンプレートを作成する「」、およびすべてのデータと関数については「」を参照してくださいテンプレートリファレンス

タグの開閉

テキスト/テンプレートでは、テンプレートが変数を出力するか、if }} ステートメントなどの制御構造を実行するかに関係なく、テンプレートは で始まり、 で{{終わります。これは、変数の印刷で と を使用し、制御構造で {{ }}と を使用する Jinja などの他のテンプレート言語とは異なり{%ます%}

[Print]

何かの値を出力するには、 {{と を使用します}}。ドットの値、ドットのフィールド、関数の結果、および変数 の値を印刷できます。例えば、ドットが参照するAlertsフィールドを出力するにはExtendedData、次のように記述します。

{{ .Alerts }}

アラートを反復処理する

アラートに関するすべての情報ではなく、各アラートのラベルのみを印刷するには、 を使用して でアラートをrange反復処理できますExtendedData

{{ range .Alerts }} {{ .Labels }} {{ end }}

範囲内のドットは、 ではなくExtendedData、 を参照しますAlert。を使用して{{ .Labels }}、各アラートのラベルを印刷できます。これは、アラートのリスト内の現在のアラートを参照するようにドット{{ range .Alerts }}が変更されるため機能します。範囲が終了すると、ドットは範囲の開始前に存在していた値にリセットされます。この例では ですExtendedData

{{ range .Alerts }} {{ .Labels }} {{ end }} {{/* does not work, .Labels does not exist here */}} {{ .Labels }} {{/* works, cursor was reset */}} {{ .Status }}

注釈とラベルを反復処理する

各アラートのラベルを 形式で出力するテンプレートを記述しましょう。ここでThe name of the label is $name, and the value is $value$nameと には各ラベルの名前と値$valueが含まれています。

前の例と同様に、範囲を使用して のアラートを反復処理し、ドットがアラートのリスト内の現在のアラートを参照.Alertsするようにします。次に、ソートされたラベルで 2 番目の範囲を使用して、ドットが現在のラベルを参照するように 2 回目に更新されます。2 番目の範囲内では、 .Name.Value を使用して各ラベルの名前と値を出力します。

{{ range .Alerts }} {{ range .Labels.SortedPairs }} The name of the label is {{ .Name }}, and the value is {{ .Value }} {{ end }} {{ range .Annotations.SortedPairs }} The name of the annotation is {{ .Name }}, and the value is {{ .Value }} {{ end }} {{ end }}

インデックス関数

特定の注釈またはラベルを印刷するには、 index関数を使用します。

{{ range .Alerts }} The name of the alert is {{ index .Labels "alertname" }} {{ end }}

If ステートメント

テンプレート内の ステートメントの場合は、 を使用できます。例えば、 にアラートThere are no alertsがない場合に出力するには.Alerts、次のように記述します。

{{ if .Alerts }} There are alerts {{ else }} There are no alerts {{ end }}

は if ステートメントと似ていますが、 if ステートメントとは異なり、 はドットwithを更新して の値を参照します。

{{ with .Alerts }} There are {{ len . }} alert(s) {{ else }} There are no alerts {{ end }}

変数

テキスト/テンプレートの変数は、テンプレート内に作成する必要があります。例えば、$variable現在の値がドットの という変数を作成するには、次のように記述します。

{{ $variable := . }}

範囲内$variableの または を使用できます。withまた、変数が定義された時点でのドットの値を参照し、ドットの現在の値を参照しません。

例えば、2 {{ .Labels }}番目の範囲で を使用するテンプレートを記述することはできません。ここでのドットは、現在のアラートではなく、現在のラベルを参照するためです。

{{ range .Alerts }} {{ range .Labels.SortedPairs }} {{ .Name }} = {{ .Value }} {{/* does not work because in the second range . is a label not an alert */}} There are {{ len .Labels }} {{ end }} {{ end }}

これを修正するには、最初の範囲と 2 番目の範囲の前に $alert という変数を定義します。

{{ range .Alerts }} {{ $alert := . }} {{ range .Labels.SortedPairs }} {{ .Name }} = {{ .Value }} {{/* works because $alert refers to the value of dot inside the first range */}} There are {{ len $alert.Labels }} {{ end }} {{ end }}

インデックスを含む範囲

範囲内の各アラートのインデックスを取得するには、範囲の開始時にインデックス変数と値変数を定義します。

{{ $num_alerts := len .Alerts }} {{ range $index, $alert := .Alerts }} This is alert {{ $index }} out of {{ $num_alerts }} {{ end }}

テンプレートの定義

define とテンプレートの名前を二重引用符で囲むことで、他のテンプレート内で使用できるテンプレートを定義できます。、、、 などのデフォルトテンプレートを含め、他のテンプレートと同じ名前のテンプレートを定義しないでください__subject__text_values_list__text_alert_listdefault.titledefault.message。デフォルトテンプレートと同じ名前のテンプレート、または別の通知テンプレートのテンプレートが作成されている場合、Grafana はどちらのテンプレートも使用できます。Grafana は、同じ名前のテンプレートが 2 つ以上ある場合、エラーメッセージを防止したり表示したりしません。

{{ define "print_labels" }} {{ end }}

テンプレートを実行する

定義済みテンプレートはtemplate、 、二重引用符で囲まれたテンプレートの名前、およびテンプレートに渡す必要があるカーソルを使用してテンプレート内で実行できます。

{{ template "print_labels" . }}

テンプレートにデータを渡す

テンプレートドット内では、テンプレートに渡される値を参照します。

例えば、テンプレートに発射アラートのリストが渡された場合、ドットはその発射アラートのリストを参照します。

{{ template "print_alerts" .Alerts }}

テンプレートにアラートのソート済みラベルが渡された場合、ドットはソート済みラベルのリストを参照します。

{{ template "print_labels" .SortedLabels }}

これは、再利用可能なテンプレートを記述する場合に便利です。例えば、すべてのアラートを出力するには、次のように記述します。

{{ template "print_alerts" .Alerts }}

次に、発砲アラートだけを印刷するには、次のように記述します。

{{ template "print_alerts" .Alerts.Firing }}

これは、 .Alertsと の両方.Alerts.Firingがアラートのリストであるために機能します。

{{ define "print_alerts" }} {{ range . }} {{ template "print_labels" .SortedLabels }} {{ end }} {{ end }}

コメント

{{/* および を使用してコメントを追加できます*/}}

{{/* This is a comment */}}

コメントに改行が追加されないようにするには、以下を使用します。

{{- /* This is a comment with no leading or trailing line breaks */ -}}

インデント

インデント、タブとスペースの両方、改行を使用して、テンプレートをより読みやすくすることができます。

{{ range .Alerts }} {{ range .Labels.SortedPairs }} {{ .Name }} = {{ .Value }} {{ end }} {{ end }}

ただし、テンプレートのインデントはテキストにも存在します。次に、削除する方法を説明します。

スペースと改行を削除する

テキスト/テンプレートでは、 {{-と を使用して、先頭と末尾-}}のスペースと改行を削除します。

例えば、インデントと改行を使用してテンプレートをより読みやすくする場合:

{{ range .Alerts }} {{ range .Labels.SortedPairs }} {{ .Name }} = {{ .Value }} {{ end }} {{ end }}

インデントと改行はテキストにも表示されます。

alertname = "Test" grafana_folder = "Test alerts"

各範囲の開始-}}時に }}に変更されたテキストからインデントと改行を削除できます。

{{ range .Alerts -}} {{ range .Labels.SortedPairs -}} {{ .Name }} = {{ .Value }} {{ end }} {{ end }}

これで、テンプレートのインデントと改行がテキストに表示されなくなります。

alertname = "Test" grafana_folder = "Test alerts"