

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

# Grafana 9 版本中的警报
<a name="v9-alerts"></a>

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

Grafana Alerting 可为您提供强大且可操作的警报，帮助您在系统出现问题后立即了解情况，最大限度地减少服务中断。

Amazon Managed Grafana 允许访问更新的警报系统 *Grafana Alerting*，该系统将警报信息集中在一个可搜索的视图中。包括以下功能：
+ 在集中视图中创建和管理 Grafana 警报。
+ 通过单一界面创建和管理 Cortex 和 Loki 管理的警报。
+ 查看来自 Prometheus、Amazon Managed Service for Prometheus 和其他 Alertmanager 兼容数据来源的警报信息。

创建 Amazon Managed Grafana 工作区时，您可以选择使用 Grafana Alerting 或 [经典控制面板警报](old-alerts-overview.md)。本节介绍了 Grafana Alerting。

**注意**  
如果您创建的工作区启用了经典警报，并希望切换到 Grafana Alerting，您可以[在两个警报系统之间切换](v9-alerting-use-grafana-alerts.md)。

## Grafana Alerting 限制
<a name="v9-alert-limitations"></a>
+ Grafana Alerting 系统可以从所有可用的 Amazon Managed Service for Prometheus、Prometheus、Loki 和 Alertmanager 数据来源中检索规则。但可能无法从其他受支持的数据来源获取规则。
+ 在 Grafana（而不是 Prometheus）中定义的警报规则会向您的联系点发送多条通知。如果您使用的是原生 Grafana 警报，建议您继续使用经典控制面板警报，不要启用新的 Grafana Alerting 功能。如果您想查看 Prometheus 数据来源中定义的警报，那么建议您启用 Grafana Alerting，该功能只会针对在 Prometheus Alertmanager 中创建的警报发送一条通知。
**注意**  
在支持 Grafana v10.4 及更高版本的 Amazon Managed Grafana 工作区中，此限制不再适用。

