

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 创建通知模板
<a name="v10-alerting-create-templates"></a>

****  
本文档主题专为支持 **Grafana 10.x 版本**的 Grafana 工作区而设计。  
对于支持 Grafana 9.x 版本的 Grafana 工作区，请参阅[使用 Grafana 版本 9](using-grafana-v9.md)。  
对于支持 Grafana 8.x 版本的 Grafana 工作区，请参阅[使用 Grafana 版本 8](using-grafana-v8.md)。

创建可重用的通知模板发送给联系点。

您可以向通知模板添加一个或多个模板。

通知模板名称必须唯一。同一通知模板或不同通知模板中不能有两个同名的模板。避免定义与默认模板同名的模板，例如：`__subject`、`__text_values_list`、`__text_alert_list`、`default.title` 和 `default.message`。

在“联系点”选项卡中，您可以看到通知模板的列表。

## 创建通知模板
<a name="v10-alerting-creating-templates"></a>

**创建通知模板**

1. 选择**警报**、**联系点**。

1. 选择**通知模板**选项卡，然后选择 **\$1 添加通知模板**。

1. 选择通知模板的名称，例如 `email.subject`。

1. 在内容字段中写入模板的内容。

   例如：

   ```
   {{ if .Alerts.Firing -}}
      {{ len .Alerts.Firing }} firing alerts
      {{ end }}
      {{ if .Alerts.Resolved -}}
      {{ len .Alerts.Resolved }} resolved alerts
      {{ end }}
   ```

1. 保存更改。

   `{{ define "email.subject" }}`（其中 `email.subject` 是模板名称），`{{ end }}` 自动添加到内容的开头和结尾。

**创建包含多个模板的通知模板**

1. 选择**警报**、**联系点**。

1. 选择**通知模板**选项卡，然后选择 **\$1 添加通知模板**。

1. 输入整个通知模板的名称。例如 `email`。

1. 在内容字段中写入每个模板，包括每个模板开头和结尾的 `{{ define "name-of-template" }}` 和 `{{ end }}`。您可以为通知模板中的每个模板使用描述性名称，例如，`email.subject` 或 `email.message`。在这种情况下，不要重复使用您在上面输入的通知模板的名称。

   后面的部分展示了您可能创建的模板的详细示例。

1. 点击保存。

## 预览通知模板
<a name="v10-alerting-preview-templates"></a>

在联系点中使用通知模板之前，先预览通知模板的外观，这有助于您了解创建的模板效果，并允许在保存模板之前修复任何错误。

**注意**  
通知预览仅适用于 Grafana Alertmanager。

**预览通知模板**

1. 选择**警报**、**联系点**。

1. 选择**通知模板**选项卡，然后选择 **\$1 添加通知模板**，或添加现有模板。

1. 添加或更新模板内容。

   提供了默认数据，您可以向其中添加或编辑警报数据以及警报实例。您可以直接在有效载荷数据窗口中添加警报数据，或者单击**选择警报实例**或**添加自定义警报**。

1. [可选] 要从现有警报实例中添加警报数据，请执行以下操作：

   1. 选择**选择警报实例**。

   1. 将鼠标悬停在警报实例上，可查看有关每个警报实例的更多信息。

   1. 选择**确认**将警报实例添加到有效载荷。

1. [可选] 要使用警报数据编辑器添加警报数据，请选择**添加自定义数据**：

   1. 添加注释、自定义标签或设置控制面板或面板。

   1. 切换“触发”或“已解决”，具体取决于您要在通知中添加触发警报还是已解决警报。

   1. 选择**添加警报数据**。

   1. 选择**刷新预览**，查看模板内容的外观以及相应的有效载荷数据。

   如果模板中存在任何错误，这些错误会显示在预览中，您可以在保存之前进行更正。

1. 保存更改。

## 为消息主题创建模板
<a name="v10-alerting-create-template-subject"></a>

为电子邮件主题创建模板，其中包含触发和已解决的警报数量，如以下示例所示：

```
1 firing alerts, 0 resolved alerts
```

**为电子邮件主题创建模板**

1. 使用以下内容创建一个名为 `email.subject` 的模板：

   ```
   {{ define "email.subject" }}
   {{ len .Alerts.Firing }} firing alerts, {{ len .Alerts.Resolved }} resolved alerts
   {{ end }}
   ```

1. 创建联系点集成时，请使用模板将其放入带有 `template` 关键字的**主题**字段中。

   ```
   {{ template "email.subject" . }}
   ```

## 为电子邮件消息创建模板
<a name="v10-alerting-create-template-message"></a>

为电子邮件消息创建模板，其中包含所有触发和已解决的警报数量，如以下示例所示：

```
There are 2 firing alerts, and 1 resolved alerts

Firing alerts:

- alertname=Test 1 grafana_folder=GrafanaCloud has value(s) B=1
- alertname=Test 2 grafana_folder=GrafanaCloud has value(s) B=2

Resolved alerts:

- alertname=Test 3 grafana_folder=GrafanaCloud has value(s) B=0
```

**为电子邮件消息创建模板**

