创建和管理 Grafana Alerting 规则 - Amazon Managed Grafana

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

创建和管理 Grafana Alerting 规则

本文档主题专为支持 Grafana 8.x 版本的 Grafana 工作区而设计。

对于支持 Grafana 10.x 版本的 Grafana 工作区,请参阅 使用 Grafana 版本 10

对于支持 Grafana 9.x 版本的 Grafana 工作区,请参阅 使用 Grafana 版本 9

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

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

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

创建 Cortex 或 Loki 管理的警报规则

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

注意

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

先决条件

  • 验证您是否拥有 Prometheus 数据来源的写入权限。如果没有,您将无法创建或更新 Cortex 管理的警报规则。

  • 对于 Cortex 和 Loki 数据来源,通过配置其各自的服务启用 ruler API。

    • Lokilocal 规则存储类型是 Loki 数据来源的默认设置,仅支持查看规则。要编辑规则,请配置其他存储类型之一。

    • Cortex:使用传统的 /api/prom 前缀,而不是 /prometheus。Prometheus 数据来源同时支持 Cortex 和 Prometheus,并且 Grafana 预期 Query API 和 Ruler API 使用相同的 URL。您不能为 Ruler API 提供单独的 URL。

注意

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

要添加 Cortex 或 Loki 管理的警报规则
  1. 在 Grafana 控制台的 Grafana 菜单中,选择警报(铃铛)图标,打开列出现有警报的警报页面。

  2. 选择新建警报规则

  3. 步骤 1 中,添加规则名称、类型和存储位置,如下所示:

    • 规则名称中,添加描述性名称。此名称将显示在警报规则列表中。这也是根据此规则创建的每个警报实例的 alertname 标签。

    • 规则类型下拉列表中,选择 Cortex/Loki 管理的警报

    • 选择数据来源下拉列表中,选择 Prometheus 或 Loki 数据来源。

    • 命名空间下拉列表中,选择现有的规则命名空间。否则,选择新增,然后输入名称以新建。命名空间可以包含一个或多个规则组,并且只能用于组织目的。有关更多信息,请参阅 Cortex 或 Loki 规则组和命名空间

    • 下拉列表中,选择所选命名空间内的现有群组。否则,选择新增,然后输入名称以新建。新创建的规则会附加到该组的末尾。组内的规则以固定时间间隔按顺序运行,评估时间相同。

  4. 步骤 2 中,添加要评估的查询。

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

  5. 步骤 3 中,添加条件。

    在条件的“时长”文本框中,指定条件必须保持为 true 的持续时间,超过该时间后才会启动警报。如果您指定 5m,则条件必须持续五分钟为 true,才会启动警报。

    注意

    满足条件后,警报将进入 Pending 状态。如果条件在指定的持续时间保持为激活状态,警报将转入 Firing 状态。如果不再保持此状态,则恢复到 Normal 状态。

  6. 步骤 4 中,添加与规则相关联的其他元数据。

    • 添加描述和摘要以自定义警报消息。使用 警报规则的注释和标签 中的指南。

    • 添加运行手册 URL、面板、控制面板和警报 ID。

    • 添加自定义标签。

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

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

创建 Cortex 或 Loki 管理的记录规则

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

先决条件