**Topics**
+ [Grafana Alerting 限制](#v9-alert-limitations)
+ [概述](v9-alerting-overview.md)
+ [探索警报](v9-alerting-explore.md)
+ [设置警报](v9-alerting-setup.md)
+ [将经典控制面板警报迁移到 Grafana Alerting](v9-alerting-use-grafana-alerts.md)
+ [管理警报规则](v9-alerting-managerules.md)
+ [管理警报通知](v9-alerting-managenotifications.md)

# 概述
<a name="v9-alerting-overview"></a>

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

下面概述了 Grafana Alerting 的工作原理，并介绍了一些关键概念，这些概念共同构成了灵活而强大的警报引擎的核心。

1. **数据来源**

   连接到警报使用的数据。这些数据通常是用于警报的时间序列数据，并显示要监控和分析的系统的详细信息。有关更多信息，请参阅[数据来源](AMG-data-sources-builtin.md)。

1. **警报规则**

   设置评估标准，以确定是否触发警报实例。警报规则包含一个或多个用于从数据来源提取数据的查询和表达式、描述警报需求的条件、评估频率以及（可选）触发警报必须满足条件的持续时间。

   Grafana 管理的警报支持多维警报，这意味着每个警报规则可以创建多个警报实例。如果您在单个表达式中观察到多个序列，这将非常有用。

1. **标签**

   将警报规则及其实例与通知策略和静默匹配。还可用于按严重程度对警报分组。

1. **通知策略**

   设置警报的发送位置、时间和方式，以便在警报触发时通知您的团队。每个通知策略都指定了一组标签匹配程序，指示其负责哪些警报。通知策略分配有联系点，该联系点由一个或多个通知程序组成。

1. **联系点**

   定义触发警报时如何通知您的联系人。我们支持多种 ChatOps 工具，以确保您的团队收到警报。

## 功能
<a name="v9-alerting-features"></a>

**单页显示所有警报**

单个 Grafana Alerting 页面将 Grafana 管理的警报和驻留在兼容 Prometheus 的数据来源中的警报整合到一个位置。

**多维警报**

警报规则可为每个警报规则创建多个单独的警报实例（称为多维警报），让您只需发出一个警报，就能获得对整个系统的可见性。

**路由警报**

根据您定义的标签，将每个警报实例路由到特定的联系点。通知策略是一组规则，规定了在何处、何时以及如何将警报分组并路由到联系点。

**静默警报**

您可以通过静默停止接收来自一个或多个警报规则的持续通知。您也可以根据特定标准部分暂停警报。静默有自己的专用部分，以便更好地整理和查看，让您可以扫描暂停的警报规则，而不会使主警报视图混乱。

**静音定时**

通过静音计时，您可以指定不希望生成或发送新通知的时间间隔。您也可以在周期性时间段（如维护时间段）冻结警报通知。

# 探索警报
<a name="v9-alerting-explore"></a>

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

无论您是开始使用还是扩展实施 Grafana Alerting，都可以了解关键概念和可用功能的更多信息，这些关键概念和可用功能可帮助您创建、管理和响应警报，并提高团队快速解决问题的能力。

首先，我们来看看 Grafana Alerting 提供的不同警报规则类型。

## 警报规则类型
<a name="v9-alerting-explore-rule-types"></a>

**Grafana 管理的警报**

Grafana 管理的规则是最灵活的警报规则类型。通过这些规则，您可以创建警报，而这些警报可以作用于我们支持的任何数据来源中的数据。除了支持多个数据来源，您还可以添加表达式来转换数据和设置警报条件。这是唯一允许在单个规则定义中从多个数据来源发出警报的规则类型。

**Mimir 和 Loki 规则**

要创建 Mimir 或 Loki 警报，您必须拥有兼容的 Prometheus 或 Loki 数据来源。您可以通过测试数据来源并观察是否支持 Ruler API 来检查您的数据来源是否支持通过 Grafana 创建规则。

**记录规则**

记录规则仅适用于兼容的 Prometheus 或 Loki 数据来源。记录规则让您可以预先计算经常需要或计算开销较大的表达式，将其结果另存为一组新的时间序列。如果要对聚合数据运行警报，或者如果您的控制面板重复查询计算开销较大的表达式，此功能将非常有用。

## 关键概念和功能
<a name="v9-alerting-explore-features"></a>

下表列出了关键概念、功能及其定义，旨在帮助您充分利用 Grafana Alerting。


| 关键概念或功能 | 定义 | 
| --- | --- | 
|  警报的数据来源  |  选择数据来源，从中查询指标、日志和跟踪，并以可视化方式展示。  | 
|  警报预置  |  管理您的警报资源，并使用文件预置或 Terraform 将其预置到 Grafana 系统。  | 
|  Alertmanager  |  管理警报实例的路由和分组。  | 
|  警报规则  |  用于确定警报规则何时触发的一组评估标准。警报规则包含一个或多个查询和表达式、一个条件、评估频率，以及满足条件的持续时间。一条警报规则可以生成多个警报实例。  | 
|  警报实例  |  警报实例是警报规则的实例。单维警报规则有一个警报实例。多维警报规则有一个或多个警报实例。与多个结果匹配的单个警报规则（例如 CPU 对 10 VMs）被视为多个（在本例中为 10）警报实例。这个数字可能会随时间变化。例如，监控系统 VMs 中所有人 CPU 使用率的警报规则添加的警报实例更多。 VMs 有关警报实例配额的更多信息，请参阅 [达到配额错误](v9-alerting-managerules-grafana.md#v9-alerting-rule-quota-reached)。  | 
|  警报组  |  默认情况下，Alertmanager 使用根通知策略的标签对警报实例进行分组。这可以控制发送到联系点的警报实例的去重和分组。  | 
|  联系点  |  定义触发警报规则时如何通知您的联系人。  | 
|  消息模板  |  创建可重复使用的自定义模板，并在联系点中使用。  | 
|  通知策略  |  一组规则，规定在何处、何时以及如何将警报分组并路由到联系点。  | 
|  标签和标签匹配程序  |  标签可通过唯一方式标识警报规则。它们将警报规则与通知策略及静默关联起来，确定应由哪条策略处理这些警报规则，以及哪些警报规则应该被静默。  | 
|  静默  |  停止来自一个或多个警报实例的通知。静默和静音定时的区别在于，静默会持续指定的时间，而静音定时则按计划重复。使用标签匹配程序可使警报实例静默。  | 
|  静音定时  |  指定您不希望生成或发送新通知的时间间隔。您也可以在周期性时间段（如维护时间段）冻结警报通知。必须关联到现有通知策略。  | 

# 数据来源
<a name="v9-alerting-explore-datasources"></a>

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

有许多[数据来源](AMG-data-sources-builtin.md)与 Grafana Alerting 兼容。每个数据来源都由一个插件支持。您可以使用下面列出的内置数据来源之一。

这些都是与 Amazon Managed Grafana 兼容并受其支持的数据来源。
+ [连接到 AlertManager 数据来源](data-source-alertmanager.md)
+ [Connect 连接到亚马逊 CloudWatch 数据源](using-amazon-cloudwatch-in-AMG.md)
+ [Connect 连接到亚马逊 OpenSearch 服务数据源](using-Amazon-OpenSearch-in-AMG.md)
+ [Connect 连接到 AWS IoT SiteWise 数据源](using-iotsitewise-in-AMG.md)
+ [Connect 连接到 AWS IoT TwinMaker 数据源](AMG-iot-twinmaker.md)
+ [连接到 Amazon Managed Service for Prometheus 和开源 Prometheus 数据来源](prometheus-data-source.md)
+ [连接到 Amazon Timestream 数据来源](timestream-datasource.md)
+ [连接到 Amazon Athena 数据来源](AWS-Athena.md)
+ [连接到 Amazon Redshift 数据来源](AWS-Redshift.md)
+ [Connect 连接到 AWS X-Ray 数据源](x-ray-data-source.md)
+ [连接到 Azure Monitor 数据来源](using-azure-monitor-in-AMG.md)
+ [连接到 Google Cloud Monitoring 数据来源](using-google-cloud-monitoring-in-grafana.md)
+ [连接到 Graphite 数据来源](using-graphite-in-AMG.md)
+ [连接到 InfluxDB 数据来源](using-influxdb-in-AMG.md)
+ [连接到 Loki 数据来源](using-loki-in-AMG.md)
+ [连接到 Microsoft SQL Server 数据来源](using-microsoft-sql-server-in-AMG.md)
+ [连接到 MySQL 数据来源](using-mysql-in-AMG.md)
+ [连接到 OpenTSDB 数据来源](using-opentsdb-in-AMG.md)
+ [连接到 PostgreSQL 数据来源](using-postgresql-in-AMG.md)
+ [连接到 Jaeger 数据来源](jaeger-data-source.md)
+ [连接到 Zipkin 数据来源](zipkin-data-source.md)
+ [连接到 Tempo 数据来源](tempo-data-source.md)
+ [配置用于测试 TestData 的数据源](testdata-data-source.md)

# 关于警报规则
<a name="v9-alerting-explore-rules"></a>

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

警报规则是一组评估标准，用于确定警报实例是否会触发。该规则包含一个或多个查询和表达式、一个条件、评估频率，以及满足条件的持续时间（可选）。

当查询和表达式选择要评估的数据集时，条件设置警报必须达到或超过该阈值才能创建警报。

时间间隔指定评估警报规则的频率。配置的持续时间表示必须满足条件的持续时间。警报规则还可以定义缺少数据时的警报行为。

**Topics**
+ [警报规则类型](v9-alerting-explore-rules-types.md)
+ [警报实例](v9-alerting-rules-instances.md)
+ [命名空间和组](v9-alerting-rules-grouping.md)
+ [通知模板化](v9-alerting-rules-notification-templates.md)

# 警报规则类型
<a name="v9-alerting-explore-rules-types"></a>

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

Grafana 支持多种警报规则类型。以下各节将解释这些类型的优缺点，以帮助您为用例选择正确的警报类型。

Grafana 管理的警报

Grafana 管理的规则是最灵活的警报规则类型。通过这些规则，您可以创建警报，而这些警报可以作用于任何现有数据来源中的数据。

除了支持任何数据来源，您还可以添加[表达式](v9-panels-query-xform-expressions.md)来转换数据和设置警报条件。

Mimir、Loki 和 Cortex 规则

要创建 Mimir、Loki 或 Cortex 警报，您必须拥有兼容的 Prometheus 数据来源。您可以通过测试数据来源，并检查是否支持 Ruler API 的详细信息来检查数据来源是否兼容。

记录规则

记录规则仅适用于兼容的 Prometheus 数据来源，如 Mimir、Loki 和 Cortex。

记录规则允许您将表达式的结果保存到一组新的时间序列中。如果要对聚合数据运行警报，或者您的控制面板重复查询同一表达式，这将非常有用。

阅读有关 Prometheus 中[记录规则](https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/)的更多信息。

# 警报实例
<a name="v9-alerting-rules-instances"></a>

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

Grafana 管理的警报支持多维警报。每条警报规则可以生成多个警报实例。如果您在单个表达式中观察到多个序列，这将非常有用。

请看下面的 PromQL 表达式：

```
sum by(cpu) (
  rate(node_cpu_seconds_total{mode!="idle"}[1m])
)
```

使用此表达式的规则将创建与评估期间 CPUs 观察到的警报数量一样多的警报实例，从而允许单个规则报告每个 CPU 的状态。

# 命名空间和组
<a name="v9-alerting-rules-grouping"></a>

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

您可以使用 Grafana 管理的规则文件夹以及 Mimir、Loki 或 Prometheus 规则和组名称的命名空间来整理警报。

**命名空间**

创建 Grafana 管理的规则时，可使用文件夹执行访问控制，并授予或拒绝对特定文件夹内所有规则的访问权限。

**组**

组中的所有规则按相同的**时间间隔**进行评估。

组中的警报规则和记录规则将始终**按顺序**进行评估，这意味着不会同时按出现的顺序评估任何规则。

**提示**  
如果您希望按不同的时间间隔同时评估规则，请考虑将其存储在不同的组中。

# 通知模板化
<a name="v9-alerting-rules-notification-templates"></a>

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

通过联系点发送的通知是使用通知模板生成的。Grafana 的默认模板基于 [Go 模板系统](https://golang.org/pkg/text/template)，其中一些字段作为文本评估，而另一些字段则作为 HTML 评估（可能会影响转义）。

默认模板 [default\$1template.go](https://github.com/grafana/alerting/blob/main/templates/default_template.go) 是自定义模板的有用参考。

大部分联系点字段都可以模板化，因此您可以创建可重复使用的自定义模板，并在多个联系点中使用它们。要了解使用模板的自定义通知，请参阅 [自定义通知](v9-alerting-notifications.md)。

**嵌套模板**

您可以将模板嵌入到其他模板中。

例如，您可以使用 `define` 关键字定义一个模板片段：

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

然后，您可以使用 `template` 关键字将自定义模板嵌入到此片段中。例如：

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

您可以使用以下内置模板选项嵌入自定义模板。


| Name | 注意 | 
| --- | --- | 
|  `default.title`  |  显示概览状态信息。  | 
|  `default.message`  |  提供已触发和已解决警报的格式化摘要。  | 
|  `teams.default.message`  |  类似于 `default.messsage`，针对 Microsoft Teams 进行了格式化。  | 

**通知模板中的 HTML**

警报通知模板中的 HTML 已转义。不支持在生成的通知中渲染 HTML。

某些通知程序支持其他更改通知外观的方法。例如，Grafana 会将警报电子邮件的基本模板安装到 `<grafana-install-dir>/public/emails/ng_alert_notification.html`。您可以编辑此文件，以更改所有警报电子邮件的外观。

# 基于数值数据的警报
<a name="v9-alerting-explore-numeric"></a>

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

本主题将介绍 Grafana 如何处理数值数据而非时间序列数据的警报。

在某些数据来源中，非时间序列的数值数据可以直接发出警报，或传递到服务器端表达式 (SSE)。这样可以在数据来源中进行更多处理，从而提高效率，还可以简化警报规则。当基于数值数据（而不是时间序列数据）生成警报时，不需要将每个带标签的时间序列缩减为一个单一数字。相反，带标签的数字会返回给 Grafana。

**表格数据**

查询表格数据的后端数据来源支持此功能：
+ SQL 数据来源，比如 MySQL、Postgres、MSSQL 和 Oracle。
+ 基于 Azure Kusto 的服务：Azure Monitor（日志）、Azure Monitor（Azure Resource Graph）和 Azure Data Explorer。

如果满足以下条件，则使用 Grafana 管理的警报或 SSE 的查询在这些数据来源中会被视为数值查询：
+ 在数据来源查询中，“格式为”选项设置为“表”。
+ 从查询返回给 Grafana 的表响应仅包含一个数值（例如 int、double、float）列和可选的附加字符串列。

如果存在字符串列，这些列将成为标签。列的名称将成为标签名称，每行的值将成为相应标签的值。如果返回多行，则每行都应通过其标签进行唯一标识。

**示例**

对于名为 “DiskSpace” 的 MySQL 表：


| 时间 | Host | 磁盘 | PercentFree | 
| --- | --- | --- | --- | 
|  2021-June-7  |  web1  |  /etc  |  3  | 
|  2021-June-7  |  web2  |  /var  |  4  | 
|  2021-June-7  |  web3  |  /var  |  8  | 
|  ...  |  ...  |  ...  |  ...  | 

您可以查询按时间筛选的数据，而不将时间序列返回给 Grafana。例如，当可用空间低于 5% 时，将按主机、磁盘触发警报：

```
SELECT Host , Disk , CASE WHEN PercentFree  < 5.0 THEN PercentFree  ELSE 0 END FROM ( 
   SELECT
      Host, 
      Disk, 
      Avg(PercentFree) 
   FROM DiskSpace
   Group By
      Host, 
      Disk 
   Where __timeFilter(Time)
```

此查询会向 Grafana 返回以下表响应：


| Host | 磁盘 | PercentFree | 
| --- | --- | --- | 
|  web1  |  /etc  |  3  | 
|  web2  |  /var  |  4  | 
|  web3  |  /var  |  0  | 

如果在警报规则中将此查询用作**条件**，则对值为非零的情况发出警报。因此，将生成三个警报实例：


| 标签 | Status | 
| --- | --- | 
|  \$1Host=web1,disk=/etc\$1  |  警报  | 
|  \$1Host=web2,disk=/var\$1  |  警报  | 
|  \$1Host=web3,disk=/var\$1  |  Normal  | 

# 标签和注释
<a name="v9-alerting-explore-labels"></a>

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

标签和注释包含警报的相关信息。标签和注释具有相同的结构：一组命名值；但其预期用途不同。标签或等效注释的示例为 `alertname="test"`。

标签和注释之间的主要区别在于，标签用于将警报与所有其他警报区分开来，而注释则用于向现有警报添加其他信息。

例如，假设两个 CPU 过高警报：一个是针对 `server1`，一个是针对 `server2`。在这样的示例中，我们可能有一个名为 `server` 的标签，其中第一个警报带有标签 `server="server1"`，第二个警报带有标签 `server="server2"`。但我们可能还想为每个警报添加描述，例如 `"The CPU usage for server1 is above 75%."`，其中 `server1` 和 `75%` 替换为服务器的名称和 CPU 使用率（有关如何执行此操作，请参阅 [模板化标签和注释](v9-alerting-explore-labels-templating.md) 上的文档）。这种描述更适合作为注释。

## 标签
<a name="v9-alerting-explore-labels-labels"></a>

标签包含用于识别警报的信息。标签的示例为 `server=server1`。每个警报可以有多个标签，警报的完整标签集称为其标签集。正是这个标签集可以识别警报。

例如，一个警报具有标签集 `{alertname="High CPU usage",server="server1"}`，而另一个警报具有标签集 `{alertname="High CPU usage",server="server2"}`。这是两个独立的警报，因为尽管它们的 `alertname` 标签相同，但 `server` 标签却不同。

警报的标签集是数据来源中的标签、警报规则中的自定义标签和许多保留标签（比如 `alertname`）的组合。

**自定义标签**

自定义标签是警报规则中的附加标签。与注释一样，自定义标签必须有一个名称，其值可包含文本和模板代码的组合，在警报触发时进行评估。有关如何模板化自定义标签的文档，请在[此处](v9-alerting-explore-labels-templating.md)查找。

在模板中使用自定义标签时，请务必确保标签值在警报规则的连续评估之间不会发生变化，因为这最终会创建大量不同的警报。但是，模板可以为不同的警报生成不同的标签值。例如，不要将查询的值放在自定义标签中，因为这最终会在每次值更改时创建一组新的警报。改为使用注释。

此外，请务必确保警报的标签集没有两个或多个同名标签。如果自定义标签与数据来源中的标签同名，则会替换该标签。但如果自定义标签与保留标签同名，则该自定义标签将从警报中省略。

## Annotations
<a name="v9-alerting-explore-labels-annotations"></a>

注释是为现有警报添加其他信息的命名对。Grafana 中有许多建议的注释，例如 `description`、`summary`、`runbook_url`、`dashboardUId` 和 `panelId`。与自定义标签一样，注释必须有一个名称，其值可包含文本和模板代码的组合，在警报触发时进行评估。如果注释包含模板代码，则在触发警报时会对模板进行一次评估。即使警报已解决，也不会重新评估。有关如何模板化注释的文档，请在[此处](v9-alerting-explore-labels-templating.md)查找。

# 标签匹配的工作原理
<a name="v9-alerting-explore-labels-matching"></a>

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

使用标签和标签匹配程序将警报规则与通知策略和静默相关联。这提供了一种非常灵活的方式来管理您的警报实例，指定由哪个策略处理这些实例，以及哪些警报需要静默。

标签匹配程序由 3 个不同的部分组成：**标签**、**值**和**运算符**。
+ **标签**字段是要匹配的标签名称。必须与标签名称完全匹配。
+ **值**字段与指定**标签**名称的相应值匹配。匹配方式取决于**运算符**值。
+ **运算符**字段是与标签值匹配的运算符。可用的运算符有：


| 运算符 | 说明 | 
| --- | --- | 
|  `=`  |  选择与该值完全相等的标签。  | 
|  `!=`  |  选择与该值不相等的标签。  | 
|  `=~`  |  选择与该值正则表达式匹配的标签。  | 
|  `!~`  |  选择不与该值正则表达式匹配的标签。  | 

如果您使用多个标签匹配程序，则使用 AND 逻辑运算符将其组合在一起。这意味着所有匹配程序都必须匹配，才能将规关联到策略。

**示例方案**

如果为警报定义了一组标签：

```
{ foo=bar, baz=qux, id=12 }
```

那么：
+ 定义为 `foo=bar` 的标签匹配程序与此警报规则匹配。
+ 定义为 `foo!=bar` 的标签匹配程序*不*与此警报规则匹配。
+ 定义为 `id=~[0-9]+` 的标签匹配程序与此警报规则匹配。
+ 定义为 `baz!~[0-9]+` 的标签匹配程序与此警报规则匹配。
+ 定义为 `foo=bar` 和 `id=~[0-9]+` 的两个标签匹配程序与此警报规则匹配。

# Grafana Alerting 中的标签
<a name="v9-alerting-explore-labels-alerting"></a>

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

本主题解释了为什么标签是警报的基本组成部分。
+ 警报的完整标签集是 Grafana 警报中唯一标识警报的部分。
+ Alertmanager 使用标签将警报与通知策略中的静默和警报组进行匹配。
+ 警报 UI 显示评估该规则期间生成的每个警报实例的标签。
+ 联系点可以访问标签，以动态生成通知，其中包含与生成通知的警报相关的特定信息。
+ 可将标签添加到[警报规则](v9-alerting-managerules.md)。标签可手动配置，使用模板函数，并可以引用其他标签。如果标签之间发生冲突，则添加到警报规则的标签优先（Grafana 保留标签除外，更多信息见下文）。

**外部 Alertmanager 兼容性**

Grafana 的内置 Alertmanager 支持 Unicode 标签键和值。如果您使用的是外部 Prometheus Alertmanager，则标签键必须与其[数据模型](https://prometheus.io/docs/concepts/data_model/#metric-names-and-labels)兼容。这意味着标签键只能包含 **ASCII 字母**、**数字**和**下划线**，并与正则表达式 `[a-zA-Z_][a-zA-Z0-9_]*` 匹配。任何无效字符都将被 Grafana Alerting 引擎移除或替换，然后根据以下规则发送到外部 Alertmanager：
+ `Whitespace` 将被移除。
+ `ASCII characters` 将替换为 `_`。
+ `All other characters` 将替换为小写的十六进制表示形式。如果是第一个字符，则带有前缀 `_`。

**注意**  
如果将多个标签键清理为相同的值，则重复项将附加原始标签的短哈希作为后缀。

**Grafana 保留标签**

**注意**  
Grafana 保留带有前缀 `grafana_` 的标签，用于特殊用途。如果添加以 `grafana_` 开头的手动配置标签，在发生冲突的情况下，该标签将被覆盖。

Grafana 保留标签的使用方式与手动配置的标签相同。当前可用的保留标签列表：


| 标签 | 说明 | 
| --- | --- | 
|  grafana\$1folder  |  包含警报的文件夹标题。  | 

# 模板化标签和注释
<a name="v9-alerting-explore-labels-templating"></a>

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

在 Grafana 中，您可以像在 Prometheus 中一样对标签和注释进行模板化。如果您之前使用过 Prometheus，那么应该熟悉 `$labels` 和 `$value` 变量，包括警报的标签和值。即使警报不使用 Prometheus 数据来源，您也可以在 Grafana 中使用相同的变量。如果您以前没有使用过 Prometheus，请不要担心，因为本页的其余部分将介绍这些变量以及如何对其模板化。

## Go 的模板语言
<a name="v9-alerting-explore-labels-templating-go"></a>

标签和注释的模板是用 Go 的模板语言 [text/template](https://pkg.go.dev/text/template) 编写的。

**开始和结束标签**

在 text/template 中，模板以 `{{` 开头，以 `}}` 结尾，无论模板是打印变量还是运行 if 语句等控制结构。这与 Jinja 等其他模板语言不同，在 Jinja 中，打印变量使用 `{{` 和 `}}`，控制结构使用 `{%` 和 `%}`。

**Print (打印)**

要打印某项的值，请使用 `{{` 和 `}}`。您可以打印函数的结果或变量的值。例如，要打印 `$labels` 变量，您可以编写以下内容：

```
{{ $labels }}
```

**遍历标签**

要遍历 `$labels` 中的每个标签，可以使用 `range`。这里 `$k` 是指名称，`$v` 是指当前标签的值。例如，如果您的查询返回一个标签 `instance=test`，那么 `$k` 将是 `instance`，`$v` 将是 `test`。

```
{{ range $k, $v := $labels }}
{{ $k }}={{ $v }}
{{ end }}
```

## 标签、值和值变量
<a name="v9-alerting-explore-labels-templating-variables"></a>

**标签变量**

`$labels` 变量包含查询中的标签。例如，检查实例是否关闭的查询可能会返回带有关闭实例名称的实例标签。例如，假设有一个警报规则，当其中一个实例关闭超过 5 分钟时，该规则会触发。您希望向警报添加摘要，告诉您哪个实例已关闭。使用 `$labels` 变量，您可以创建摘要，在摘要中打印实例标签：

```
Instance {{ $labels.instance }} has been down for more than 5 minutes
```

**带点的标签**

如果您要打印的标签名称中包含点（句号或句点），则在模板中使用相同的点将不起作用：

```
Instance {{ $labels.instance.name }} has been down for more than 5 minutes
```

这是因为模板尝试使用 `$labels.instance` 中不存在的字段（名为 `name`）。您应该改用 `index` 函数，该函数会在 `$labels` 变量中打印标签 `instance.name`：

```
Instance {{ index $labels "instance.name" }} has been down for more than 5 minutes
```

**值变量**

`$value` 变量的工作原理与 Prometheus 不同。在 Prometheus 中，`$value` 是一个包含表达式值的浮点数，但在 Grafana 中，却是一个字符串，包含该警报规则的所有阈值、Reduce 和 Math 表达式以及经典条件的标签和值。但不包含查询的结果，因为这些查询可以返回 10 到 10000 行或指标。

如果您要在警报摘要中使用 `$value` 变量：

```
{{ $labels.service }} has over 5% of responses with 5xx errors: {{ $value }})
```

摘要看起来如下所示：

```
api has an over 5% of responses with 5xx errors: [ var='B' labels={service=api} value=6.789 ]
```

这里 `var='B'` 指的是带有 RefID B 的表达式。在 Grafana 中，所有查询和表达式都由 RefID 标识，该 ReFID 标识警报规则中的每个查询和表达式。同样，`labels={service=api}` 是指标签，`value=6.789` 是指值。

您可能已经注意到没有 RefID A。这是因为在大多数警报规则中，RefID A 指的是查询，而由于查询可以返回许多行或时间序列，因此并不包含在 `$value` 规则中。

**值变量**

如果 `$value` 变量包含的信息超出了您的需求，则可以使用 `$values` 打印单个表达式的标签和值。不同于 `$value`，`$values` 变量是一个对象表，包含每个表达式的标签和浮点值，按其 RefID 索引。

如果要在警报摘要中打印带有 RefID `B` 的表达式值：

```
{{ $labels.service }} has over 5% of responses with 5xx errors: {{ $values.B }}%
```

摘要将仅包含以下值：

```
api has an over 5% of responses with 5xx errors: 6.789%
```

虽然 `{{ $values.B }}` 打印数字 6.789，但其实际上是一个字符串，因为您打印的对象同时包含 RefID B 的标签和值，而不是 B 的浮点值。要使用 RefID B 的浮点值，必须使用 `$values.B` 中的 `Value` 字段。如果要对警报摘要中的浮点值进行人性化处理：

```
{{ $labels.service }} has over 5% of responses with 5xx errors: {{ humanize $values.B.Value }}%
```

**无数据、运行时错误和超时**

如果警报规则中的查询未返回任何数据，或者由于数据来源错误或超时而失败，则使用该查询的任何阈值、Reduce 或 Math 表达式也将不返回任何数据或错误。当这种情况发生时，这些表达式将缺失 `$values`。最好在使用 RefID 之前检查 RefID 是否存在，否则，如果您的查询没有返回任何数据或错误，模板将会中断。您可使用 if 语句实现：

```
{{ if $values.B }}{{ $labels.service }} has over 5% of responses with 5xx errors: {{ humanizePercentage $values.B.Value }}{{ end }}
```

## 经典条件
<a name="v9-alerting-explore-labels-templating-classic"></a>

如果规则使用经典条件而不是阈值、Reduce 和 Math 表达式，则 `$values` 变量将由 Ref ID 和条件在经典条件中的位置进行索引。例如，如果您有一个带有 RefID B 的经典条件，其中包含两个条件，则 `$values` 将包含两个条件 `B0` 和 `B1`。

```
The first condition is {{ $values.B0 }}, and the second condition is {{ $values.B1 }}
```

## 函数
<a name="v9-alerting-explore-labels-templating-functions"></a>

在展开标签和注释时，可以使用以下函数：

**args**

`args` 函数将对象列表转换为带有 arg0、arg1 等键的映射。这是为了允许将多个参数传递给模板。

**示例**

```
{{define "x"}}{{.arg0}} {{.arg1}}{{end}}{{template "x" (args 1 "2")}}
```

```
1 2
```

**externalURL**

`externalURL` 函数返回 ini 文件中配置的 Grafana 服务器的外部 URL。

**示例**

```
{{ externalURL }}
```

```
https://example.com/grafana
```

**graphLink**

`graphLink` 函数返回给定表达式和数据来源在 [Grafana 9 中的 Explore](v9-explore.md) 中图形视图的路径。

**示例**

```
{{ graphLink "{\"expr\": \"up\", \"datasource\": \"gdev-prometheus\"}" }}
```

```
/explore?left=["now-1h","now","gdev-prometheus",{"datasource":"gdev-prometheus","expr":"up","instant":false,"range":true}]
```

**humanize**

`humanize` 函数对十进制数字进行人性化处理。

**示例**

```
{{ humanize 1000.0 }}
```

```
1k
```

**humanize1024**

`humanize1024` 的工作原理类似于 `humanize`，但使用 1024（而不是 1000）作为基数。

**示例**

```
{{ 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` 函数将文本与正则表达式模式进行匹配。

**示例**

```
{{ match "a.*" "abc" }}
```

```
true
```

**pathPrefix**

`pathPrefix` 函数返回 ini 文件中配置的 Grafana 服务器的路径。

**示例**

```
{{ pathPrefix }}
```

```
/grafana
```

**tableLink**

`tableLink` 函数返回给定表达式和数据来源在 [Grafana 9 中的 Explore](v9-explore.md) 中表格视图的路径。

**示例**

```
{{ tableLink "{\"expr\": \"up\", \"datasource\": \"gdev-prometheus\"}" }}
```

```
/explore?left=["now-1h","now","gdev-prometheus",{"datasource":"gdev-prometheus","expr":"up","instant":true,"range":false}]
```

**删除实例快照**

`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
```

# 警报规则的状态和运行状况
<a name="v9-alerting-explore-state"></a>

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

警报规则的状态和运行状况可帮助您了解有关警报的几个关键状态指标。

有三个关键组件：*警报规则状态*、*警报实例状态*和*警报规则运行状况*。尽管相关，但每个组件传达的信息略有不同。

**警报规则状态**

警报规则可能处于以下任何状态：


| 州 | 说明 | 
| --- | --- | 
|  Normal  |  评估引擎返回的时间序列均未处于 `Pending` 或 `Firing` 状态。  | 
|  待定  |  评估引擎返回的时间序列中至少有一个处于 `Pending` 状态。  | 
|  触发  |  评估引擎返回的时间序列中至少有一个处于 `Firing` 状态。  | 

**注意**  
警报先过渡到 `pending`，然后过渡到 `firing`，因此至少需要两个评估周期才会触发警报。

**警报实例状态**

警报实例可能处于以下任何状态：


| 州 | 说明 | 
| --- | --- | 
|  Normal  |  警报的状态既不是触发也不是待处理，一切正常。  | 
|  待定  |  警报处于活动状态的时间少于配置的阈值持续时间。  | 
|  警报  |  警报处于活动状态的时间超过配置的阈值持续时间。  | 
|  NoData  |  在配置的时间窗口内未收到任何数据。  | 
|  错误  |  尝试评估警报规则时发生的错误。  | 

**警报规则运行状况**

警报规则可能具有以下运行状况之一：


| 州 | 说明 | 
| --- | --- | 
|  确定  |  评估警报规则时无错误。  | 
|  错误  |  在评估警报规则时发生错误。  | 
|  NoData  |  规则评估期间返回的至少一个时间序列中没有数据。  | 

**`NoData` 和 `Error` 的特殊警报**

当警报规则的评估产生 `NoData` 或 `Error` 状态时，Grafana Alerting 将生成具有以下附加标签的特殊警报：


| 标签 | 说明 | 
| --- | --- | 
|  alertname  |  `DatasourceNoData` 或 `DatasourceError`，视状态而定。  | 
|  datasource\$1uid  |  导致该状态的数据来源 UID。  | 

您可以像处理常规警报一样处理这些警报，方法是添加静默、路由到联系点等。

# 联系点
<a name="v9-alerting-explore-contacts"></a>

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

使用联系点定义当警报规则触发时如何通知联系人。一个联系点可以有一个或多个联系点类型，例如电子邮件、Slack、webhook 等。警报规则触发后，将向联系点列出的所有联系点类型发送通知。可以为 Grafana Alertmanager 以及外部 Alertmanager 配置联系点。

您还可以使用通知模板来自定义联系点类型的通知消息。

**支持的联系点类型**

下表列出了 Grafana 支持的联系点类型。


| Name | Type | 
| --- | --- | 
|  Amazon SNS  |  `sns`  | 
|  OpsGenie  |  `opsgenie`  | 
|  Pager Duty  |  `pagerduty`  | 
|  Slack  |  `slack`  | 
|  VictorOps  |  `victorops`  | 

有关联系点的更多信息，请参阅 [使用联系点](v9-alerting-contact-points.md) 和 [自定义通知](v9-alerting-notifications.md)。

# 通知
<a name="v9-alerting-explore-notifications"></a>

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

Grafana 使用 Alertmanager 发送触发和已解决警报的通知。Grafana 有自己的 Alertmanager，在用户界面中称为“Grafana”，但也支持从其他 Alertmanager 发送通知，例如 [Prometheus Alertmanager](https://prometheus.io/docs/alerting/latest/alertmanager/)。Grafana Alertmanager 使用通知策略和联系点来配置通知发送的方式和地点；通知发送的频率；以及警报是否在同一个通知中发送，根据一组标签在分组通知中发送，还是作为单独的通知发送。

## 通知策略
<a name="v9-alerting-explore-notifications-policies"></a>

通知策略控制着通知的发送时间和地点。通知策略可以选择在同一通知中一起发送所有警报，根据一组标签在分组通知中发送警报，或者将警报作为单独的通知发送。您可以配置每个通知策略来控制发送通知的频率，设置一个或多个静音定时，在一天中的特定时间和一周中的几天禁止通知。

通知策略采用树形结构，在树的根部有一个称为根策略的通知策略。根策略只能有一个，而且不能删除。

特定的路由策略是根策略的子策略，可用于根据一组匹配标签来匹配所有警报或部分警报。当通知策略的匹配标签与警报中的标签匹配时，通知策略就会与警报匹配。

特定路由策略可以有自己的子策略，从而实现更多的警报匹配。特定路由策略的一个例子是向运营团队发送基础设施警报；而子策略可能会向 Pagerduty 发送高优先级警报，向 Slack 发送低优先级警报。

所有警报（无论其标签如何）都匹配根策略。但是，当根策略收到警报时，会查看每个特定路由策略，并将警报发送到与警报匹配的第一个特定路由策略。如果特定路由策略还有其他子策略，则会尝试将警报与其嵌套策略之一进行匹配。如果没有特定路由策略与警报匹配，则策略本身就是匹配的策略。如果没有特定路由策略，或者没有与警报匹配的特定路由策略，则根策略就是匹配的策略。

## 联系点
<a name="v9-alerting-explore-notifications-contacts"></a>

联系点包含发送通知的配置。联系点是一个集成列表，每个集成都会向特定的电子邮件地址、服务或 URL 发送通知。联系点可以是多个相同类型的集成，也可以是不同类型集成的组合。例如，联系点可以包含一个 Pager Duty 集成；一个 Pager SNS 和 Slack 集成；或一个 Pager Duty 集成、一个 Slack 集成和两个 Amazon SNS 集成。您也可以配置没有集成的联系点；在这种情况下，不发送任何通知。

联系点只有在添加到通知策略后才能发送通知。一个通知策略只能向一个联系点发送警报，但是一个联系点可以同时添加到多个通知策略。当警报与通知策略匹配时，警报将发送到该通知策略中的联系点，然后由联系点向其配置中的每个集成发送通知。

**注意**  
有关联系点支持的集成的信息，请参阅 [联系点](v9-alerting-explore-contacts.md)。

## 模板化通知
<a name="v9-alerting-explore-notifications-templating"></a>

您可以使用模板自定义通知。例如，模板可用于更改发送到 Slack 的通知标题和消息。

模板并不限于单个集成或联系点，还可以在同一联系点的多个集成中使用，甚至是跨不同联系点的集成。例如，Grafana 用户可以创建一个名为 `custom_subject_or_title` 的模板，将其用于 Pager Duty 中的模板主题和 Slack 消息标题，而不必创建两个单独的模板。

所有通知模板均使用 [Go 的模板语言](https://pkg.go.dev/text/template)编写，位于“警报”页面的“联系点”选项卡中。

## 静默
<a name="v9-alerting-explore-notifications-silences"></a>

您可以使用静默将来自一个或多个触发规则的通知静音。静默不会阻止警报触发或解决，也不会在用户界面中隐藏触发警报。静默持续的时间取决于其持续时间，可按分钟、小时、天、月或年配置。

# 设置警报
<a name="v9-alerting-setup"></a>

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

配置创建和管理警报所需的功能和集成。

**Topics**
+ [添加外部 Alertmanager](v9-alerting-setup-alertmanager.md)
+ [预置 Grafana Alerting 资源](v9-alerting-setup-provision.md)

# 添加外部 Alertmanager
<a name="v9-alerting-setup-alertmanager"></a>

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

将 Grafana 设置为使用外部 Alertmanager 作为单一 Alertmanager 接收所有警报。然后，可以在 Grafana 中配置和管理此外部 Alertmanager。

添加 Alertmanager 后，您可以使用 Grafana Alerting UI 来管理静默、联系点和通知策略。通过这些页面中的下拉选项，您可以在不同的 Alertmanager 之间切换。

**注意**  
从 Grafana 9.2 开始，不推荐使用“警报”页面上“管理”选项卡中外部 Alertmanager 的 URL 配置。这将在未来版本中删除。

现在，应使用 Grafana 主导航菜单中的 Grafana 配置将外部 Alertmanager 配置为数据来源。这使您能够从 Grafana 中管理外部 Alertmanager 的联系点和通知策略，还可以加密以前通过 URL 配置外部 Alertmanager 时可见的 HTTP 基本身份验证凭证。

要添加外部 Alertmanager，请完成以下步骤。

1. 单击“配置”，然后单击“数据来源”。

1. 搜索 Alertmanager。

1. 根据需要，选择实现并填写页面上的字段。

   如果要预置数据来源，请将 `jsonData` 字段中的标志 `handleGrafanaManagedAlerts` 中设置为 `true`，以将 Grafana 管理的警报发送到此 Alertmanager。
**注意**  
支持 Prometheus、Grafana Mimir 和 Cortex 实现 Alertmanager。对于 Prometheus，Grafana Alerting UI 中的联系点和通知策略为只读。

1. 单击“保存并测试”。

# 预置 Grafana Alerting 资源
<a name="v9-alerting-setup-provision"></a>

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

警报基础设施通常很复杂，管道的许多部分通常位于不同的地方。跨多个团队和组织进行扩展是一项特别具有挑战性的任务。Grafana Alerting 预置使您能够以最适合贵组织的方式创建、管理和维护警报数据，从而简化此过程。

有两个选项可供选择：

1. 使用 Alerting Provisioning HTTP API 预置警报资源。
**注意**  
通常，您无法从 Grafana UI 编辑 API 预置的警报规则。  
要启用编辑功能，请在 API 中创建或编辑警报规则时将 x-disable-provenance标题添加到以下请求中：  

   ```
   POST /api/v1/provisioning/alert-rules
   PUT /api/v1/provisioning/alert-rules/{UID}
   ```

1. 使用 Terraform 预置警报资源。

**注意**  
目前，Grafana Alerting 的预置支持警报规则、联系点、静音定时和模板。使用文件预置或 Terraform 的预置警报资源只能在创建这些资源的来源中编辑，而不能从 Grafana 或任何其他来源中编辑。例如，如果您使用磁盘中的文件预置警报资源，则无法在 Terraform 或 Grafana 中编辑数据。

**Topics**
+ [使用 Terraform 创建和管理警报资源](v9-alerting-setup-provision-terraform.md)
+ [在 Grafana 中查看预置的警报资源](v9-alerting-setup-provision-view.md)

# 使用 Terraform 创建和管理警报资源
<a name="v9-alerting-setup-provision-terraform"></a>

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

使用 Terraform 的 Grafana 提供程序管理警报资源并将其配置到 Grafana 系统。Terraform 提供程序对 Grafana Alerting 的支持使创建、管理和维护整个 Grafana Alerting 堆栈即代码变得更容易。

有关使用 Terraform 管理警报资源的更多信息，请参阅 Terraform 文档中的 [Grafana 提供程序](https://registry.terraform.io/providers/grafana/grafana/latest/docs)文档。

完成以下任务，使用 Terraform 创建和管理警报资源。

1. 创建 API 密钥以进行预置。

1. 配置 Terraform 提供程序。

1. 在 Terraform 中定义警报资源。

1. 运行 `terraform apply` 以预置警报资源。

## 先决条件
<a name="v9-alerting-setup-provision-tf-prerequisites"></a>
+ 确保你有 grafana/grafana [Terraform 提供商 1.27.0](https://registry.terraform.io/providers/grafana/grafana/1.28.0) 或更高版本。
+ 确保您使用的是 Grafana 9.1 或更高版本。如果您使用 Grafana 9 版本创建了 Amazon Managed Grafana 实例，则这种情况是正确的。

## 创建 API 密钥以进行预置
<a name="v9-alerting-setup-provision-tf-apikey"></a>

您可以[创建普通的 Grafana API 密钥](Using-Grafana-APIs.md)，使用 Grafana 对 Terraform 进行身份验证。大多数使用 API 密钥的现有工具都应自动支持新的 Grafana Alerting。有关创建用于 Terraform 的密钥的具体信息，请参阅[使用 Terraform 实现 Amazon Managed Grafana 自动化](https://aws-observability.github.io/observability-best-practices/recipes/recipes/amg-automation-tf/)。

**创建 API 密钥以进行预置**

1. 为 CI 管道创建一个新的服务账户。

1. 分配角色“访问警报规则 Provisioning API”。

1. 创建新的服务账户令牌。

1. 命名并保存令牌以在 Terraform 中使用。

或者，您可以使用基本身份验证。要查看所有支持的身份验证格式，请参阅 Terraform 文档中的 [Grafana 身份验证](https://registry.terraform.io/providers/grafana/grafana/latest/docs#authentication)。

## 配置 Terraform 提供程序
<a name="v9-alerting-setup-provision-tf-configure"></a>

Grafana Alerting 支持包含在 [Grafana Terraform 提供程序](https://registry.terraform.io/providers/grafana/grafana/latest/docs)中。

下面是一个可用于配置 Terraform 提供程序的示例。

```
terraform {
    required_providers {
        grafana = {
            source = "grafana/grafana"
            version = ">= 1.28.2"
        }
    }
}

provider "grafana" {
    url = <YOUR_GRAFANA_URL>
    auth = <YOUR_GRAFANA_API_KEY>
}
```

## 预置联系点和模板
<a name="v9-alerting-setup-provision-tf-contacts"></a>

联系点将警报堆栈与外部连接起来。这些联系点通知 Grafana 如何连接到外部系统，以及向何处发送通知。有超过 15 种不同的[集成](https://registry.terraform.io/providers/grafana/grafana/latest/docs/resources/contact_point#optional)可供选择。此示例使用了 Slack 联系点。

**预置联系点和模板**

1. 将此代码块复制到本地计算机上的 .tf 文件中。*<slack-webhook-url>*替换为你的 Slack webhook 网址（或其他联系人）

   此示例创建一个联系点，用于向 Slack 发送警报通知。

   ```
   resource "grafana_contact_point" "my_slack_contact_point" {
       name = "Send to My Slack Channel"
   
       slack {
           url = <slack-webhook-url>
           text = <<EOT
   {{ len .Alerts.Firing }} alerts are firing!
   
   Alert summaries:
   {{ range .Alerts.Firing }}
   {{ template "Alert Instance Template" . }}
   {{ end }}
   EOT
       }
   }
   ```

1. 在文本字段中输入通知文本。

   `text` 字段支持 [Go 样式的模板](https://pkg.go.dev/text/template)。这让您可以直接在 Terraform 中管理 Grafana Alerting 通知模板。

1. 运行 `terraform apply` 命令。

1. 转到 Grafana UI，查看联系点的详细信息。

   您无法从 UI 编辑通过 Terraform 预置的资源。这样可确保警报堆栈始终与代码保持同步。

1. 单击**测试**以验证联系点是否正常工作。

**注意**  
您可以在多个联系点重复使用相同的模板。在上面的示例中，使用语句 `{{ template "Alert Instance Template" . }}` 嵌入了共享模板。  
然后，可以在 Terraform 中单独管理此片段：  

```
resource "grafana_message_template" "my_alert_template" {
    name = "Alert Instance Template"

    template = <<EOT
{{ define "Alert Instance Template" }}
Firing: {{ .Labels.alertname }}
Silence: {{ .SilenceURL }}
{{ end }}
EOT
}
```

## 预置通知策略和路由
<a name="v9-alerting-setup-provision-tf-notifications"></a>

通知策略会通知 Grafana 如何路由警报实例，而不是路由到何处。这些策略使用标签和匹配器系统将触发警报连接到您之前定义的联系点。

**预置通知策略和路由**

1. 将此代码块复制到本地计算机上的 .tf 文件中。

   在此示例中，警报按 `alertname` 分组，这意味着来自同名警报的所有通知都将分组到同一条 Slack 消息中。

   如果要以不同的方式路由特定通知，可以添加子策略。子策略允许您根据标签匹配将路由应用于不同的警报。在此示例中，我们对标签为 a=b 的所有警报应用了静音定时。

   ```
   resource "grafana_notification_policy" "my_policy" {
       group_by = ["alertname"]
       contact_point = grafana_contact_point.my_slack_contact_point.name
   
       group_wait = "45s"
       group_interval = "6m"
       repeat_interval = "3h"
   
       policy {
           matcher {
               label = "a"
               match = "="
               value = "b"
           }
           group_by = ["..."]
           contact_point = grafana_contact_point.a_different_contact_point.name
           mute_timings = [grafana_mute_timing.my_mute_timing.name]
   
           policy {
               matcher {
                   label = "sublabel"
                   match = "="
                   value = "subvalue"
               }
               contact_point = grafana_contact_point.a_third_contact_point.name
               group_by = ["..."]
           }
       }
   }
   ```

1. 在 mute\$1timings 字段中，将静音定时与您的通知策略关联。

1. 运行 `terraform apply` 命令。

1. 转到 Grafana UI，查看通知策略的详细信息。
**注意**  
您无法从 UI 编辑通过 Terraform 预置的资源。这样可确保警报堆栈始终与代码保持同步。

1. 单击**测试**以验证通知点是否正常工作。

## 预置静音定时
<a name="v9-alerting-setup-provision-tf-mutetiming"></a>

静音定时允许在定义的时间段内将警报通知静音。

**预置静音定时**

1. 将此代码块复制到本地计算机上的 .tf 文件中。

   在此示例中，警报通知在周末处于静音状态。

   ```
   resource "grafana_mute_timing" "my_mute_timing" {
       name = "My Mute Timing"
   
       intervals {
           times {
             start = "04:56"
             end = "14:17"
           }
           weekdays = ["saturday", "sunday", "tuesday:thursday"]
           months = ["january:march", "12"]
           years = ["2025:2027"]
       }
   }
   ```

1. 运行 `terraform apply` 命令。

1. 转到 Grafana UI，查看静音定时的详细信息。

1. 使用 `mute_timings` 字段在通知策略中引用新创建的静音定时。这会将静音定时应用于部分或全部通知。
**注意**  
您无法从 UI 编辑通过 Terraform 预置的资源。这样可确保警报堆栈始终与代码保持同步。

1. 单击**测试**以验证静音定时是否正常工作。

## 预置警报规则
<a name="v9-alerting-setup-provision-tf-rules"></a>

[警报规则](v9-alerting-managerules.md)让您可以针对任何 Grafana 数据来源发出警报。这可以是您预置的数据来源，也可以在 Terraform 中与警报规则一起[定义数据来源](https://registry.terraform.io/providers/grafana/grafana/latest/docs/resources/data_source)。

**预置警报规则**

1. 创建要查询的数据来源和要存储规则的文件夹。

   在此示例中，使用 [配置用于测试 TestData 的数据源](testdata-data-source.md) 数据来源。

   您可以针对 Grafana 中的任何后端数据源定义警报。

   ```
   resource "grafana_data_source" "testdata_datasource" {
       name = "TestData"
       type = "testdata"
   }
   
   resource "grafana_folder" "rule_folder" {
       title = "My Rule Folder"
   }
   ```

1. 定义警报规则。

   有关警报规则的更多信息，请参阅[如何创建 Grafana 管理的警报](https://grafana.com/blog/2022/08/01/grafana-alerting-video-how-to-create-alerts-in-grafana-9/)。

1. 创建包含一条或多条规则的规则组。

   在此示例中，使用 `grafana_rule_group` 资源组。

   ```
   resource "grafana_rule_group" "my_rule_group" {
       name = "My Alert Rules"
       folder_uid = grafana_folder.rule_folder.uid
       interval_seconds = 60
       org_id = 1
   
       rule {
           name = "My Random Walk Alert"
           condition = "C"
           for = "0s"
   
           // Query the datasource.
           data {
               ref_id = "A"
               relative_time_range {
                   from = 600
                   to = 0
               }
               datasource_uid = grafana_data_source.testdata_datasource.uid
               // `model` is a JSON blob that sends datasource-specific data.
               // It's different for every datasource. The alert's query is defined here.
               model = jsonencode({
                   intervalMs = 1000
                   maxDataPoints = 43200
                   refId = "A"
               })
           }
   
           // The query was configured to obtain data from the last 60 seconds. Let's alert on the average value of that series using a Reduce stage.
           data {
               datasource_uid = "__expr__"
               // You can also create a rule in the UI, then GET that rule to obtain the JSON.
               // This can be helpful when using more complex reduce expressions.
               model = <<EOT
   {"conditions":[{"evaluator":{"params":[0,0],"type":"gt"},"operator":{"type":"and"},"query":{"params":["A"]},"reducer":{"params":[],"type":"last"},"type":"avg"}],"datasource":{"name":"Expression","type":"__expr__","uid":"__expr__"},"expression":"A","hide":false,"intervalMs":1000,"maxDataPoints":43200,"reducer":"last","refId":"B","type":"reduce"}
   EOT
               ref_id = "B"
               relative_time_range {
                   from = 0
                   to = 0
               }
           }
   
           // Now, let's use a math expression as our threshold.
           // We want to alert when the value of stage "B" above exceeds 70.
           data {
               datasource_uid = "__expr__"
               ref_id = "C"
               relative_time_range {
                   from = 0
                   to = 0
               }
               model = jsonencode({
                   expression = "$B > 70"
                   type = "math"
                   refId = "C"
               })
           }
       }
   }
   ```

1. 转到 Grafana UI 并查看您的警报规则。

   您可以查看是否触发警报规则。您还可以看到警报规则每个查询阶段的可视化效果。

   警报触发时，Grafana 会通过您定义的策略路由通知。

   例如，如果您选择 Slack 作为联系点，Grafana 的嵌入式 [Alertmanager](https://github.com/prometheus/alertmanager) 会自动向 Slack 发布消息。

# 在 Grafana 中查看预置的警报资源
<a name="v9-alerting-setup-provision-view"></a>

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

 您可以验证是否在 Grafana 中创建了警报资源。

**在 Grafana 中查看预置的资源**

1. 打开 Grafana 实例。

1. 导航到警报。

1. 单击警报资源文件夹，例如 Alert rules。

   预置的资源带有 **Provisioned** 标记，很明显这些资源不是手动创建的。

**注意**  
您无法从 Grafana 编辑预置的资源。只能通过更改配置文件并重新启动 Grafana 或执行热重载来更改资源属性。这样可以防止对资源进行更改，如果再次配置文件或执行热重载，这些更改会被覆盖。

# 将经典控制面板警报迁移到 Grafana Alerting
<a name="v9-alerting-use-grafana-alerts"></a>

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

选择不使用 Grafana Alerting 的工作区，使用经典控制面板警报。要切换到新的 Grafana Alerting，必须选择启用此功能。

您可以使用、或亚马逊托管 Grafana API 将您的亚马逊托管 Grafana 实例配置为使用 Grafana 警报。 AWS 管理控制台 AWS CLI有关如何配置 Amazon Managed Grafana（包括打开或关闭 Grafana Alerting）的详细信息，请参阅 [配置 Amazon Managed Grafana 工作区](AMG-configure-workspace.md)。

**注意**  
使用 Grafana Alerting 时，在 Grafana（而不是 Prometheus）中定义的警报规则会向您的联系点发送多条通知。如果您使用的是原生 Grafana 警报，建议您继续使用经典控制面板警报，不要启用新的 Grafana Alerting 功能。如果您想查看 Prometheus 数据来源中定义的警报，那么建议您启用 Grafana Alerting，该功能只会针对在 Prometheus Alertmanager 中创建的警报发送一条通知。  
此限制已在支持 Grafana v10.4 及更高版本的 Amazon Managed Grafana 工作区中移除。

## 迁移到 Grafana Alerting 系统
<a name="v9-alerting-use-grafana-alerts-opt-in"></a>

开启 Grafana Alerting 后，现有的经典控制面板警报将以兼容 Grafana Alerting 的格式迁移。在 Grafana 实例的“警报”页面中，您可以查看迁移的警报和新警报。借助 Grafana Alerting，Grafana 管理的警报规则会在匹配时发送多条通知，而不是单个警报。

对经典控制面板警报和 Grafana 警报的读写权限受存储这些警报的文件夹的权限控制。在迁移过程中，经典控制面板警报权限与新规则权限匹配，如下所示：
+ 如果原始警报的控制面板拥有权限，则迁移会创建一个以 `Migrated {"dashboardUid": "UID", "panelId": 1, "alertId": 1}` 格式命名的文件夹，以匹配原始控制面板的权限（包括从该文件夹继承的权限）。
+ 如果没有控制面板权限，并且控制面板位于某个文件夹下，则规则将链接到该文件夹并继承其权限。
+ 如果没有控制面板权限，并且控制面板位于 General 文件夹下，则规则将链接到 General Alerting 文件夹并继承默认权限。

**注意**  
由于 Grafana Alerting 中没有 `NoData` 的 `Keep Last State` 选项，因此在经典规则迁移期间，此选项将变为 `NoData`。`Error` 处理的选项 `Keep Last State` 已迁移到新选项 `Error`。为了匹配 `Keep Last State` 的行为，在这两种情况下，在迁移过程中，Amazon Managed Grafana 会自动为每条警报规则创建一个静默，持续时间为一年。

通知通道将迁移到具有相应路由和接收器的 Alertmanager 配置。默认通知通道将作为联系点添加到默认路由。未与任何控制面板警报关联的通知通道将会转到 `autogen-unlinked-channel-recv` 路由。

### 限制
<a name="v9-alerting-use-grafana-alerts-limitations"></a>
+ Grafana Alerting 系统可从所有可用的 Prometheus、Loki 和 Alertmanager 数据来源检索规则。但可能无法从其他受支持的数据来源获取警报规则。
+ 在 Grafana 警报和经典控制面板警报之间来回迁移可能会导致一个系统支持的功能丢失数据，而另一个则不会。
**注意**  
如果您迁移回经典控制面板警报，则在启用 Grafana Alerting 时对警报配置进行的所有更改都将丢失，包括创建的任何新警报规则。

# 管理警报规则
<a name="v9-alerting-managerules"></a>

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

警报规则是一组评估标准，用于确定警报是否会触发。警报规则包含一个或多个查询和表达式、一个条件、评估频率，或者满足条件的持续时间。

当查询和表达式选择要评估的数据集时，条件设置警报必须达到或超过该阈值才能创建警报。间隔指定评估警报规则的频率。配置的持续时间表示必须满足条件的持续时间。警报规则还可以定义缺少数据时的警报行为。

**注意**  
Grafana 管理的警报规则只能由对存储规则的文件夹具有编辑权限的用户编辑或删除。  
具有编辑者或管理员角色的用户可以编辑或删除外部 Grafana Mimir 或 Loki 实例的警报规则。

**Topics**
+ [创建 Grafana 管理的警报规则](v9-alerting-managerules-grafana.md)
+ [创建 Grafana Mimir 或 Loki 管理的警报规则](v9-alerting-managerules-mimir-loki.md)
+ [创建 Grafana Mimir 或 Loki 管理的记录规则](v9-alerting-managerules-mimir-loki-recording.md)
+ [Grafana Mimir 或 Loki 规则组和命名空间](v9-alerting-managerules-mimir-loki-groups.md)
+ [查看和编辑警报规则](v9-alerting-managerules-view-edit.md)

# 创建 Grafana 管理的警报规则
<a name="v9-alerting-managerules-grafana"></a>

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

Grafana 允许您创建警报规则，以查询一个或多个数据来源，归约或转换结果，并将它们相互比较或与固定阈值进行比较。运行完成后，Grafana 会向联系点发送通知。

**要添加 Grafana 管理的规则**

1. 在 Grafana 控制台的 Grafana 菜单中，选择**警报**（铃铛）图标，打开列出现有警报的**警报**页面。

1. 选择**新建警报规则**。

1. 在**步骤 1** 中，添加规则名称、类型和存储位置，如下所示：
   + 在**规则名称**中，添加描述性名称。此名称将显示在警报规则列表中。这也是根据此规则创建的每个警报实例的 `alertname` 标签。
   + 从**规则类型**下拉列表中，选择 **Grafana 管理的警报**。
   + 从**文件夹**下拉列表中，选择要存储规则的文件夹。如果未选择文件夹，规则将存储在 `General` 文件夹中。要创建文件夹，请选择下拉列表，并输入新文件夹名称。

1. 在**步骤 2** 中，添加要评估的查询和表达式。
   + 保留默认名称，或将鼠标悬停在其上方，选择编辑图标以更改名称。
   + 对于查询，请从下拉列表中选择一个数据来源。
   + 添加一个或多个[查询或表达式](v9-panels-query-xform-expressions.md)。
   + 对于每个表达式，可选择**经典条件**来创建单条警报规则，或从 **Math**、**Reduce** 和 **Resample** 选项中选择，为每个序列生成单独的警报。有关这些选项的详细信息，请参阅 [单维规则和多维规则](#v9-alerting-single-multi-rule)。
   + 选择**运行查询**，以验证查询是否成功。

1. 在**步骤 3** 中，添加条件。
   + 从**条件**下拉列表中，选择启动警报规则的查询或表达式。
   + 在**评估间隔**中，指定评估频率。必须是 10 秒的倍数。例如 `1m`、`30s`。
   + 在**评估时长**中，指定条件必须为 true 的持续时间，超过该时间后才会启动警报。
**注意**  
如果条件被违反，警报将进入 `Pending` 状态。如果条件在指定的持续时间保持为违反状态，警报将转入 `Firing` 状态。如果不再保持此状态，则恢复到 `Normal` 状态。
   + 在**配置无数据和错误处理**中，配置无数据情况下的警报行为。使用[处理无数据或错误的情况](#v9-alerting-rule-no-data-error)中的指南。
   + 选择**预览警报**，检查此时运行查询的结果。预览不包括无数据和错误处理条件。

1. 在**步骤 4** 中，添加与规则相关联的其他元数据。
   + 添加描述和摘要以自定义警报消息。使用 [标签和注释](v9-alerting-explore-labels.md) 中的指南。
   + 添加 Runbook 网址、面板、仪表板和警报 IDs。
   + 添加自定义标签。

1. 选择**保存**以保存规则，或者选择**保存并退出**，以保存规则并返回**警报**页面。

在创建规则后，您便可以为规则创建通知。有关通知的更多信息，请参阅 [管理警报通知](v9-alerting-managenotifications.md)。

## 单维规则和多维规则
<a name="v9-alerting-single-multi-rule"></a>

对于 Grafana 管理的警报规则，您可以创建具有经典条件的规则，也可以创建多维规则。

**单维规则（经典条件）**

使用经典条件表达式创建规则，可在满足条件时启动单个警报。对于返回多个序列的查询，Grafana 不会跟踪每个序列的警报状态。因此，即使满足多个序列的警报条件，Grafana 也只发送一个警报。

有关如何设置表达式格式的更多信息，请参阅 *Grafana 文档*中的 [Expressions](https://grafana.com/docs/grafana/next/panels/query-a-data-source/)。

**多维规则**

要为查询中返回的每个序列生成单独的警报实例，请创建多维规则。

**注意**  
由多维规则生成的每个警报实例都会计入警报总配额。达到警报配额后，不会对规则进行评估。有关多维规则配额的更多信息，请参阅 [达到配额错误](#v9-alerting-rule-quota-reached)。

要根据单条规则创建多个实例，请使用 `Math`、`Reduce`、或 `Resample` 表达式来创建多维规则。例如，您可以：
+ 为每个查询添加 `Reduce` 表达式，将所选时间范围内的值聚合为一个值。（[使用数字数据的规则](v9-alerting-explore-numeric.md)不需要）。
+ 添加包含规则条件的 `Math` 表达式。如果查询或归约表达式已经返回 0（表示规则不应启动警报）或正数（表示规则应启动警报），则无需进行此操作。

  一些示例：
  + `$B > 70`如果它应该在 B query/expression 的值大于 70 时启动警报。
  + `$B < $C * 100`：如果应该在 B 的值小于 C 的值乘以 100 时启动警报。如果要比较的查询在其结果中包含多个序列，那么对于来自不同查询的序列，如果它们具有相同的标签，或者其中一个序列的标签是另一个序列标签的子集，就会进行匹配。

**注意**  
Grafana 不支持使用模板变量的警报查询。有关更多信息，请访问社区页面：[Template variables are not supported in alert queries while setting up Alert](https://community.grafana.com/t/template-variables-are-not-supported-in-alert-queries-while-setting-up-alert/2514)。



**多维规则的性能注意事项**

每个警报实例都会计入警报配额。如果多维规则创建的实例超过警报配额所能容纳的数量，则不会对其进行评估，并且会返回配额错误。有关更多信息，请参阅 [达到配额错误](#v9-alerting-rule-quota-reached)。

多维警报可能会大幅影响 Grafana 工作区的性能，以及数据来源的性能（因为 Grafana 会查询数据来源，以评估警报规则）。在您尝试优化监控系统的性能时，以下注意事项可能会有所帮助。
+ **规则评估频率**：警报规则的**评估间隔**属性可控制规则评估的频率。我们建议使用可接受的最低评估频率。
+ **结果集基数**：使用规则创建的警报实例数量会影响其性能。假设您要在实例集的每台虚拟机上监控每个 API 路径的 API 响应错误。该集合的基数是路径数乘以路径数。 VMs您可以减少结果集的基数，例如，通过监控每台虚拟机的总错误数（而不是每台虚拟机每条路径的错误数）做到这一点。
+ **查询的复杂性**：对于数据来源可以快速处理和响应的查询，其消耗的资源更少。虽然这一考虑因素不如上述其他考虑因素重要，但如果您已尽可能降低了那些因素的影响，那么着眼于单个查询的性能可能会有所帮助。您还应该了解评估这些规则对数据来源的性能影响。通常，在监控数据库处理的查询中，警报查询占据了绝大多数，因此影响 Grafana 实例的负载因素也会影响这些警报查询。

## 达到配额错误
<a name="v9-alerting-rule-quota-reached"></a>

单个工作区中可以拥有的警报实例数量有配额限制。达到该数量后，您将无法再在该工作区中创建新的警报规则。对于多维警报，警报实例的数量可能会随时间变化。

处理警报实例时，请务必记住以下几点。
+ 如果您只创建单维规则，则每条规则都是一个警报实例。您可以在单个工作区中创建与警报实例配额数量相同的规则，但不能超过该数量。
+ 多维规则会创建多个警报实例，但在对警报实例进行评估之前，其数量是未知的。例如，如果您创建了跟踪 Amazon EC2 实例 CPU 使用率的警报规则，创建时可能有 50 个 EC2 实例（因此有 50 个警报实例），但如果您在一周后再添加 10 个 EC2 实例，则下次评估时将有 60 个警报实例。

  警报实例的数量在创建多维警报时评估，您无法创建出会立即超过警报实例配额的警报实例。由于警报实例的数量可能会发生变化，因此每次评估规则时，都会检查您的配额。
+ 在规则评估时，如果某条规则导致超出警报实例配额，那么，在对警报规则进行更新，使警报实例总数低于服务配额之前，不会评估该规则。发生这种情况时，您会收到一条警报通知，告知您已达到配额（该通知使用正在评估的规则的通知策略）。该通知包含一个 `Error` 注释，其值为 `QuotaReachedError`。
+ 导致 `QuotaReachedError` 的规则将停止评估。只有在进行更新，且更新后的评估本身不会导致 `QuotaReachedError` 时，才会恢复评估。未评估的规则会在 Grafana 控制台中显示**达到配额**错误。
+ 要减少警报实例的数量，您可以移除警报规则，或编辑多维警报，使其具有的警报实例变少（例如，为每台虚拟机上的错误设置一个警报，而不是为虚拟机中的每个 API 的错误设置一个警报）。
+ 要恢复评估，请更新警报并保存。您可以对警报进行更新，以减少警报实例的数量。或者，如果您做出了其他可减少警报实例数量的更改，也可以不做任何更改，直接保存警报。如果评估可以恢复，就会恢复。如果会导致另一个 `QuotaReachedError`，则无法保存。
+ 如果警报被保存，并且恢复了评估，同时也没有超过警报配额，**达到配额**错误可能会继续在 Grafana 控制台中显示一段时间（时间最长为其评估间隔），但是，警报规则评估确实会开始，如果达到规则阈值，将发送警报。
+ 有关警报配额以及其他配额的详细信息，请参阅 [Amazon Managed Grafana 的服务配额](AMG_quotas.md)。

## 处理无数据或错误的情况
<a name="v9-alerting-rule-no-data-error"></a>

选择在无数据或有错误时如何处理警报行为的选项。

下表列出了处理无数据的选项。


| 无数据选项 | 行为 | 
| --- | --- | 
|  无数据  |  创建警报 `DatasourceNoData`，将警报规则的名称和 UID，以及返回无数据的数据来源的 UID 作为标签。  | 
|  警报  |  将警报规则状态设置为 `Alerting`。  | 
|  OK  |  将警报规则状态设置为 `Normal`。  | 

下表列出了处理错误情况的选项。


| 错误或超时选项 | 行为 | 
| --- | --- | 
|  警报  |  将警报规则状态设置为 `Alerting`  | 
|  OK  |  将警报规则状态设置为 `Normal`  | 
|  错误  |  创建警报 `DatasourceError`，将警报规则的名称和 UID，以及返回无数据的数据来源的 UID 作为标签。  | 

# 创建 Grafana Mimir 或 Loki 管理的警报规则
<a name="v9-alerting-managerules-mimir-loki"></a>

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

使用 Grafana，您可以为外部 Grafana Mimir 或 Loki 实例创建警报规则。

**注意**  
Grafana Mimir 可以连接到 Amazon Managed Service for Prometheus 和 Prometheus 数据来源。

**先决条件**
+ 验证您是否拥有 Prometheus 数据来源的写入权限。如果没有，您将无法创建或更新 Cortex 管理的警报规则。
+ 对于 Grafana Mimir 和 Loki 数据来源，通过配置其各自的服务启用 ruler API。
  + **Loki**：`local` 规则存储类型是 Loki 数据来源的默认设置，仅支持查看规则。要编辑规则，请配置其他存储类型之一。
  + **Grafana Mimir**：使用旧前缀 `/api/prom`，而不是 `/prometheus`。Prometheus 数据来源同时支持 Grafana Mimir 和 Prometheus，并且 Grafana 预期 Query API 和 Ruler API 使用相同的 URL。您不能为 Ruler API 提供单独的 URL。

**注意**  
如果您不想管理特定 Loki 或 Prometheus 数据来源的警报规则，请转到其设置，并清除**通过警报用户界面管理警报**复选框。

**添加 Grafana Mimir 或 Loki 管理的警报规则**

1. 在 Grafana 控制台的 Grafana 菜单中，选择**警报**（铃铛）图标，打开列出现有警报的**警报**页面。

1. 选择**创建警报规则**。

1. 在**步骤 1** 中，选择规则类型和详细信息，如下所示：
   + 选择 **Mimir 或 Loki 警报**。
   + 在**规则名称**中，添加描述性名称。此名称将显示在警报规则列表中。这也是根据此规则创建的每个警报实例的 `alertname` 标签。
   + 从**选择数据来源**下拉列表中，选择 Prometheus 或 Loki 数据来源。
   + 从**命名空间**下拉列表中，选择现有的规则命名空间。否则，选择**新增**，然后输入名称以新建。命名空间可以包含一个或多个规则组，并且只能用于组织目的。有关更多信息，请参阅 [Cortex 或 Loki 规则组和命名空间](alert-rules.md#alert-rule-groups)。
   + 从**组**下拉列表中，选择所选命名空间内的现有群组。否则，选择**新增**，然后输入名称以新建。新创建的规则会附加到该组的末尾。组内的规则以固定时间间隔按顺序运行，评估时间相同。

1. 在**步骤 2** 中，添加要评估的查询。

   该值可以是 PromQL 或 LogQL 表达式。如果评估结果中至少有一个序列的值大于 0，则规则会启动警报。会为每个序列创建一个警报。

1. 在**步骤 3** 中，指定警报评估间隔。

   在条件的**时长**文本框中，指定条件必须保持为 true 的持续时间，超过该时间后才会启动警报。如果您指定 `5m`，则条件必须持续五分钟为 true，才会启动警报。
**注意**  
满足条件后，警报将进入 `Pending` 状态。如果条件在指定的持续时间保持为激活状态，警报将转入 `Firing` 状态。如果不再保持此状态，则恢复到 `Normal` 状态。

1. 在**步骤 4** 中，添加与规则相关联的其他元数据。
   + 添加描述和摘要以自定义警报消息。使用 [标签和注释](v9-alerting-explore-labels.md) 中的指南。
   + 添加 Runbook 网址、面板、仪表板和警报 IDs。
   + 添加自定义标签。

1. 选择**预览警报**，以评估规则，并查看会产生哪些警报。这将显示警报列表，其中包含每个警报的状态和值。

1. 选择**保存**以保存规则，或者选择**保存并退出**，以保存规则并返回**警报**页面。

在创建规则后，您便可以为规则创建通知。有关通知的更多信息，请参阅 [管理警报通知](v9-alerting-managenotifications.md)。

# 创建 Grafana Mimir 或 Loki 管理的记录规则
<a name="v9-alerting-managerules-mimir-loki-recording"></a>

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

您可以为外部 Grafana Mimir 或 Loki 实例创建和管理记录规则。记录规则会预先计算经常需要的表达式或计算成本高昂的表达式，并将结果保存为一组新的时间序列。查询这个新时间序列的速度更快，特别是对于控制面板而言，因为控制面板每次刷新时都会查询相同的表达式。

**先决条件**

对于 Grafana Mimir 和 Loki 数据来源，通过配置其各自的服务启用 ruler API。
+ **Loki**：`local` 规则存储类型是 Loki 数据来源的默认设置，仅支持查看规则。要编辑规则，请配置其他存储类型之一。
+ **Grafana Mimir**：将数据来源配置为指向 Grafana Mimir 时，请使用旧前缀 `/api/prom`，而不是 `/prometheus`。Prometheus 数据来源同时支持 Grafana Mimir 和 Prometheus，并且 Grafana 预期 Query API 和 Ruler API 使用相同的 URL。您不能为 Ruler API 提供单独的 URL。

**注意**  
如果您不想管理特定 Loki 或 Prometheus 数据来源的警报规则，请转到其设置，并清除**通过警报用户界面管理警报**复选框。

**添加 Grafana Mimir 或 Loki 管理的记录规则**

1. 在 Grafana 控制台的 Grafana 菜单中，选择**警报**（铃铛）图标，打开列出现有警报的**警报**页面。

1. 选择**创建警报规则**。

1. 在**步骤 1** 中，添加规则类型、规则名称和存储位置，如下所示：
   + 选择 **Mimir 或 Loki 记录规则**选项。
   + 在**规则名称**中，添加描述性名称。此名称将显示在警报规则列表中。这也是根据此规则创建的每个警报实例的 `alertname` 标签。
   + 从**选择数据来源**下拉列表中，选择 Prometheus 或 Loki 数据来源。
   + 从**命名空间**下拉列表中，选择现有的规则命名空间。否则，选择**新增**，然后输入名称以新建。命名空间可以包含一个或多个规则组，并且只能用于组织目的。有关更多信息，请参阅 [Cortex 或 Loki 规则组和命名空间](alert-rules.md#alert-rule-groups)。
   + 从**组**下拉列表中，选择所选命名空间内的现有群组。否则，选择**新增**，然后输入名称以新建。新创建的规则会附加到该组的末尾。组内的规则以固定时间间隔按顺序运行，评估时间相同。

1. 在**步骤 2** 中，添加要评估的查询。

   该值可以是 PromQL 或 LogQL 表达式。如果评估结果中至少有一个序列的值大于 0，则规则会启动警报。会为每个序列创建一个警报。

1. 在**步骤 3** 中，添加与规则相关联的其他元数据。
   + 添加描述和摘要以自定义警报消息。使用 [警报规则的注释和标签](alert-rules.md#alert-rule-labels) 中的指南。
   + 添加 Runbook 网址、面板、仪表板和警报 IDs。
   + 添加自定义标签。

1. 选择**保存**以保存规则，或者选择**保存并退出**，以保存规则并返回**警报**页面。

# Grafana Mimir 或 Loki 规则组和命名空间
<a name="v9-alerting-managerules-mimir-loki-groups"></a>

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

您可以组织规则。规则是在规则组中创建的，而规则组被组织到命名空间中。规则组中的规则以固定时间间隔按顺序运行。默认的时间间隔为一分钟。您可以重命名 Grafana Mimir 或 Loki 命名空间和规则组，并编辑组评估间隔。

**要编辑规则组或命名空间**

1. 在 Grafana 控制台的 Grafana 菜单中，选择**警报**（铃铛）图标，打开**警报**页面。

1. 导航到要编辑的规则组或命名空间中的规则。

1. 选择**编辑**（笔）图标。

1. 对规则组或命名空间做出更改。
**注意**  
对于命名空间，您只能编辑名称。对于规则组，您可以更改名称，或组内规则的评估时间间隔。例如，您可以选择 `1m` 让规则每分钟评估一次，或选择 `30s` 让规则每 30 秒评估一次。

1. 选择**保存更改**。

# 查看和编辑警报规则
<a name="v9-alerting-managerules-view-edit"></a>

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

**警报**页面列出了警报规则。默认情况下，规则按数据来源类型分组。**Grafana** 部分列出了 Grafana 管理的规则，**Cortex/Loki** 部分列出了兼容 Prometheus 的数据来源的规则。您可以查看兼容 Prometheus 的数据来源的警报规则，但无法编辑。

Mimir/Cortex/Loki规则部分列出了 Mimir、Cortex 或 Loki 数据源的所有规则。本节还列出了云警报规则。

管理大量警报时，可使用扩展的警报规则搜索功能筛选文件夹、评估组和规则。此外，您还可以按标签、状态、类型和运行状况等属性筛选警报规则。

**注意**  
您可以查看预置警报的查询定义，但无法编辑。通过查看，您可以验证查询和规则定义是否正确，而无需返回预置存储库获取规则定义。

## 查看警报规则
<a name="v9-alerting-managerules-view"></a>

使用 Grafana 警报，您可以在一个页面中查看所有警报。

**查看警报详细信息**

1. 在 Grafana 控制台的 Grafana 菜单中，选择**警报**（铃铛）图标，打开**警报**页面。默认情况下，规则按数据来源类型分组显示。您还可以按每个警报的当前状态查看（下文将详细介绍）。

1. 在**查看方式**中，您可以选择自己喜欢的选项，在组视图和状态视图之间切换。

1. 选择行旁边的箭头，查看该行的详细信息。规则的详细信息包括规则标签、注释、数据来源和查询，以及由规则生成的警报实例列表。

**注意**  
有关了解警报详情的更多信息，请参阅 [警报规则的状态和运行状况](v9-alerting-explore-state.md)。

**组视图**

组视图显示按文件夹分组的 Grafana 警报规则以及按 `namespace` \$1 `group` 分组的 Loki 或 Prometheus 警报规则。这是默认的规则列表视图，用于管理规则。您可以展开每个组，查看该组中的规则列表。进一步展开规则，查看详细信息。您还可以展开操作按钮和规则产生的警报，查看其详细信息。

**状态视图**

状态视图显示按状态分组的警报规则。使用此视图可以大致了解哪些规则处于何种状态。可以展开每条规则查看其详细信息。其中包括操作按钮和由此规则生成的任何警报，而每个警报都可以进一步展开以查看其详细信息。

**筛选警报规则**

您可以通过多种方式筛选**警报**页面上显示的警报规则。
+ 您可以选择**选择数据来源**，然后选择要筛选的数据来源，筛选显示查询特定数据来源的规则。
+ 您可以在**按标签搜索**中选择搜索条件，按标签筛选。例如，您可以键入 `environment=production,region=~US|EU,severity!=warning` 来筛选美国和欧盟的生产警告。
+ 您可以选择**按状态筛选警报**，然后选择要查看的状态，筛选显示处于特定状态的规则。

## 编辑或删除警报规则
<a name="v9-alerting-managerules-edit"></a>

Grafana 管理的警报规则只能由对存储规则的文件夹具有编辑权限的用户编辑或删除。具有编辑者或管理员角色的用户可以编辑或删除外部 Mimir 或 Loki 实例的警报规则。

**编辑或删除规则**

1. 展开规则，直到可以看到**查看**、**编辑**和**删除**的规则控件。

1. 选择**编辑**以打开“创建规则”页面。按照创建规则的相同方式更新。有关详细信息，请参阅 [创建 Grafana 管理的警报规则](v9-alerting-managerules-grafana.md) 或 [创建 Grafana Mimir 或 Loki 管理的警报规则](v9-alerting-managerules-mimir-loki.md) 中的说明。

1. （可选）选择**删除**以删除规则。

## 导出警报规则
<a name="v9-alerting-managerules-export"></a>

您可以在 Grafana 工作区中选择**导出**，将规则导出为 YAML 或 JSON 格式。这让您可以选择定义新规则，然后将其导出。您可以使用 UI 创建规则，然后将其导出以在配置 API 或 terraform 脚本中使用。

**注意**  
Grafana 工作区和预置界面都支持此功能。

# 管理警报通知
<a name="v9-alerting-managenotifications"></a>

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

选择发送警报通知的方式、时间和地点是设置警报系统的重要组成部分。这些决定将直接影响您快速解决问题的能力，并且不会错过任何重要的事情。

首先，定义*联系点*，这些联系点定义了向何处发送警报通知。联系点可以是一组用于匹配通知的目标。向联系点添加通知模板，以便在通知中实现重用和一致的消息传递。

接下来，创建*通知策略*，该策略包含一组规则，规定了警报在何处、何时以及如何发送到联系点。在通知策略中，您可以选择创建的一个联系点，来定义将警报通知发送到何处。向通知策略添加静音定时。*静音定时*是一个重复的时间间隔，在此期间您不希望发送任何通知。

评估警报规则时，警报规则会向 Alertmanager 发送警报实例：一个警报规则可以触发多个单独的*警报实例*。

Alertmanager 会收到这些警报实例，然后处理静音定时，对警报分组，并按照通知策略中的定义将通知发送到联系点。

**Topics**
+ [Alertmanager](v9-alerting-managenotifications-alertmanager.md)
+ [使用联系点](v9-alerting-contact-points.md)
+ [使用通知策略](v9-alerting-notification-policies.md)
+ [自定义通知](v9-alerting-notifications.md)
+ [静默 Prometheus 数据来源的警报通知](v9-alerting-silences.md)
+ [静音定时](v9-alerting-notification-muting.md)
+ [按警报组查看和筛选](v9-alerting-viewfiltergroups.md)
+ [查看通知错误](v9-alerting-viewnotificationerrors.md)

# Alertmanager
<a name="v9-alerting-managenotifications-alertmanager"></a>

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

Alertmanager 让您可以快速高效地管理和响应警报。还可以接收警报、处理静音、抑制、分组和路由，通过您选择的渠道（如电子邮件或 Slack）发送通知。

在 Grafana 中，您可以使用 Grafana Alertmanager 或外部 Alertmanager。您也可以运行多个 Alertmanager，具体取决于您的设置和警报的生成位置。

**Grafana Alertmanager**

Grafana Alertmanager 是一个预先配置的内部 Alertmanager，如果您在本地或开源环境下运行 Grafana，默认情况下可供选择。

Grafana Alertmanager 可以接收来自 Grafana 的警报，但不能接收来自 Grafana 外部的警报，例如来自 Mimir 或 Loki 的警报。

**注意**  
Grafana Alertmanager 不支持抑制规则。

**外部 Alertmanager**

如果您想使用单个 Alertmanager 来接收所有 Grafana、Loki、Mimir 和 Prometheus 警报，可将 Grafana 设置为使用外部 Alertmanager。然后，可以在 Grafana 中配置和管理此外部 Alertmanager。

以下是两个示例，说明了您可能需要配置自己的外部 Alertmanager 并向其发送警报，而不是向 Grafana Alertmanager 发送警报的情况：

1. 您已经在自己的云基础设施中部署了本地 Alertmanager，并希望继续使用，因为您还有其他警报生成器，比如 Prometheus。

1. 您想同时使用 Prometheus 本地和托管 Grafana 将警报发送到云基础设施中运行的同一个 Alertmanager。

Alertmanager 位于“警报联系点”和“通知策略”页面的下拉菜单中。

如果要预置数据来源，请将 `jsonData` 字段中的标志 `handleGrafanaManagedAlerts` 中设置为 `true`，以将 Grafana 管理的警报发送到此 Alertmanager。

# 使用联系点
<a name="v9-alerting-contact-points"></a>

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

使用联系点可定义当警报启动时，如何通知联系人。一个联系点可以有一个或多个联系点集成，例如 Amazon Simple Notification Service 或 Slack。启动警报后，将向联系点列出的所有联系点集成发送通知。（可选）使用[通知模板](v9-alerting-create-templates.md)可为联系点类型自定义通知消息。

**注意**  
您可以为 Grafana 管理的警报创建和编辑联系点。Alertmanager 警报的联系点为只读。

## 使用联系点
<a name="v9-alerting-working-contact-points"></a>

以下过程详细介绍了如何添加、编辑、测试和删除联系点。

**添加联系点**

1. 在 Grafana 控制台的 Grafana 菜单中，选择**警报**（铃铛）图标，打开**警报**页面。

1. 选择**联系点**，然后选择**新建联系点**。

1. 从 **Alertmanager** 下拉列表中，选择 Alertmanager。默认选择 Grafana Alertmanager。

1. 输入联系点的**名称**。

1. 从**联系点集成**中选择一种类型，并根据该类型选择必填字段。例如，如果您选择 Slack，请输入应联系的 Slack 频道和用户。

1. 如果您选择的联系点可用，请选择所需的**可选设置**来指定其他设置。

1. 在**通知设置**下，如果您不希望在警报得到解决时收到通知，可以选择**禁用已解决消息**。

1. 如果您的联系点需要更多联系点类型，则可以选择**添加联系点集成**，然后针对所需的每种联系点类型，重复上述步骤。

1. 选择**保存联系点**，保存您的更改。

**编辑联系点**

1. 选择**联系点**，以查看现有联系点列表。

1. 选择要编辑的联系点，然后选择**编辑**图标（笔）。

1. 进行任何必要的更改，然后选择**保存联系点**，以保存更改。

创建联系点后，您可以发送测试通知，以验证其配置是否正确。

**发送测试通知**

1. 选择**联系点**，以打开现有联系点列表。

1. 选择要测试的联系点，然后选择**编辑**图标（笔）。

1. 选择**测试**图标（纸飞机）。

1. 选择是发送预定义的测试通知，还是通过选择**自定义**，在测试通知中添加您自己的自定义注释和标签。

1. 选择**发送测试通知**，使用给定的联系点测试警报。

您可以删除通知策略不使用的联系点。

**删除联系点**

1. 选择**联系点**，以打开现有联系点列表。

1. 选择要删除的联系点，然后选择**删除**图标（垃圾桶）。

1. 在确认对话框中，选择**是，删除**。

**注意**  
如果通知策略正在使用该联系点，则必须先删除通知策略，或对其进行编辑以使用不同的联系点，然后再删除该联系点。

## 支持的通知程序列表
<a name="v9-alerting-contactpoint-supported-notifiers"></a>


|  Name  |  Type  | 
| --- | --- | 
| Amazon SNS  |  sns  | 
|  OpsGenie  |  opsgenie  | 
| Pager Duty  |  pagerduty  | 
| Slack  |  slack  | 
|  VictorOps  |  victorops  | 

# 使用通知策略
<a name="v9-alerting-notification-policies"></a>

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

通知策略决定如何将警报路由到联系点。策略具有树形结构，其中每个策略都可以有一个或多个子策略。除了根策略外，每个策略还可以匹配特定的警报标签。每个警报先由根策略进行评估，然后由每个子策略进行评估。如果为特定策略启用了 `Continue matching subsequent sibling nodes` 选项，则即使有一个或多个匹配项，评估仍会继续。父策略的配置设置和联系点信息控制着与任何子策略都不匹配的警报的行为。根策略将管理所有与特定策略不匹配的警报。

**注意**  
您可以为 Grafana 托管的警报创建和编辑通知策略。Alertmanager 警报的通知策略是只读的。

**对通知进行分组**

分组将性质相似的警报通知归类到单个漏斗中。这样一来，当系统的许多部分同时发生故障，导致大量警报同时启动时，您就可以在大规模故障期间控制警报通知。

**分组示例**

假设有 100 个服务在不同的环境中连接到一个数据库。这些服务由标签 `env=environmentname` 区分。已设置警报规则，用于监控您的服务是否可以访问数据库。警报规则会创建名为 `alertname=DatabaseUnreachable` 的警报。

如果发生网络分区，有一半的服务无法再访问数据库，则会启动 50 个不同的警报。对于这种情况，您会希望收到列出受影响环境的单页通知（而不是 50 页）。

您可以将分组配置为 `group_by: [alertname]`（不使用 `env` 标签，该标签对于每个服务都不同）。完成此配置后，Grafana 会发送一条简要的通知，其中包含此警报规则的所有受影响环境。

**特殊组**

Grafana 有两个特殊组。默认组 `group_by: null` 会将*所有*警报分组中到一个组中。您也可以使用名为 `...` 的特殊标签，按所有标签对警报进行分组，从而有效地禁用分组，并将每个警报发送到其自己的组中。

## 使用通知
<a name="v9-alerting-notification-policies-working"></a>

以下过程演示了如何创建和管理通知策略。

**编辑根通知策略**

1. 在 Grafana 控制台的 Grafana 菜单中，选择**警报**（铃铛）图标，打开**警报**页面。

1. 选择**通知策略**。

1. 从 **Alertmanager** 下拉列表中，选择要编辑的 Alertmanager。

1. 在**根策略**部分，选择**编辑**图标（笔）。

1. 在**默认联系点**中，更新当警报规则与任何特定策略都不匹配时，应向其发送规则通知的联系点。

1. 在**分组依据**中，选择用于对警报进行分组的标签（或特殊组）。

1. 在**定时选项**中，选择以下选项。
   + **组等待**：在发送初始通知前，缓冲同一组警报的等待时间。默认值为 30 秒。
   + **组间隔**：一个组的两次通知之间的最短时间间隔。默认值为 5 分钟。
   + **重复间隔**：如果组内未添加新警报，在重新发送通知之前的最短时间间隔。默认为 4 小时。

1. 选择 **保存** 以保存您的更改。

**添加新的顶级特定策略**

1. 在 Grafana 控制台的 Grafana 菜单中，选择**警报**（铃铛）图标，打开**警报**页面。

1. 选择**通知策略**。

1. 从 **Alertmanager** 下拉列表中，选择要编辑的 Alertmanager。

1. 在**特定路由**部分，选择**新建特定策略**。

1. 在**匹配标签**部分，添加一个或多个匹配的警报标签。有关标签匹配的更多信息，请参阅本主题的后半部分。

1. 在**联系点**中，添加当警报与此特定策略匹配时，要向其发送通知的联系点。嵌套策略会覆盖此联系点。

1. （可选）启用**继续匹配后续同级节点**以继续匹配同级策略，即使警报与当前策略匹配后也是如此。启用此策略后，您可以收到关于同一警报的多个通知。

1. 可以选择**覆盖分组**，指定与根策略不同的分组。

1. 可以选择**覆盖一般定时**，以覆盖组通知策略中的定时选项。

1. 选择**保存策略**以保存您的更改。

**要添加嵌套策略**

1. 展开要在其下创建嵌套策略的特定策略。

1. 选择**添加嵌套策略**，然后添加详细信息（就和添加顶级特定策略时一样）。

1. 选择**保存策略**以保存您的更改。

**编辑特定策略**

1. 在**警报**页面，选择**通知策略**，打开列出现有策略的页面。

1. 选择要编辑的策略，然后选择**编辑**图标（笔）。

1. 进行任何更改（和添加顶级特定策略时一样）。

1. 选择**保存策略**。

**搜索策略**

您可以按*标签匹配程序*或*联系点*在策略树中进行搜索。
+ 要按联系点搜索，请在**按联系点搜索**字段中输入联系点的部分或全部名称。
+ 要按标签搜索，请在**按标签搜索**字段中输入有效的标签匹配程序。您可以输入多个匹配程序，以逗号分隔。例如，有效的匹配程序输入为 `severity=high, region=~EMEA|NA`。
**注意**  
按标签搜索时，所有匹配的策略都将完全匹配。不支持部分匹配和正则表达式匹配。

**标签匹配的工作原理**

如果警报的标签与策略中指定的所有*匹配标签*相匹配，则策略与警报相匹配。
+ **标签**：要匹配的标签名称。必须与警报的标签名称完全匹配。
+ **运算符**：用于将标签值与匹配标签值进行比较的运算符。可用的运算符有：
  + `=` 选择其值与提供的字符串完全匹配的标签。
  + `!=` 选择其值与提供的字符串不匹配的标签。
  + `=~` 选择其值与所提供字符串的正则表达式解释值相匹配的标签（提供的字符串被解释为正则表达式）。
  + `!=` 选择与提供的正则表达式不匹配的标签。
+ **值**：要与标签值匹配的值。可作为字符串或正则表达式进行匹配，具体取决于所选的运算符。

# 自定义通知
<a name="v9-alerting-notifications"></a>

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

使用通知模板自定义通知。

您可以使用通知模板来更改通知中消息的标题、内容和格式。

通知模板不与电子邮件或 Slack 等特定联系点集成绑定。但您可以选择为不同的联系点集成创建单独的通知模板。

您可以使用通知模板：
+ 在通知中添加、移除或重新排序信息，包括摘要、描述、标签和注释、值和链接
+ 为文本设置粗体和斜体格式，添加或移除换行符

您不能使用通知模板：
+ 更改 Slack 和 Microsoft Teams 等即时消息服务中的通知设计

**Topics**
+ [使用 Go 的模板语言](v9-alerting-notifications-go-templating.md)
+ [创建通知模板](v9-alerting-create-templates.md)
+ [模板参考](v9-alerting-template-reference.md)

# 使用 Go 的模板语言
<a name="v9-alerting-notifications-go-templating"></a>

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

您可以使用 Go 的模板语言 [text/template](https://pkg.go.dev/text/template) 编写通知模板。

本节概述了 Go 的模板语言以及如何用 text/template 编写模板。

## dot
<a name="v9-go-dot"></a>

里面 text/template 有一个叫做 dot 的特殊光标，写成`.`了。您可以将此光标看作一个变量，其值会根据在模板中使用的位置而变化。例如，在通知模板 `.` 的开头引用 `ExtendedData` 对象，该对象包含多个字段，例如包括 `Alerts`、`Status`、`GroupLabels`、`CommonLabels`、`CommonAnnotations` 和 `ExternalURL`。但是，当在列表上的 `range` 中使用、在 `with` 中使用或编写要在其他模板中使用的功能模板时，dot 可能引用其他内容。您可以在 [创建通知模板](v9-alerting-create-templates.md) 中看到相关示例，在 [模板参考](v9-alerting-template-reference.md) 中看到所有数据和函数。

## 开始和结束标签
<a name="v9-go-openclosetags"></a>

在 text/template 中，模板以 `{{` 开头，以 `}}` 结尾，无论模板是打印变量还是运行 if 语句等控制结构。这与 Jinja 等其他模板语言不同，在 Jinja 中，打印变量使用 `{{` 和 `}}`，控制结构使用 `{%` 和 `%}`。

## Print（打印）
<a name="v9-go-print"></a>

要打印某项的值，请使用 `{{` 和 `}}`。您可以打印 dot 的值、dot 的字段、函数的结果和[变量](#v9-go-variables)的值。例如，要打印 `Alerts` 字段，其中 dot 引用 `ExtendedData`，您可以编写以下内容：

```
{{ .Alerts }}
```

## 迭代警报
<a name="v9-go-iterate-alerts"></a>

要仅打印每个警报的标签，而不是有关警报的所有信息，可使用 `range` 在 `ExtendedData` 中迭代警报：

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

范围内的 dot 不再引用 `ExtendedData`，而是引用 `Alert`。您可以使用 `{{ .Labels }}` 打印每个警报的标签。之所以有效，是因为 `{{ range .Alerts }}` 会更改 dot，以引用警报列表中的当前警报。范围完成后，dot 将重置为范围开始之前的值，在本例中为 `ExtendedData`：

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

## 迭代注释和标签
<a name="v9-go-iterate-labels"></a>

我们编写一个模板，以 `The name of the label is $name, and the value is $value` 格式打印每个警报的标签，其中 `$name` 和 `$value` 包含每个标签的名称和值。

与前面的示例一样，使用一个范围迭代 `.Alerts` 中的警报，使 dot 引用警报列表中的当前警报，然后在排序标签上使用第二个范围，使 dot 第二次更新以引用当前标签。在第二个范围内，使用 `.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 }}
```

## If 语句
<a name="v9-go-if"></a>

可在模板中使用 if 语句。例如，要在 `.Alerts` 中没有警报的情况下打印 `There are no alerts`，您可以编写以下内容：

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

## With
<a name="v9-go-with"></a>

With 与 if 语句类似，但又有所不同，`with` 会更新 dot 以引用 with 的值：

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

## 变量
<a name="v9-go-variables"></a>

中的变量 text/template 必须在模板中创建。例如，要使用 dot 的当前值创建一个名为 `$variable` 的变量，您可以编写以下内容：

```
{{ $variable := . }}
```

您可以在范围或 `with` 内使用 `$variable`，以引用定义变量时的 dot 值，而不是当前 dot 的值。

例如，您不能编写在第二个范围中使用 `{{ .Labels }}` 的模板，因为这里的 dot 引用的是当前标签，而不是当前警报：

```
{{ 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 }}
```

您可以在第一个范围内和第二个范围之前定义一个名为 `$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 }}
```

## 带索引的范围
<a name="v9-go-rangeindex"></a>

您可以在范围的开头定义 index 和 value 变量来获取范围内每个警报的索引：

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

## 定义模板
<a name="v9-go-define"></a>

您可以使用 `define` 和双引号中的模板名称来定义可在其他模板中使用的模板。定义的模板不能与其他模板同名，包括 `__subject`、`__text_values_list`、`__text_alert_list`、`default.title` 和 `default.message` 等默认模板。如果创建的模板与默认模板或其他通知模板中的模板同名，Grafana 可能会使用其中任何一个模板。当存在两个或多个同名模板时，Grafana 不会阻止或显示错误消息。

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

## 嵌入模板
<a name="v9-go-embed"></a>

您可以使用 `template`、双引号中的模板名称以及应传递给模板的光标在模板中嵌入定义的模板：

```
{{ template "print_labels" . }}
```

## 将数据传递给模板
<a name="v9-go-passdata"></a>

在模板中，dot 将引用传递给模板的值。

例如，如果向模板传递了触发警报列表，则 dot 引用该触发警报列表：

```
{{ template "print_alerts" .Alerts }}
```

如果模板传递了警报的排序标签，则 dot 引用已排序标签的列表：

```
{{ 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 }}
```

## 评论
<a name="v9-go-comments"></a>

您可以使用 `{{/*` 和 `*/}}` 添加注释：

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

要防止注释添加换行符，请使用：

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

## 缩进
<a name="v9-go-indentation"></a>

您可以使用缩进、制表符和空格以及换行符，来提高模板的可读性：

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

但模板中的缩进也将出现在文本中。接下来，我们看如何将其移除。

## 移除空格和换行符
<a name="v9-go-removespace"></a>

正在 text/template 使用`{{-``-}}`并删除前导和尾随空格以及换行符。

例如，使用缩进和换行符来提高模板的可读性：

```
{{ 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"
```

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

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

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

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

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

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

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

**创建通知模板**

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. 输入整个通知模板的名称。例如 `email`。

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

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

1. 点击保存。

## 为电子邮件主题创建模板
<a name="v9-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="v9-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="v9-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` 关键字的**标题**字段中。

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

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

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

```
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` 关键字的**正文**字段中。

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

## 使用共享模板对电子邮件和 Slack 进行模板化
<a name="v9-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" . }}
   ```

## 使用通知模板
<a name="v9-alerting-use-notification-templates"></a>

使用联系点中的模板来自定义通知。

**在创建联系点时使用模板**

1. 从**警报**菜单中，选择**联系点**，以查看现有联系点列表。

1. 选择**添加联系点**。或者，您可以选择要编辑的联系点旁边的**编辑**图标（笔）来编辑现有联系点。

1. 在一个或多个字段（如**消息**或**主题**）中输入要使用的模板。要输入模板，请使用表单`{{ template "template_name" . }}`，*template\$1name*替换为要使用的模板的名称。

1. 单击**保存联系点**。

# 模板参考
<a name="v9-alerting-template-reference"></a>

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

本节提供了创建模板的参考信息。

## 模板数据
<a name="v9-alerting-template-data"></a>

以下数据将传递给消息模板。


| Name | Type | 注意 | 
| --- | --- | --- | 
|  `Receiver`  |  字符串  |  要向其发送通知的联系点的名称。  | 
|  `Status`  |  字符串  |  如果至少有一个警报已触发，则为“触发”，否则为“已解决”。  | 
|  `Alerts`  |  警报  |  此通知中包含的警报对象列表（见下文）。  | 
|  `GroupLabels`  |  KeyValue  |  这些警报的分组标签。  | 
|  `CommonLabels`  |  KeyValue  |  此通知中包含的所有警报的通用标签。  | 
|  `CommonAnnotations`  |  KeyValue  |  此通知中包含的所有警报的通用注释。  | 
|  `ExternalURL`  |  字符串  |  指向发送通知的 Grafana 的返回链接。如果使用外部 Alertmanager，则是指向此 Alertmanager 的返回链接。  | 

`Alerts` 类型公开了两个函数，用于筛选返回的警报。
+ `Alerts.Firing`：返回已触发警报的列表。
+ `Alerts.Resolved`：返回已解决警报的列表。

**警报（类型）**

警报类型包含以下数据。


| Name | Type | 注意 | 
| --- | --- | --- | 
|  Status  |  字符串  |  `firing` 或 `resolved`。  | 
|  标签  |  KeyValue  |  附加到警报的一组标签。  | 
|  Annotations  |  KeyValue  |  附加到警报的一组注释。  | 
| 值 | KeyValue | 所有表达式的值，包括经典条件 | 
|  StartsAt  |  time.Time  |  警报开始触发的时间。  | 
|  EndsAt  |  time.Time  |  仅在知道警报结束时间时设置。否则，设置为从收到最后一次警报的时间起算的可配置的超时周期。  | 
|  GeneratorURL  |  字符串  |  指向 Grafana 或外部 Alertmanager 的返回链接。  | 
|  SilenceURL  |  字符串  |  指向静默警报的链接（其中预填了此警报的标签）。仅适用于 Grafana 管理的警报。  | 
|  DashboardURL  |  字符串  |  指向 Grafana 控制面板的链接（适用于警报规则属于 Grafana 控制面板的情况）。仅适用于 Grafana 管理的警报。  | 
|  PanelURL  |  字符串  |  指向 Grafana 控制面板中面板的链接（适用于警报规则属于 Grafana 控制面板中面板的情况）。仅适用于 Grafana 管理的警报。  | 
|  指纹  |  字符串  |  可用于识别警报的指纹。  | 
|  ValueString  |  字符串  |  该字符串包含警报中每个简化表达式的标签和值。  | 

 **ExtendedData**

该 ExtendedData 对象包含以下属性。


| Name | 类型 | 说明 | 示例 | 
| --- | --- | --- | --- | 
|  接收方  |  `string`  |  发送通知的联系点名称。  |  `{{ .Receiver }}`  | 
|  Status  |  `string`  |  状态为 `firing if at least one alert is firing, otherwise resolved.`。  |  `{{ .Status }}`  | 
|  警报  |  `[]Alert`  |  此通知中所有触发警报和已解决警报的列表。  |  `There are {{ len .Alerts }} alerts`  | 
|  触发警报  |  `[]Alert`  |  此通知中所有触发警报的列表。  |  `There are {{ len .Alerts.Firing }} firing alerts`  | 
|  已解决警报  |  `[]Alert`  |  此通知中所有已解决警报的列表。  |  `There are {{ len .Alerts.Resolved }} resolved alerts`  | 
|  GroupLabels  |  `KeyValue`  |  此通知中对这些警报进行分组的标签。  |  `{{ .GroupLabels }}`  | 
|  CommonLabels  |  `KeyValue`  |  此通知中所有警报的通用标签。  |  `{{ .CommonLabels }}`  | 
|  CommonAnnotations  |  `KeyValue`  |  此通知中所有警报的通用注释。  |  `{{ .CommonAnnotations }}`  | 
|  ExternalURL  |  `string`  |  指向发送此通知的 Grafana 工作区或 Alertmanager 的链接。  |  `{{ .ExternalURL }}`  | 

**KeyValue type**

`KeyValue`类型是一组表示标签和注释的 key/value 字符串对。

除了直接访问存储为 `KeyValue` 的数据外，还有方法可以对这些数据进行排序、删除和转换。


| Name | 参数 | 返回值 | 注意 | 示例 | 
| --- | --- | --- | --- | --- | 
|  SortedPairs  |    |  键值字符串对的排序列表  |    | `{{ .Annotations.SortedPairs }}` | 
|  删除  |  []string  |  KeyValue  |  返回不带给定键 Key/Value 的地图副本。  | `{{ .Annotations.Remove "summary" }}` | 
|  名称  |    |  []string  |  标签名称列表  | `{{ .Names }}` | 
|  值  |    |  []string  |  标签值列表  | `{{ .Values }}` | 

**时间**

时间来自 Go [https://pkg.go.dev/time#Time](https://pkg.go.dev/time#Time) 包。您可以用多种不同的格式打印时间。例如，要以 `Monday, 1st January 2022 at 10:00AM` 格式打印警报触发的时间，请编写以下模板：

```
{{ .StartsAt.Format "Monday, 2 January 2006 at 3:04PM" }}
```

您可以在[此处](https://pkg.go.dev/time#pkg-constants)找到 Go 的时间格式参考。

## 模板函数
<a name="v9-alerting-template-functions"></a>

使用模板函数，您可以处理标签和注释，以生成动态通知。可使用以下函数。


| Name | 参数类型 | 返回类型 | 说明 | 
| --- | --- | --- | --- | 
|  `humanize`  |  数字或字符串  |  字符串  |  使用公制前缀将数字转换为更易读的格式。  | 
|  `humanize1024`  |  数字或字符串  |  字符串  |  与 humanize 类似，但使用 1024 作为基数，而不是 1000。  | 
|  `humanizeDuration`  |  数字或字符串  |  字符串  |  将以秒为单位的持续时间转换为更易读的格式。  | 
|  `humanizePercentage`  |  数字或字符串  |  字符串  |  将比率值转换为百分比。  | 
|  `humanizeTimestamp`  |  数字或字符串  |  字符串  |  将以秒为单位的 Unix 时间戳转换为更易读的格式。  | 
|  `title`  |  字符串  |  字符串  |  strings.Title，将每个单词的第一个字符大写。  | 
|  `toUpper`  |  字符串  |  字符串  |  字符串。 ToUpper，将所有字符转换为大写。  | 
|  `toLower`  |  字符串  |  字符串  |  字符串。 ToLower，将所有字符转换为小写。  | 
|  `match`  |  模式、文本  |  布尔值  |  regexp。 MatchString 测试未锚定的 regexp 匹配项。  | 
|  `reReplaceAll`  |  模式、置换、文本  |  字符串  |  Regexp。 ReplaceAllString 正则表达式替换，未锚定。  | 
|  `graphLink`  |  字符串：包含 `expr` 和 `datasource` 字段的 JSON 对象  |  字符串  |  返回给定表达式和数据来源在 Explore 中图形视图的路径。  | 
|  `tableLink`  |  字符串：包含 `expr` 和 `datasource` 字段的 JSON 对象  |  字符串  |  返回给定表达式和数据来源在 Explore 中表格视图的路径。  | 
|  `args`  |  []interface\$1\$1  |  map[string]interface\$1\$1  |  将对象列表转换为带键的映射，例如 arg0、arg1。使用此函数可将多个参数传递给模板。  | 
|  `externalURL`  |  nothing  |  字符串  |  返回代表外部 URL 的字符串。  | 
|  `pathPrefix`  |  nothing  |  字符串  |  返回外部 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  |  14m 59s  | 
|  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  | 
|  删除实例快照  |  \$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  |  true  | 
|  reReplaceAll  |  \$1\$1 reReplaceAll “localhost :( .\$1)” “我的.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  | 

# 静默 Prometheus 数据来源的警报通知
<a name="v9-alerting-silences"></a>

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

对于外部警报管理器数据来源（包括 Amazon Managed Service for Prometheus），您可以通过*静默*来抑制警报通知。静默只会阻止创建通知：静默不会阻止评估警报规则，也不会阻止警报实例显示在用户界面中。当警报静默时，您可以指定抑制警报的时间范围。

您可以为外部 Alertmanager 数据来源配置静默。

**注意**  
要按固定的时间间隔或针对其他数据来源（例如，定期维护期间）抑制警报通知，请使用 [静音定时](v9-alerting-notification-muting.md) 而不是静默。

**添加静默**

1. 在 Grafana 控制台的 Grafana 菜单中，选择**警报**（铃铛）图标，打开**警报**页面。

1. 选择**静默**以打开列出现有 [使用联系点](v9-alerting-contact-points.md) 的页面。

1. 从 **Alertmanager** 下拉列表中选择外部 Alertmanager。

1. 选择**添加静默**。

1. 在**静默开始和结束**中选择开始和结束日期，以指示静默应何时生效和结束。

   除了设置结束时间之外，还可以在**持续时间**中指定强制静默的时长。这会自动更新**静默开始和结束**字段中的结束时间。

1. 在**名称**和**值**字段中，输入一个或多个*匹配标签*。匹配程序决定静默适用于哪些规则。在此过程之后，我们将详细介绍标签匹配。

1. （可选）添加**注释**，或修改**创建者**以设置静默的所有者。

1. 选择**创建**以创建静默。

您可以选择**编辑**图标（钢笔）来编辑现有静默。

**警报抑制的标签匹配**

创建静默时，可以创建一组*匹配标签*作为静默的一部分。这是一组关于标签的规则，标签必须匹配才能抑制警报。匹配标签由三部分组成：
+ **标签**：要匹配的标签名称。必须与警报的标签名称完全匹配。
+ **运算符**：用于将标签值与匹配标签值进行比较的运算符。可用的运算符有：
  + `=` 选择其值与提供的字符串完全匹配的标签。
  + `!=` 选择其值与提供的字符串不匹配的标签。
  + `=~` 选择其值与所提供字符串的正则表达式解释值相匹配的标签（提供的字符串被解释为正则表达式）。
  + `!=` 选择与提供的正则表达式不匹配的标签。
+ **值**：要与标签值匹配的值。可作为字符串或正则表达式进行匹配，具体取决于所选的运算符。

静默将在指定的结束日期结束，但您可以随时手动结束抑制。

**手动结束静默**

1. 在**警报**页面中，选择**静默**以查看现有静默列表。

1. 选择要结束的静默，然后选择**取消静默**。这将结束警报抑制。
**注意**  
取消静默会结束警报抑制，就像为当前时间设置的结束时间一样。已结束（自动或手动）的静默会保留并列出五天。您无法从列表中手动删除静默。

**创建指向静默创建表单的链接**

您可以创建一个指向静默创建表单的 URL，其中已填写详细信息。操作员可使用此表单在操作事件期间快速抑制警报。

创建指向静默表单的链接时，使用 `matchers` 查询参数来指定匹配的标签，使用 `comment` 查询参数来指定注释。`matchers` 参数需要使用表单中的一个或多个 `[label][operator][value]` 值（以逗号分隔）。

**示例 URL**

要链接到带有匹配标签 `severity=critical` 和 `cluster!~europe-.*` 以及注释 `Silencing critical EU alerts` 的静默表单，请使用如下 URL。*mygrafana*替换为您的 Grafana 实例的主机名。

```
https://mygrafana/alerting/silence/new?matchers=severity%3Dcritical%2Ccluster!~europe-*&comment=Silence%20critical%20EU%20alert
```

要链接到外部 Alertmanager 的新静默页面，请添加带有 Alertmanager 数据来源名称的 `alertmanager` 查询参数，比如 `alertmanager=myAlertmanagerdatasource`。

# 静音定时
<a name="v9-alerting-notification-muting"></a>

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

静音定时是一个重复的时间间隔，在此期间，不会针对某个策略生成或发送新的通知。使用静音定时可防止警报在特定的重复时间段（如定期维护时间段）内触发。

与静默类似，静音定时不会阻止对警报规则进行评估，也不会阻止警报实例显示在用户界面中。只会阻止创建通知。

您可以配置 Grafana 管理的静音定时，以及外部 Alertmanager 数据来源的静音定时。

**静音定时与静默的对比**

下表重点说明了静音定时与静默之间的区别。


| 静音定时 | 静默 | 
| --- | --- | 
|  使用可重复发生的时间间隔定义。  |  有固定的开始时间和结束时间。  | 
|  创建后添加到通知策略中。  |  使用标签与警报进行匹配，以确定是否静默。  | 
|  可与 Grafana Alerting 和外部 Alertmanager 配合使用。  |  仅适用于外部 Alertmanager。  | 

**创建静音定时**

1. 在 Grafana 控制台的 Grafana 菜单中，选择**警报**（铃铛）图标，打开**警报**页面。

1. 选择**通知策略**。

1. 从 **Alertmanager** 下拉列表中，选择要编辑的 Alertmanager。

1. 在**静音定时**部分，选择**添加静音定时**按钮。

1. 选择要应用静音定时的时间间隔。

1. 选择**提交**，以创建静音定时。

**向通知策略添加静音定时**

1. 选择要向其添加静音定时的通知策略，然后选择**编辑**按钮。

1. 从**静音定时**下拉列表中，选择要添加到策略中的静音定时。

   选择**保存策略**按钮。

**时间间隔**

时间间隔是对时间范围的定义。如果警报在此时间间隔中启动，该警报将被抑制。使用 `:` 可支持范围（例如 `monday:thursday`）。静音定时可以包含多个时间间隔。时间间隔由多个字段组成（详细信息见下表），所有字段都必须匹配才能抑制警报。例如，如果指定一周中的天数为 `monday:friday`，时间范围为 8:00 到 9:00，则星期一至星期五的 8 到 9 点会抑制警报，但星期六的 8 到 9 点不会。
+ **时间范围**：一天中抑制通知的时间。包含**开始时间**和**结束时间**两个子字段。以时间 `14:30` 为例。时间以 24 小时制表示，采用 UTC 时区。
+ **星期几**：一周中的哪几天。可以是单日（例如 `monday`）、范围（例如 `monday:friday`），也可以是逗号分隔的多日列表（例如 `monday, tuesday, wednesday`）。
+ **月份**：要选择的月份。您可以用数字指定月份，也可以用完整的月份名称指定月份，例如 `1` 或 `january` 都是指定 1 月。您可以指定单个月份、月份范围，或以逗号分隔的月份列表。
+ **月中日期**：一个月中的哪几天。值范围为 `1` 到 `31`。负值可按相反顺序指定月中日期，因此 `-1` 代表月中最后一天。可以将月中日期指定为单日、日期范围，或用逗号分隔的多日列表。
+ **年份**：间隔的年份。例如 `2023:2025`。

这些元素中的每一个都可以是一个列表，并且必须满足元素中的至少一项才能匹配。因此，如果将年份设置为 `2023:2025, 2027`，那么 2023 年、2024 年、2025 年和 2027 年（2026 年除外）都满足条件。

如果字段留空，则任何时刻都将与该字段匹配。时刻必须与所有字段匹配，才能匹配完整的时间间隔。

如果要指定确切的持续时间，请指定该持续时间所需的所有选项。例如，如果您想为当月第一个星期一（3 月、6 月、9 月和 12 月）创建一个介于 12:00 和 24:00 UTC 之间的时间间隔，则您的时间间隔规范可以是：
+ 时间范围：
  + 开始时间：`12:00`
  + 结束时间：`24:00`
+ 星期几：`monday`
+ 月份：`3, 6, 9, 12`
+ 月中日期：`1:7`

# 按警报组查看和筛选
<a name="v9-alerting-viewfiltergroups"></a>

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

警报组显示来自 Alertmanager 实例的分组警报。默认情况下，警报规则按通知策略中根策略的标签键进行分组。将常见警报规则分组到一个警报组中可以防止触发重复的警报规则。

您可以查看警报组，也可以筛选符合特定条件的警报规则。

**查看警报分组**

1. 在 Grafana 菜单中，单击**警报**（铃铛）图标以打开列出现有警报的“警报”页面。

1. 单击**警报组**，打开列出现有组的页面。

1. 从 **Alertmanager** 下拉菜单中，选择外部 Alertmanager 作为数据来源。

1. 从**自定义分组依据**下拉菜单中，选择标签组合，以查看默认分组以外的分组。这对于调试和验证通知策略分组非常有用。

如果警报不包含根策略分组或自定义分组中指定的标签，则会将警报添加到标题为 `No grouping` 的全包分组中。

**按标签筛选**
+ 在**搜索**中，输入现有标签，以查看与该标签匹配的警报。

  例如 `environment=production,region=~US|EU,severity!=warning`。

**按状态筛选**
+ 在**状态**中，从“活动”、“已抑制”或“未处理”状态中选择，以查看与所选状态匹配的警报。所有其他警报均已隐藏。

# 查看通知错误
<a name="v9-alerting-viewnotificationerrors"></a>

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

查看通知错误，了解发送失败或未收到通知的原因。

**注意**  
只有 Grafana Alertmanager 支持此功能。

**查看通知错误**

1. 在 Grafana 菜单中，单击**警报**（铃铛）图标以打开列出现有警报的“警报”页面。

1. 选择**联系点**，以查看现有联系点列表。

   如果有任何联系点出现故障，屏幕右上角会显示一条消息，提醒用户注意存在错误以及错误数。

1. 单击某个联系点，查看该联系点的错误详情。

   如果将鼠标悬停在错误图标上，则会显示错误详情。

   如果联系点有多个集成，您会看到列出的每个集成的所有错误。

1. 在“运行状况”列中，检查通知的状态。

   可能是“正常”、“未尝试”或“错误”。