本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
基于数值数据的警报
本文档主题专为支持 Grafana 10.x 版本的 Grafana 工作区而设计。
对于支持 Grafana 9.x 版本的 Grafana 工作区,请参阅 使用 Grafana 版本 9。
对于支持 Grafana 8.x 版本的 Grafana 工作区,请参阅 使用 Grafana 版本 8。
本主题将介绍 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 |
---|---|
{Host=web1,disk=/etc} |
提示 |
{Host=web2,disk=/var} |
提示 |
{Host=web3,disk=/var} |
正常 |