

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

# メッセージテンプレートの使用
<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\$1\$1  |  map[string]interface\$1\$1  |  オブジェクトのリストを arg0、arg1 などのキーを持つマップに変換します。複数の引数をテンプレートに渡す場合、この関数を使用します。  | 
|  `externalURL`  |  なし  |  string  |  外部 URL を表す文字列を返します。  | 
|  `pathPrefix`  |  なし  |  string  |  外部 URL のパスを返します。  | 

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


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