对于 Cortex 和 Loki 数据来源,通过配置其各自的服务启用 Ruler API。

  • Lokilocal 规则存储类型是 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 菜单中,选择警报(铃铛)图标,打开列出现有警报的警报页面。

  2. 选择新建警报规则

  3. 步骤 1 中,添加规则名称、类型和存储位置,如下所示:

    • 规则名称中,添加描述性名称。此名称将显示在警报规则列表中。这也是根据此规则创建的每个警报实例的 alertname 标签。

    • 规则类型下拉列表中,选择 Cortex/Loki 管理的警报

    • 选择数据来源下拉列表中,选择 Prometheus 或 Loki 数据来源。

    • 命名空间下拉列表中,选择现有的规则命名空间。否则,选择新增,然后输入名称以新建。命名空间可以包含一个或多个规则组,并且只能用于组织目的。有关更多信息,请参阅 Cortex 或 Loki 规则组和命名空间

    • 下拉列表中,选择所选命名空间内的现有群组。否则,选择新增,然后输入名称以新建。新创建的规则会附加到该组的末尾。组内的规则以固定时间间隔按顺序运行,评估时间相同。

  4. 步骤 2 中,添加要评估的查询。

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

  5. 步骤 3 中,添加与规则相关联的其他元数据。

    • 添加描述和摘要以自定义警报消息。使用 警报规则的注释和标签 中的指南。

    • 添加运行手册 URL、面板、控制面板和警报 ID。

    • 添加自定义标签。

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

创建 Grafana 管理的警报规则

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

注意

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

要添加 Grafana 管理的规则
  1. 在 Grafana 控制台的 Grafana 菜单中,选择警报(铃铛)图标,打开列出现有警报的警报页面。

  2. 选择新建警报规则

  3. 步骤 1 中,添加规则名称、类型和存储位置,如下所示:

    • 规则名称中,添加描述性名称。此名称将显示在警报规则列表中。这也是根据此规则创建的每个警报实例的 alertname 标签。

    • 规则类型下拉列表中,选择 Grafana 管理的警报

    • 文件夹下拉列表中,选择要存储规则的文件夹。如果未选择文件夹,规则将存储在 General 文件夹中。要创建文件夹,请选择下拉列表,并输入新文件夹名称。

  4. 步骤 2 中,添加要评估的查询和表达式。

    • 保留默认名称,或将鼠标悬停在其上方,选择编辑图标以更改名称。

    • 对于查询,请从下拉列表中选择一个数据来源。

    • 添加一个或多个查询或表达式(有关表达式的详细信息,请参阅 Grafana 文档中的表达式)。

    • 对于每个表达式,可选择经典条件来创建单条警报规则,或从 MathReduceResample 选项中选择,为每个序列生成单独的警报。有关这些选项的详细信息,请参阅 单维规则和多维规则

    • 选择运行查询,以验证查询是否成功。

  5. 步骤 3 中,添加条件。

    • 条件下拉列表中,选择启动警报规则的查询或表达式。

    • 评估间隔中,指定评估频率。必须是 10 秒的倍数。例如 1m30s

    • 评估时长中,指定条件必须为 true 的持续时间,超过该时间后才会启动警报。

      注意

      如果条件被违反,警报将进入 Pending 状态。如果条件在指定的持续时间保持为违反状态,警报将转入 Firing 状态。如果不再保持此状态,则恢复到 Normal 状态。

    • 配置无数据和错误处理中,配置无数据情况下的警报行为。使用 处理无数据或错误的情况 中的指南。

    • 选择预览警报,检查此时运行查询的结果。预览不包括无数据和错误处理条件。

  6. 步骤 4 中,添加与规则相关联的其他元数据。

    • 添加描述和摘要以自定义警报消息。使用 警报规则的注释和标签 中的指南。

    • 添加运行手册 URL、面板、控制面板和警报 ID。

    • 添加自定义标签。

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

单维规则和多维规则

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

单维规则(经典条件)

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

有关如何设置表达式格式的更多信息,请参阅 Grafana 文档中的表达式

多维规则

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

注意

由多维规则生成的每个警报实例都会计入警报总配额。达到警报配额后,不会对规则进行评估。有关多维规则配额的更多信息,请参阅 达到配额错误

