

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

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

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

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

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

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


| 关键概念或功能 | 定义 | 
| --- | --- | 
| 警报的数据来源 | 选择数据来源，从中查询指标、日志和跟踪，并以可视化方式展示。 | 
| 调度器 | 评估您的警报规则；该组件定期运行对数据来源的查询。它仅适用于 Grafana-managed 规则。 | 
| Alertmanager | 管理警报实例的路由和分组。 | 
| 警报规则 | 用于确定警报规则何时触发的一组评估标准。警报规则包含一个或多个查询和表达式、一个条件、评估频率，以及满足条件的持续时间。一条警报规则可以生成多个警报实例。 | 
| 警报实例 | 警报实例是警报规则的实例。单维警报规则有一个警报实例。多维警报规则有一个或多个警报实例。一条匹配多个结果的警报规则（例如针对 10 台虚拟机的 CPU 警报）会被计为多个警报实例（在这个例子中是 10 个）。这个数字可能会随时间变化。例如，对于监控系统中所有虚拟机 CPU 使用情况的警报规则，会随着虚拟机的添加而拥有更多警报实例。有关警报实例配额的更多信息，请参阅 [达到配额错误](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 | 
| --- | --- | 
| {Host=web1,disk=/etc} | 警报 | 
| {Host=web2,disk=/var} | 警报 | 
| {Host=web3,disk=/var} | 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**— 规则评估期间返回的至少一个时间序列中缺少数据。