1. 创建一个名为 `email` 的通知模板，内容中包含两个模板：`email.message_alert` 和 `email.message`。

   `email.message_alert` 模板用于打印每个触发和已解决警报的标签和值，而 `email.message` 模板包含电子邮件的结构。

   ```
   {{- define "email.message_alert" -}}
   {{- range .Labels.SortedPairs }}{{ .Name }}={{ .Value }} {{ end }} has value(s)
   {{- range $k, $v := .Values }} {{ $k }}={{ $v }}{{ end }}
   {{- end -}}
   
   {{ define "email.message" }}
   There are {{ len .Alerts.Firing }} firing alerts, and {{ len .Alerts.Resolved }} resolved alerts
   
   {{ if .Alerts.Firing -}}
   Firing alerts:
   {{- range .Alerts.Firing }}
   - {{ template "email.message_alert" . }}
   {{- end }}
   {{- end }}
   
   {{ if .Alerts.Resolved -}}
   Resolved alerts:
   {{- range .Alerts.Resolved }}
   - {{ template "email.message_alert" . }}
   {{- end }}
   {{- end }}
   
   {{ end }}
   ```

1. 创建联系点集成时，请使用模板将其放入带有 `template` 关键字的**正文**字段中。

   ```
   {{ template "email.message" . }}
   ```

## 为 Slack 消息标题创建模板
<a name="v10-alerting-create-template-slack-title"></a>

为 Slack 消息标题创建模板，其中包含触发和已解决的警报数量，如以下示例所示：

```
1 firing alerts, 0 resolved alerts
```

**为 Slack 消息标题创建模板**

1. 使用以下内容创建一个名为 `slack.title` 的模板：

   ```
   {{ define "slack.title" }}
   {{ len .Alerts.Firing }} firing alerts, {{ len .Alerts.Resolved }} resolved alerts
   {{ end }}
   ```

1. 从联系点集成中的标题字段执行模板。

   ```
   {{ template "slack.title" . }}
   ```

## 为 Slack 消息内容创建模板
<a name="v10-alerting-create-template-slack-message"></a>

为 Slack 消息内容创建模板，其中包含所有触发和已解决警报的描述，包括其标签、注释和控制面板 URL。

**注意**  
此模板仅适用于 Grafana 管理的警报。要将模板用于数据来源管理的警报，请删除对 DashboardURL 和 SilenceURL 的引用。有关配置 Prometheus 通知的更多信息，请参阅 [Prometheus 通知文档](https://prometheus.io/docs/alerting/latest/notifications/)。

```
1 firing alerts:

[firing] Test1
Labels:
- alertname: Test1
- grafana_folder: GrafanaCloud
Annotations:
- description: This is a test alert
Go to dashboard: https://example.com/d/dlhdLqF4z?orgId=1

1 resolved alerts:

[firing] Test2
Labels:
- alertname: Test2
- grafana_folder: GrafanaCloud
Annotations:
- description: This is another test alert
Go to dashboard: https://example.com/d/dlhdLqF4z?orgId=1
```

**为 Slack 消息内容创建模板**

1. 创建一个名为 `slack` 的模板，内容中包含两个模板：`slack.print_alert` 和 `slack.message`。

   `slack.print_alert` 模板用于打印标签、注释和 DashboardURL，而 `slack.message` 模板包含通知的结构。

   ```
   {{ define "slack.print_alert" -}}
   [{{.Status}}] {{ .Labels.alertname }}
   Labels:
   {{ range .Labels.SortedPairs -}}
   - {{ .Name }}: {{ .Value }}
   {{ end -}}
   {{ if .Annotations -}}
   Annotations:
   {{ range .Annotations.SortedPairs -}}
   - {{ .Name }}: {{ .Value }}
   {{ end -}}
   {{ end -}}
   {{ if .DashboardURL -}}
     Go to dashboard: {{ .DashboardURL }}
   {{- end }}
   {{- end }}
   
   {{ define "slack.message" -}}
   {{ if .Alerts.Firing -}}
   {{ len .Alerts.Firing }} firing alerts:
   {{ range .Alerts.Firing }}
   {{ template "slack.print_alert" . }}
   {{ end -}}
   {{ end }}
   {{ if .Alerts.Resolved -}}
   {{ len .Alerts.Resolved }} resolved alerts:
   {{ range .Alerts.Resolved }}
   {{ template "slack.print_alert" .}}
   {{ end -}}
   {{ end }}
   {{- end }}
   ```

1. 从联系点集成中的文本正文字段执行模板：

   ```
   {{ template "slack.message" . }}
   ```

## 使用共享模板对电子邮件和 Slack 进行模板化
<a name="v10-alerting-create-shared-templates"></a>

您可以共享同一个模板，而不是为每个联系点创建单独的通知模板，例如电子邮件和 Slack。

例如，如果要发送包含此主题的电子邮件和包含标题 `1 firing alerts, 0 resolved alerts` 的 Slack 消息，则可以创建共享模板。

**创建共享模板**

1. 使用以下内容创建一个名为 `common.subject_title` 的模板：

   ```
   {{ define "common.subject_title" }}
   {{ len .Alerts.Firing }} firing alerts, {{ len .Alerts.Resolved }} resolved alerts
   {{ end }}
   ```

1. 对于电子邮件，请从电子邮件联系点集成中的主题字段运行模板：

   ```
   {{ template "common.subject_title" . }}
   ```

1. 对于 Slack，请从 Slack 联系点集成中的标题字段运行模板：

   ```
   {{ template "common.subject_title" . }}
   ```