要根据单条规则创建多个实例,请使用 MathReduce、或 Resample 表达式来创建多维规则。例如,您可以:

  • 为每个查询添加 Reduce 表达式,将所选时间范围内的值聚合为一个值。(使用数字数据的规则不需要)。

  • 添加包含规则条件的 Math 表达式。如果查询或归约表达式已经返回 0(表示规则不应启动警报)或正数(表示规则应启动警报),则无需进行此操作。

    一些示例:

    • $B > 70:如果应该在 B 查询/表达式的值大于 70 时启动警报。

    • $B < $C * 100:如果应该在 B 的值小于 C 的值乘以 100 时启动警报。如果要比较的查询在其结果中包含多个序列,那么对于来自不同查询的序列,如果它们具有相同的标签,或者其中一个序列的标签是另一个序列标签的子集,就会进行匹配。

注意

Grafana 不支持使用模板变量的警报查询。有关更多信息,请访问社区页面:Template variables are not supported in alert queries while setting up Alert

多维规则的性能注意事项

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

多维警报可能会大幅影响 Grafana 工作区的性能,以及数据来源的性能(因为 Grafana 会查询数据来源,以评估警报规则)。在您尝试优化监控系统的性能时,以下注意事项可能会有所帮助。

  • 规则评估频率:警报规则的评估间隔属性可控制规则评估的频率。我们建议使用可接受的最低评估频率。

  • 结果集基数:使用规则创建的警报实例数量会影响其性能。假设您要在实例集的每台虚拟机上监控每个 API 路径的 API 响应错误。该集合的基数是路径数乘以虚拟机数。您可以减少结果集的基数,例如,通过监控每台虚拟机的总错误数(而不是每台虚拟机每条路径的错误数)做到这一点。

  • 查询的复杂性:对于数据来源可以快速处理和响应的查询,其消耗的资源更少。虽然这一考虑因素不如上述其他考虑因素重要,但如果您已尽可能降低了那些因素的影响,那么着眼于单个查询的性能可能会有所帮助。您还应该了解评估这些规则对数据来源的性能影响。通常,在监控数据库处理的查询中,警报查询占据了绝大多数,因此影响 Grafana 实例的负载因素也会影响这些警报查询。

达到配额错误

单个工作区中可以拥有的警报实例数量有配额限制。达到该数量后,您将无法再在该工作区中创建新的警报规则。对于多维警报,警报实例的数量可能会随时间变化。

处理警报实例时,请务必记住以下几点。

  • 如果您只创建单维规则,则每条规则都是一个警报实例。您可以在单个工作区中创建与警报实例配额数量相同的规则,但不能超过该数量。

  • 多维规则会创建多个警报实例,但在对警报实例进行评估之前,其数量是未知的。例如,如果您创建了跟踪 Amazon EC2 实例 CPU 使用率的警报规则,创建时可能有 50 个 EC2 实例(因此有 50 个警报实例),但如果您在一周后再添加 10 个 EC2 实例,则下次评估时将有 60 个警报实例。

    警报实例的数量在创建多维警报时评估,您无法创建出会立即超过警报实例配额的警报实例。由于警报实例的数量可能会发生变化,因此每次评估规则时,都会检查您的配额。

  • 在规则评估时,如果某条规则导致超出警报实例配额,那么,在对警报规则进行更新,使警报实例总数低于服务配额之前,不会评估该规则。发生这种情况时,您会收到一条警报通知,告知您已达到配额(该通知使用正在评估的规则的通知策略)。该通知包含一个 Error 注释,其值为 QuotaReachedError

  • 导致 QuotaReachedError 的规则将停止评估。只有在进行更新,且更新后的评估本身不会导致 QuotaReachedError 时,才会恢复评估。未评估的规则会在 Grafana 控制台中显示达到配额错误。

  • 要减少警报实例的数量,您可以移除警报规则,或编辑多维警报,使其具有的警报实例变少(例如,为每台虚拟机上的错误设置一个警报,而不是为虚拟机中的每个 API 的错误设置一个警报)。

  • 要恢复评估,请更新警报并保存。您可以对警报进行更新,以减少警报实例的数量。或者,如果您做出了其他可减少警报实例数量的更改,也可以不做任何更改,直接保存警报。如果评估可以恢复,就会恢复。如果会导致另一个 QuotaReachedError,则无法保存。

  • 如果警报被保存,并且恢复了评估,同时也没有超过警报配额,达到配额错误可能会继续在 Grafana 控制台中显示一段时间(时间最长为其评估间隔),但是,警报规则评估确实会开始,如果达到规则阈值,将发送警报。

  • 有关警报配额以及其他配额的详细信息,请参阅 Amazon Managed Grafana 的服务配额

