

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

# Grafana Alerting
<a name="alerts-overview"></a>

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

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

Amazon Managed Grafana 允许访问更新的警报系统 *Grafana Alerting*，该系统将警报信息集中在一个可搜索的视图中。包括以下功能：
+ 在集中视图中创建和管理 Grafana 警报。
+ 通过单一界面创建和管理 Cortex 和 Loki 管理的警报。有关更多信息，请参阅 [管理警报规则](v9-alerting-managerules.md)。
+ 查看来自 Prometheus、Amazon Managed Service for Prometheus 和其他 Alertmanager 兼容数据来源的警报信息。
+ 根据单条警报规则创建多个警报实例。有关更多信息，请参阅 [单维规则和多维规则](v9-alerting-managerules-grafana.md#v9-alerting-single-multi-rule)。
+ 使用 terraform 或预配置来管理您的警报资源。 APIs有关更多信息，请参阅 [预置 Grafana Alerting 资源](v9-alerting-setup-provision.md)。

对于现有的 Amazon Managed Grafana 工作区，默认为 [经典控制面板警报](old-alerts-overview.md)。要迁移到 Grafana Alerting，您必须参阅[迁移到 Grafana Alerting](alert-opt-in.md)。

要了解有关 Grafana Alerting 的更多信息，请参阅 [Grafana Alerting 中的新增功能](alerts-whats-new.md)。

Grafana Alerting 有四个关键组件：
+ [警报规则](alert-rules.md)：决定是否启动警报的评估标准。警报规则包含一个或多个查询和表达式、一个条件、评估频率，以及满足条件的持续时间（可选）。
+ [联系点](alert-contact-points.md)：满足警报规则条件时，发送通知的渠道。
+ [通知策略](alert-notifications.md)：用于确定通知频率的一组匹配和分组标准。
+ [静默](alert-silences.md)：用于将通知设置为静默状态的日期和匹配标准。

启用 Grafana Alerting 后，您可以：
+ [创建 Grafana 管理的警报规则](alert-rules.md#create-grafana-alert-rule)
+ [创建 Cortex 或 Loki 管理的警报规则](alert-rules.md#create-alert-rule)
+ [查看现有警报规则并管理其当前状态](alert-rules.md#manage-alert-rules)
+ [查看警报规则的状态和运行状况](alert-fundamentals.md#alerts-state)
+ [添加或编辑警报联系点](alert-contact-points.md#alert-working-contact-points)
+ [添加或编辑通知策略](alert-notifications.md#alert-notifications-working)
+ [添加或编辑静默](alert-silences.md)

## 限制
<a name="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**
+ [限制](#alert-limitations)
+ [Grafana Alerting 中的新增功能](alerts-whats-new.md)
+ [将经典控制面板警报迁移到 Grafana Alerting](alert-opt-in.md)
+ [警报基础知识](alert-fundamentals.md)
+ [创建和管理 Grafana Alerting规则](alert-rules.md)
+ [警报组](alert-groups.md)
+ [静默 Prometheus 数据来源的警报通知](alert-silences.md)
+ [使用联系点](alert-contact-points.md)
+ [使用消息传递模板](alert-message-templates.md)
+ [使用通知策略](alert-notifications.md)

# Grafana Alerting 中的新增功能
<a name="alerts-whats-new"></a>

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

与经典控制面板警报相比，Grafana Alerting 有多项增强。

## 创建多维警报
<a name="alerts-new-dimensional"></a>

现在，您可以创建单一的警报规则，并通过一条警报规则生成多个警报实例，提供对整个系统的可视性。例如，您可以创建一条规则，来监控一台主机上多个挂载点的磁盘使用情况。评估引擎会从单个查询返回多个时间序列，每个时间序列由其标签集标识。

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

## 在控制面板外部创建警报
<a name="alerts-new-not-dashboard"></a>

与经典控制面板警报不同，使用 Grafana Alerting，您可以创建查询和表达式，以独特的方式组合来自多个来源的数据。您仍然可以使用控制面板和面板的 ID，将控制面板和面板链接到警报规则，并快速对观察的系统进行故障排除。

由于统一警报不再与面板查询直接关联，因此通知邮件中不包含图像或查询值。您可以使用自定义通知模板来查看查询值。

## 创建 Loki 和 Cortex 警报规则
<a name="alerts-new-loki-cortex"></a>

在 Grafana Alerting 中，您可以使用与 Grafana 管理的警报相同的用户界面和 API 管理 Loki 和 Cortex 警报规则。

## 查看和搜索来自 Amazon Managed Service for Prometheus 和其他 Prometheus 兼容数据来源的警报
<a name="alerts-new-prometheus"></a>

Amazon Managed Service for Prometheus 和 Prometheus 兼容数据来源的警报现在会在警报界面中列出。您可以跨多个数据来源搜索标签，以快速查找相关警报。

## 警报状态 NoData 和错误的特殊警报
<a name="alerts-new-error"></a>

当警报规则的评估产生 `NoData` 或 `Error` 状态时，Grafana Alerting 会生成具有以下标签的特殊警报：
+ `alertname`，值为 `DatasourceNoData` 或 `DatasourceError`（取决于状态）。
+ `rulename`，包含特殊警报所属警报规则的名称。
+ `datasource_uid`，包含导致该状态的数据来源的 UID。
+ 原始规则的所有标签和注释。

您可以像处理常规警报一样处理这些警报，例如，添加静默，或路由到联系点。

**注意**  
如果规则使用多个数据来源，而其中一个或多个数据来源未返回任何数据，则将为导致警报状态的每个数据来源创建特殊警报。

# 将经典控制面板警报迁移到 Grafana Alerting
<a name="alert-opt-in"></a>

****  
本文档主题专为支持 **Grafana 8.x 版本**的 Grafana 工作区而设计。  
对于支持 Grafana 10.x 版本的 Grafana 工作区，请参阅[使用 Grafana 版本 10](using-grafana-v10.md)。  
对于支持 Grafana 9.x 版本的 Grafana 工作区，请参阅[使用 Grafana 版本 9](using-grafana-v9.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="alert-opt-in-migrating"></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="alert-migration-limitations"></a>
+ Grafana Alerting 系统可从所有可用的 Prometheus、Loki 和 Alertmanager 数据来源检索规则。但可能无法从其他受支持的数据来源获取警报规则。
+ 在 Grafana 警报和经典控制面板警报之间来回迁移可能会导致一个系统支持的功能丢失数据，而另一个则不会。
**注意**  
如果您迁移回经典控制面板警报，则在启用 Grafana Alerting 时对警报配置进行的所有更改都将丢失，包括创建的任何新警报规则。

# 警报基础知识
<a name="alert-fundamentals"></a>

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

此部分提供有关 Grafana Alerting 基础概念的信息。

## 警报概念
<a name="alert-fundamentals-terms"></a>

下表说明了 Grafana Alerting 的关键概念。


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

## 警报数据来源
<a name="alert-sources"></a>

Grafana 托管的警报会查询以下启用了警报的后端数据来源。
+ Grafana 内置的数据来源，或由其开发和维护的数据来源：`Alertmanager`、`Graphite`、`Prometheus`（包括 Amazon Managed Service for Prometheus）、`Loki`、`InfluxDB`、`Amazon OpenSearch Service`、`Google Cloud Monitoring`、`Amazon CloudWatch`、`Azure Monitor`、`MySQL`、`PostgreSQL`、`MSSQL`、`OpenTSDB`、`Oracle` 和 `Azure Monitor`。

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

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

### 表格数据
<a name="alert-tabular-data"></a>

此功能支持可查询表格数据的后端数据来源，包括 MySQL、Postgres、MSSQL 和 Oracle 等 SQL 数据来源。

在以下情况中，使用 Grafana 托管的警报或服务器端表达式进行的查询会被这些数据来源视为数值型查询：
+ 如果数据来源查询中的 `Format AS` 选项设置为 `Table`。
+ 如果从查询返回给 Grafana 的表响应只包括一个数值（例如，int、double 或 float）列和可选的附加字符串列。

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

### 示例
<a name="alert-tabular-example"></a>

如果您有一个名为 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  | 

## Alertmanager
<a name="alert-alertmanager"></a>

Grafana 内置了对 Prometheus Alertmanager 的支持。Alertmanager 可帮助分组和管理警报规则，在警报引擎之上添加一个编排功能层。默认情况下，Grafana 托管警报的通知由作为核心 Grafana 组件的嵌入式 Alertmanager 处理。您可以从 Alertmanager 下拉列表中选择 Grafana 选项，在 Grafana Alerting 用户界面上配置 Alertmanager 的联系点、通知策略和模板。

Grafana Alerting 支持外部 Alertmanager 配置（有关 Alertmanager 作为外部数据来源的更多信息，请参阅 [连接到 AlertManager 数据来源](data-source-alertmanager.md)）。添加外部 Alertmanager 时，Alertmanager 下拉列表会显示可用的外部 Alertmanager 数据来源列表。选择一个数据源，为独立的 Cortex 或 Loki 数据来源创建和管理警报。

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

警报规则的状态和运行状况可帮助您了解有关警报的几个关键状态指标。有三个关键组件：警报状态、警报规则状态和警报规则运行状况。尽管相关，但每个组件传达的信息略有不同。

**警报规则状态**
+ **正常**：评估引擎返回的时间序列均未处于 `Pending` 或 `Firing` 状态。
+ **待处理**：评估引擎返回的时间序列中至少有一个处于 `Pending` 状态。
+ **触发**：评估引擎返回的时间序列中至少有一个处于 `Firing` 状态。

**警报状态**
+ **正常**：对于评估引擎返回的每个时间序列，警报规则的条件均为 **false**。
+ **警报中**：对于评估引擎返回的至少一个时间序列，警报规则的条件为 **true**。如果设置了条件必须在持续时间内保持为 true 才会启动警报，则该持续时间已满足或已超过。
+ **待处理**：对于评估引擎返回的至少一个时间序列，警报规则的条件为 **true**。如果设置了条件必须在持续时间内保持为 true 才会启动警报，则该持续时间尚未达到。
+ **NoData**— 警报规则未返回时间序列，该时间序列的所有值均为空，或者时间序列的所有值均为零。
+ **错误**：尝试评估警报规则时出错。

**警报规则运行状况**
+ **正常**：评估警报规则时无错误。
+ **错误**：评估警报规则时出错。
+ **NoData**— 规则评估期间返回的至少一个时间序列中缺少数据。

# 创建和管理 Grafana Alerting规则
<a name="alert-rules"></a>

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

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

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

以下各节将介绍不同类型 Grafana 警报规则的创建和管理。

**Topics**
+ [创建 Cortex 或 Loki 管理的警报规则](#create-alert-rule)
+ [创建 Cortex 或 Loki 管理的记录规则](#create-alert-recording-rule)
+ [创建 Grafana 管理的警报规则](#create-grafana-alert-rule)
+ [警报规则的注释和标签](#alert-rule-labels)
+ [管理警报规则](#manage-alert-rules)
+ [Cortex 或 Loki 规则组和命名空间](#alert-rule-groups)

## 创建 Cortex 或 Loki 管理的警报规则
<a name="create-alert-rule"></a>

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

**注意**  
Cortex 是 Amazon Managed Service for Prometheus 和 Prometheus 数据来源使用的时间序列数据库。

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

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

**要添加 Cortex 或 Loki 管理的警报规则**

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

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

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

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

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

1. 在**步骤 3** 中，添加条件。

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

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

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

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

## 创建 Cortex 或 Loki 管理的记录规则
<a name="create-alert-recording-rule"></a>

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

**先决条件**

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

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

**要添加 Cortex 或 Loki 管理的记录规则**

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

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

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

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

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

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

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

## 创建 Grafana 管理的警报规则
<a name="create-grafana-alert-rule"></a>

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

**注意**  
在使用 Grafana Alerting 时创建 Grafana 管理的警报规则，会导致在匹配规则时发送多条通知。某些联系点提供商可能有可配置的选项，用于消除重复的通知。

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

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

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

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

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

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

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

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

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

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

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

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

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

**多维规则**

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

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

要根据单条规则创建多个实例，请使用 `Math`、`Reduce`、或 `Resample` 表达式来创建多维规则。例如，您可以：
+ 为每个查询添加 `Reduce` 表达式，将所选时间范围内的值聚合为一个值。（[使用数字数据的规则](alert-fundamentals.md#alert-numeric)不需要）。
+ 添加包含规则条件的 `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)。



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

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

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

### 达到配额错误
<a name="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="rule-no-data-error"></a>

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

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


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

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


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

## 警报规则的注释和标签
<a name="alert-rule-labels"></a>

注释和标签是与警报相关联的键值对，这些警报来源于警报规则、数据来源响应，以及警报规则评估的结果。它们可以直接用于警报通知，也可以在[模板](alert-message-templates.md)和[模板函数](alert-message-templates.md#alert-template-functions)中用于动态创建通知联系人。

**Annotations**

注释是提供警报附加信息的键值对。您可以使用以下注释：`description`、`summary`、`runbook_url`、`alertId`、`dashboardUid` 和 `panelId`。这些注释会显示在用户界面的规则和警报详细信息中，并可用于联系点消息模板。

**标签**

标签是包含警报信息的键值对。警报的标签集在整个警报评估和通知过程中生成和添加。其用途如下。
+ 警报的完整标签集可在 Grafana 警报中唯一标识该警报。
+ Alertmanager 使用标签将警报与[通知策略](alert-notifications.md)中的[静默](alert-silences.md)和[警报组](alert-groups.md)进行匹配。
+ 警报用户界面会显示由该规则的评估生成的每个警报实例的标签。
+ 联系点可以访问标签，以动态生成通知，其中包含与生成通知的警报相关的特定信息。
+ 标签可添加到[警报规则](#alert-rules)中。这些手动配置的标签能够使用模板函数并引用其他标签。在发生标签冲突时，在此处向警报规则添加的标签具有优先权。

展开注释和标签时，可以使用以下模板变量。


| Name | 说明 | 
| --- | --- | 
|  `$labels`  |  来自查询或条件的标签。例如，`{{ $labels.instance }}` 和 `{{ $labels.job }}`。当规则使用经典条件时，此变量不可用。  | 
|  `$values`  |  为该警报规则评估的所有归约表达式和数学表达式的值。例如，`{{ $values.A }}`、`{{ $values.A.Labels }}` 和 `{{ $values.A.Value }}`，其中 `A` 是表达式的 `refID`。当规则使用经典条件时，此变量不可用  | 
|  `$value`  |  警报实例的值字符串。例如 `[ var='A' labels={instance=foo} value=10 ]`。  | 

## 管理警报规则
<a name="manage-alert-rules"></a>



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

### 查看警报规则
<a name="manage-alerts-view"></a>

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

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

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

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

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

**组视图**

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

**状态视图**

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

**筛选警报规则**

您可以通过多种方式筛选**警报**页面上显示的警报规则。
+ 您可以选择**选择数据来源**，然后选择要筛选的数据来源，筛选显示查询特定数据来源的规则。
+ 您可以在**按标签搜索**中选择搜索条件，按标签筛选。一些示例条件包括 `environment=production`、`region=~US|EU`、`severity!=warning`。
+ 您可以选择**按状态筛选警报**，然后选择要查看的状态，筛选显示处于特定状态的规则。

### 编辑或删除警报规则
<a name="manage-alerts-edit"></a>

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

**编辑或删除规则**

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

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

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

## Cortex 或 Loki 规则组和命名空间
<a name="alert-rule-groups"></a>

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

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

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

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

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

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

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

# 警报组
<a name="alert-groups"></a>

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

警报组显示来自 Alertmanager 实例的分组警报。默认情况下，警报按 [使用通知策略](alert-notifications.md) 中根策略的标签键分组。将常见警报分组到一个警报组中，可以防止启动重复警报。

**要查看警报分组**

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

1. 从 **Alertmanager** 下拉列表中，选择外部 Alertmanager 作为数据来源。默认情况下，选择的是 `Grafana` Alertmanager。

1. 从**自定义分组依据**下拉列表中，选择标签组合，以查看默认分组以外的分组。您可以使用此视图调试或验证您的通知策略分组。

未在根策略分组或自定义分组中指定标签的警报将添加到标题为 `No grouping` 的组中。

**筛选警报**

您可以使用以下筛选器查看符合特定条件的警报：
+ **按标签搜索**：在**搜索**中，输入现有标签，以查看与该标签匹配的警报。例如 `environment=production`、`region=~US|EU`、`severity!=warning`。
+ **按状态筛选警报**：在**状态**中，从 `Active`、`Suppressed`、或 `Unprocessed` 状态中进行选择，以查看该状态下的警报。

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

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

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

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

**注意**  
要按固定的时间间隔（例如，在定期维护期间）抑制警报通知，请使用 [静音定时](alert-notifications.md#alert-notification-muting) 而不是静默。

**添加静默**

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

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

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

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="alert-contact-points"></a>

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

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

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

## 使用联系点
<a name="alert-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="alert-supported-notifiers"></a>


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

# 使用消息传递模板
<a name="alert-message-templates"></a>

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

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

大部分联系点字段都可以模板化，因此您可以创建可重复使用的自定义模板，并在多个联系点中使用它们。[模板数据](#alert-template-data) 主题列出了可用于创建模板的变量。

**使用模板**

模板用于创建消息。例如，通过 Slack 警报消息，您可以在联系点中设置标题和正文。以下示例展示了如何使用默认模板创建包含警报触发和解决计数的标题，以及列出警报及其状态的正文。
+ **标题**：

  ```
  {{ len .Alerts.Firing }} firing, {{ len .Alerts.Resolved }} resolved
  ```
+ **文本正文**：

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

您可以创建自己的自定义模板，如以下示例所示。
+ **标题**：

  ```
  {{ template "slack.default.title" .}}
  ```
+ **文本正文**：

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

以下是示例模板。

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

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

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

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

以下过程展示了如何创建、编辑和删除自定义消息模板。

**要创建消息模板**

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

1. 选择**联系点**。

1. 从 **Alertmanager** 下拉列表中，选择要为其创建消息模板的 Alertmanager 实例。默认为 Grafana Alertmanager。

1. 选择**添加模板**。

1. 添加描述性**名称**。

1. 为模板添加**内容**，例如：

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

   “内容”部分中的 `define` 标签用于指定模板名称。此标签是可选的，如果省略，模板名称将从**名称**字段派生。如果指定了两者，最好的做法是保持一致。

1. 选择**保存模板**。

**注意**  
警报消息模板中的 HTML 将渲染为文本，并转义控制字符。Grafana 不支持在生成的通知中渲染 HTML。

**编辑消息模板**

1. 在**警报**页面，选择**联系点**，以打开联系点列表。

1. 在**模板表**中，找到要编辑的模板，然后选择**编辑**图标（笔）。

1. 进行更改，然后选择**保存模板**。

**删除消息模板**

1. 在**警报**页面，选择**联系点**，以打开联系点列表。

1. 在**模板表**中，找到要移除的模板，然后选择**删除**图标（垃圾桶）。

1. 选择**是，删除**，以删除模板。

**嵌套模板**

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

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

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

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

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

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


| Name | 注意 | 
| --- | --- | 
|  `default.title`  |  显示概览状态信息。  | 
|  `default.message`  |  提供已触发和已解决警报的格式化摘要。  | 

**自定义模板示例**

以下是如何使用自定义模板的示例。

渲染单个警报的模板：

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

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

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

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

渲染整条通知消息的模板：

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

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

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


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

**KeyValue type**

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

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


| Name | 参数 | 返回值 | 注意 | 
| --- | --- | --- | --- | 
|  SortedPairs  |    |  键值字符串对的排序列表  |    | 
|  删除  |  []string  |  KeyValue  |  返回没有给定键 Key/Value 的地图副本。  | 
|  名称  |    |  []string  |  标签名称列表  | 
|  值  |    |  []string  |  标签值列表  | 



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

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


| Name | 参数类型 | 返回类型 | 说明 | 
| --- | --- | --- | --- | 
|  `humanize`  |  数字或字符串  |  字符串  |  使用公制前缀将数字转换为更易读的格式。  | 
|  `humanize1024`  |  数字或字符串  |  字符串  |  与 humanize 类似，但使用 1024 作为基数，而不是 1000。  | 
|  `humanizeDuration`  |  数字或字符串  |  字符串  |  将以秒为单位的持续时间转换为更易读的格式。  | 
|  `humanizePercentage`  |  数字或字符串  |  字符串  |  将比率值转换为百分比。  | 
|  `humanizeTimestamp`  |  数字或字符串  |  字符串  |  将以秒为单位的 Unix 时间戳转换为更易读的格式。  | 
|  `title`  |  字符串  |  字符串  |  strings.Title，将每个单词的第一个字符大写。  | 
|  `toUpper`  |  字符串  |  字符串  |  字符串。 ToUpper，将所有字符转换为大写。  | 
|  `toLower`  |  字符串  |  字符串  |  字符串。 ToLower，将所有字符转换为小写。  | 
|  `match`  |  模式、文本  |  布尔值  |  regexp。 MatchString 测试未锚定的正则表达式匹配。  | 
|  `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  | 

# 使用通知策略
<a name="alert-notifications"></a>

****  
本文档主题专为支持 **Grafana 8.x 版本**的 Grafana 工作区而设计。  
对于支持 Grafana 10.x 版本的 Grafana 工作区，请参阅[使用 Grafana 版本 10](using-grafana-v10.md)。  
对于支持 Grafana 9.x 版本的 Grafana 工作区，请参阅[使用 Grafana 版本 9](using-grafana-v9.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="alert-notifications-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. 选择**保存策略**。

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

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

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

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

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

您可以配置 Grafana 管理的静音定时，以及外部 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` 代表月中最后一天。可以将月中日期指定为单日、日期范围，或用逗号分隔的多日列表。