

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

# メッセージテンプレートの使用
<a name="alert-message-templates"></a>

****  
このドキュメントのトピックは、**Grafana バージョン 8.x** をサポートする Grafana ワークスペース向けです。  
Grafana バージョン 12.x をサポートする Grafana ワークスペースについては、「」を参照してください[Grafana バージョン 12 での作業](using-grafana-v12.md)。  
Grafana バージョン 10.x をサポートする Grafana ワークスペースについては、「[Grafana バージョン 10 での作業](using-grafana-v10.md)」を参照してください。  
Grafana バージョン 9.x をサポートする Grafana ワークスペースについては、「[Grafana バージョン 9 での作業](using-grafana-v9.md)」を参照してください。

[コンタクトポイント (通知先) の使用](alert-contact-points.md) 経由で送信される通知は、*メッセージングテンプレート*を使用して構築されます。Grafana のデフォルトテンプレートは [Go テンプレートシステム](https://golang.org/pkg/text/template)に基づいており、一部のフィールドはテキストとして評価され、他のフィールドは HTML (エスケープに影響する可能性があります) として評価されます。

コンタクトポイントに使用するほとんどのフィールドはテンプレート化できるため、再利用可能なカスタムテンプレートを作成し、複数のコンタクトポイントで使用すると良いでしょう。この [テンプレートのデータ](#alert-template-data) トピックでは、テンプレートに使用できる変数一覧を紹介します。

**テンプレートの使用**

テンプレートはメッセージを作成するために使用されます。例えば、Slack のアラートメッセージでは、コンタクトポイントにタイトルと本文を設定することができます。次の例では、デフォルトのテンプレートを使用して、発行されたアラートの件数と解決済みのアラートの件数を含むタイトルと、アラートとそのステータスを一覧表示する本文を作成する方法を紹介します。
+ **タイトル**:

  ```
  {{ len .Alerts.Firing }} firing, {{ len .Alerts.Resolved }} resolved
  ```
+ **本文テキスト**: 

  ```
  {{ range .Alerts }}{{ .Status }}: {{ .Labels.alertname }}
  {{end }}
  ```

カスタムテンプレートは次のように作成します。
+ **タイトル**:

  ```
  {{ template "slack.default.title" .}}
  ```
+ **本文テキスト**: 

  ```
  {{ template "mymessage" .}}
  ```

以下はサンプルテンプレートです。

```
{{ define "myalert" }}
  [{{.Status}}] {{ .Labels.alertname }}

  Labels:
  {{ range .Labels.SortedPairs }}
    {{ .Name }}: {{ .Value }}
  {{ end }}

  {{ if gt (len .Annotations) 0 }}
  Annotations:
  {{ range .Annotations.SortedPairs }}
    {{ .Name }}: {{ .Value }}
  {{ end }}
  {{ end }}

  {{ if gt (len .SilenceURL ) 0 }}
    Silence alert: {{ .SilenceURL }}
  {{ end }}
  {{ if gt (len .DashboardURL ) 0 }}
    Go to dashboard: {{ .DashboardURL }}
  {{ end }}
{{ end }}
```

以下に、カスタムメッセージテンプレートを作成、編集、削除する手順を紹介します。

**メッセージテンプレートの作成方法**

1. Grafana コンソールの Grafana メニューで、**[アラート]** (ベル) アイコンを選択して **[アラート]** ページを開きます。

1. **[コンタクトポイント]** を選択します。

1. **[アラートマネージャー]** ドロップダウンから、メッセージテンプレートを作成するアラートマネージャーインスタンスを選択します。デフォルトは Grafana アラートマネージャーです。

1. **テンプレートを追加**を選択します。

1. わかりやすい**名前**を付けます。

1. テンプレートの**内容**を追加します。例:

   ```
   {{ define "mymessage" }}
     {{ range .Alerts }}
       [{{ .Status }}] {{ range .Labels }} {{ .Name }}={{.Value }}{{end}}
     {{ end }}
   {{ end }}
   ```

   コンテンツセクションの `define` タグは、テンプレート名を割り当てます。このタグはオプションです。省略した場合、テンプレート名は**名前**フィールドから取得されます。両方を指定する場合、一致させておくことが推奨されます。

1. **[テンプレートを保存]** を選択します。

**注記**  
アラートメッセージテンプレートの HTML はテキストとして表示され、制御文字はエスケープされます。Grafana では、通知での HTML 形式の表示はサポートされていません。

**メッセージテンプレートを編集するには**

1. **アラート**ページで、**[コンタクトポイント]**を選択してコンタクトポイントのリストを開きます。

1. **テンプレートテーブル**の編集するテンプレートで**編集**アイコン (ペン) を選択します。

1. 変更後、[**テンプレートを保存**] を選択します。

**メッセージテンプレートを削除するには**

1. **アラート**ページで、**[コンタクトポイント]**を選択してコンタクトポイントのリストを開きます。

1. **テンプレートテーブル**の削除するテンプレートで**削除**アイコン (ゴミ箱) を選択します。

1. [**はい、削除します**] を選択してテンプレートを削除します。

**テンプレートのネスト**

テンプレートは他のテンプレートに埋め込むことができます。

例えば、`define` キーワードを使用してテンプレートの一部を定義することができます。

```
{{ define "mytemplate" }}
  {{ len .Alerts.Firing }} firing. {{ len .Alerts.Resolved }} resolved.
{{ end }}
```

その後、 `template` キーワードを使用して、このフラグメント内にカスタムテンプレートを埋め込むことができます。例えば、次のようになります。

```
Alert summary:
{{ template "mytemplate" . }}
```

以下のビルトインのテンプレートオプションを使用して、カスタムテンプレートを埋め込むことができます。


| 名前 | 注意事項 | 
| --- | --- | 
| `default.title` | 全体的なステータス情報を表示します。 | 
| `default.message` | 発生中および解決済みのアラートの概要をフォーマット付きで提供します。 | 

**カスタムテンプレートの例**

以下にカスタムテンプレートの使用方法の例を紹介します。

単一のアラートを表示するテンプレート:

```
{{ define "myalert" }}
  [{{.Status}}] {{ .Labels.alertname }}

  Labels:
  {{ range .Labels.SortedPairs }}
    {{ .Name }}: {{ .Value }}
  {{ end }}

  {{ if gt (len .Annotations) 0 }}
  Annotations:
  {{ range .Annotations.SortedPairs }}
    {{ .Name }}: {{ .Value }}
  {{ end }}
  {{ end }}

  {{ if gt (len .SilenceURL ) 0 }}
    Silence alert: {{ .SilenceURL }}
  {{ end }}
  {{ if gt (len .DashboardURL ) 0 }}
    Go to dashboard: {{ .DashboardURL }}
  {{ end }}
{{ end }}
```

通知メッセージ全体を表示するテンプレート:

```
{{ define "mymessage" }}
  {{ if gt (len .Alerts.Firing) 0 }}
    {{ len .Alerts.Firing }} firing:
    {{ range .Alerts.Firing }} {{ template "myalert" .}} {{ end }}
  {{ end }}
  {{ if gt (len .Alerts.Resolved) 0 }}
    {{ len .Alerts.Resolved }} resolved:
    {{ range .Alerts.Resolved }} {{ template "myalert" .}} {{ end }}
  {{ end }}
{{ end }}
```

## テンプレートのデータ
<a name="alert-template-data"></a>

メッセージテンプレートには、次のデータが渡されます。


| 名前 | 型 | 注意事項 | 
| --- | --- | --- | 
| `Receiver` | string | コンタクトポイント (通知先) の名前。 | 
| `Status` | string | 少なくとも 1 つのアラートが発生している場合は「発生中」となり、それ以外の場合「解決済」となります。 | 
| `Alerts` | アラート | この通知に含まれるアラートオブジェクトのリスト (以下を参照)。 | 
| `GroupLabels` | KeyValue | これらのアラートがグループ化されたラベル。 | 
| `CommonLabels` | KeyValue | この通知に含まれるすべてのアラートに共通のラベル。 | 
| `CommonAnnotations` | KeyValue | この通知に含まれるすべてのアラートに共通する注釈。 | 
| `ExternalURL` | string | 通知の送信元である Grafana へのリンク。外部のアラートマネージャーを使用している場合、そのアラートマネージャーへのリンク。 | 

`Alerts` 型には、返されたアラートをフィルタリングするための 2 つの関数があります。
+ `Alerts.Firing` – 発生中のアラートのリストを返します。
+ `Alerts.Resolved` – 解決済みのアラートのリストを返します。

**アラート (型)**

アラート型には、次のデータがあります。


| 名前 | 型 | 注意事項 | 
| --- | --- | --- | 
| ステータス | string | `firing` または `resolved` | 
| ラベル | KeyValue | アラートに付与された一連のラベル。 | 
| ‏注釈 | KeyValue | アラートに付与された一連の注釈。 | 
| StartsAt | time.Time | アラートが発行された時刻。 | 
| EndsAt | time.Time | アラートの終了時刻がわかっている場合にのみ設定されます。それ以外の場合、最後にアラートを受信してから設定可能なタイムアウト期間が適用されます。 | 
| GeneratorURL | string | Grafana または外部アラートマネージャーへのリンク。 | 
| SilenceURL | string | このアラートのラベルが事前に入力された grafana のサイレンスへのリンク。Grafana 管理のアラートのみ。 | 
| DashboardURL | string | Grafana ダッシュボードへのリンク (アラートルールが Grafana に属している場合)。Grafana 管理のアラートのみ。 | 
| PanelURL | string | Grafana ダッシュボードパネルへのリンク (アラートルールが Grafana に属している場合)。Grafana 管理のアラートのみ。 | 
| Fingerprint | string | アラートの識別に使用するフィンガープリント。 | 
| ValueString | string | アラート内の各削減された式のラベルと値を含む文字列。 | 

**KeyValue 型**

`KeyValue` 型は、キー (ラベル) 値 (注釈) の文字列を組み合わせたものです。

`KeyValue` として保存されたデータに直接アクセスするメソッドだけでなく、データをソート、削除、変換するメソッドも備えています。


| 名前 | 引数 | 戻り値 | 注意事項 | 
| --- | --- | --- | --- | 
| SortedPairs |  | キーと値の文字列のソート済みのリスト |  | 
| 削除 | []string | KeyValue | 指定したキーを除いたキー/値のマップのコピーを返します。 | 
| 名前 |  | []string | ラベル名のリスト | 
| 値 |  | []string | ラベル値のリスト | 



## テンプレート関数
<a name="alert-template-functions"></a>

テンプレート関数を使用すると、ラベルと注釈を処理して動的に通知を生成できます。以下の機能を使用できます。


| 名前 | 引数の型 | 戻り型 | 説明 | 
| --- | --- | --- | --- | 
| `humanize` | 数値または文字列 | string | メトリクスプレフィックスを使用して、数値をより読み取り可能な形式に変換します。 | 
| `humanize1024` | 数値または文字列 | string | humanize と同様に、1000 ではなく 1024 を基準にします。 | 
| `humanizeDuration` | 数値または文字列 | string | 時間を秒単位のより読みやすい形式に変換します。 | 
| `humanizePercentage` | 数値または文字列 | string | 比率の値を 100 分の 1 の形に変換します。 | 
| `humanizeTimestamp` | 数値または文字列 | string | Unix のタイムスタンプを秒単位のより読みやすい形式に変換します。 | 
| `title` | string | string | strings.Title を使用すると、各単語の最初の文字が大文字になります。 | 
| `toUpper` | string | string | strings.ToUpper を使用すると、文字列がすべて大文字に変換されます。 | 
| `toLower` | string | string | strings.ToLower を使用すると、文字列がすべて小文字に変換されます。 | 
| `match` | パターン、テキスト | boolean | regexp.MatchString を使用すると、アンカーなしでの正規表現の一致テストを実行できます。 | 
| `reReplaceAll` | パターン、置換、テキスト | string | Regexp.ReplaceAllString を使用すると、アンカーなしでの正規表現による置換が実行できます。 | 
| `graphLink` | 文字列 - `expr` および `datasource` フィールドを持つ JSON オブジェクト | string | 指定された式とデータソースに対するグラフィカルビューへのパスを返します。 | 
| `tableLink` | 文字列 - `expr` および `datasource` フィールドを持つ JSON オブジェクト | string | 指定された式とデータソースに対するタブ形式ビューへのパスを返します。 | 
| `args` | []interface{} | map[string]interface{} | オブジェクトのリストを arg0、arg1 などのキーを持つマップに変換します。複数の引数をテンプレートに渡す場合、この関数を使用します。 | 
| `externalURL` | なし | string | 外部 URL を表す文字列を返します。 | 
| `pathPrefix` | なし | string | 外部 URL のパスを返します。 | 

次の表に、各関数の使用例を紹介します。


| 関数 | TemplateString | Input | 予想 | 
| --- | --- | --- | --- | 
| humanize | { humanize $value } | 1234567.0 | 1.235M | 
| humanize1024 | { humanize1024 $value } | 1048576.0 | 1Mi | 
| humanizeDuration | { humanizeDuration $value } | 899.99 | 14 分 59 秒 | 
| humanizePercentage | { humanizePercentage $value } | 0.1234567 | 12.35% | 
| humanizeTimestamp | { humanizeTimestamp $value } | 1435065584.128 | 2015-06-23 13:19:44.128 \+0000 UTC | 
| title | { $value \| title } | aa bB CC | Aa Bb Cc | 
| toUpper | { $value \| toUpper } | aa bB CC | AA BB CC | 
| toLower | { $value \| toLower } | aa bB CC | aa bb cc | 
| match | { match "a\+" $labels.instance } | aa | 真 | 
| reReplaceAll | {{ reReplaceAll "localhost:(.\*)" "my.domain:$1" $labels.instance }} | localhost:3000 | my.domain:3000 | 
| graphLink | {{ graphLink "{\\"expr\\": \\"up\\", \\"datasource\\": \\"gdev-prometheus\\"}" }} |  | /explore?left=["now-1h","now","gdev-prometheus",{"datasource":"gdev-prometheus","expr":"up","instant":false,"range":true}] | 
| tableLink | {{ tableLink "{\\"expr\\":\\"up\\", \\"datasource\\":\\"gdev-prometheus\\"}" }} |  | /explore?left=["now-1h","now","gdev-prometheus",{"datasource":"gdev-prometheus","expr":"up","instant":true,"range":false}] | 
| args | {{define "x"}}{{.arg0}} {{.arg1}}{{end}}{{template "x" (args 1 "2")}} |  | 1 2 | 
| externalURL | { externalURL } |  | http://localhost/path/prefix | 
| pathPrefix | { pathPrefix } |  | /path/prefix | 