处理无数据或错误的情况

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

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

无数据选项 行为

无数据

创建警报 DatasourceNoData,将警报规则的名称和 UID,以及返回无数据的数据来源的 UID 作为标签。

警报

将警报规则状态设置为 Alerting

OK

将警报规则状态设置为 Normal

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

错误或超时选项 行为

提示

将警报规则状态设置为 Alerting

OK

将警报规则状态设置为 Normal

错误

创建警报 DatasourceError,将警报规则的名称和 UID,以及返回无数据的数据来源的 UID 作为标签。

警报规则的注释和标签

注释和标签是与警报相关联的键值对,这些警报来源于警报规则、数据来源响应,以及警报规则评估的结果。它们可以直接用于警报通知,也可以在模板模板函数中用于动态创建通知联系人。

注释

注释是提供警报附加信息的键值对。您可以使用以下注释:descriptionsummaryrunbook_urlalertIddashboardUidpanelId。这些注释会显示在用户界面的规则和警报详细信息中,并可用于联系点消息模板。

标签

标签是包含警报信息的键值对。警报的标签集在整个警报评估和通知过程中生成和添加。其用途如下。

  • 警报的完整标签集可在 Grafana 警报中唯一标识该警报。

  • Alertmanager 使用标签将警报与通知策略中的静默警报组进行匹配。

  • 警报用户界面会显示由该规则的评估生成的每个警报实例的标签。

  • 联系点可以访问标签,以动态生成通知,其中包含与生成通知的警报相关的特定信息。

  • 标签可添加到警报规则中。这些手动配置的标签能够使用模板函数并引用其他标签。在发生标签冲突时,在此处向警报规则添加的标签具有优先权。

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

名称 描述

$labels

来自查询或条件的标签。例如,{{ $labels.instance }}{{ $labels.job }}。当规则使用经典条件时,此变量不可用。

$values

为该警报规则评估的所有归约表达式和数学表达式的值。例如,{{ $values.A }}{{ $values.A.Labels }}{{ $values.A.Value }},其中 A 是表达式的 refID。当规则使用经典条件时,此变量不可用

$value

警报实例的值字符串。例如,[ var='A' labels={instance=foo} value=10 ]

管理警报规则

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

查看警报规则

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

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

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

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

组视图

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

状态视图

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

筛选警报规则

您可以通过多种方式筛选警报页面上显示的警报规则。

  • 您可以选择选择数据来源,然后选择要筛选的数据来源,筛选显示查询特定数据来源的规则。

  • 您可以在按标签搜索中选择搜索条件,按标签筛选。一些示例条件包括 environment=productionregion=~US|EUseverity!=warning

  • 您可以选择按状态筛选警报,然后选择要查看的状态,筛选显示处于特定状态的规则。

编辑或删除警报规则

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

编辑或删除规则
  1. 展开规则,直到可以看到查看编辑删除的规则控件。

  2. 选择编辑以打开“创建规则”页面。按照创建规则的相同方式更新。有关详细信息,请参阅 创建 Grafana 管理的警报规则创建 Cortex 或 Loki 管理的警报规则 中的说明。

  3. (可选)选择删除以删除规则。

Cortex 或 Loki 规则组和命名空间

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

要编辑规则组或命名空间
  1. 在 Grafana 控制台的 Grafana 菜单中,选择警报(铃铛)图标,打开警报页面。

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

  3. 选择编辑(笔)图标。

  4. 对规则组或命名空间做出更改。

    注意

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

  5. 选择 Save changes(保存更改)。