

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

# 基于数值数据的警报
<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  | 