

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

# 创建 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 作为标签。  | 