Grafana 告警入门 - 第 3 部分

Grafana 告警入门 - 第 3 部分

本 Grafana 告警入门教程第 3 部分是 Grafana 告警入门教程第 2 部分 的延续。

Grafana 告警中的分组功能通过将相关的告警实例合并到单个简洁通知中,从而减少通知噪音。这对于值班工程师很有用,确保他们专注于解决事件,而不是筛选大量的通知。

分组是通过通知策略中的标签进行配置的。这些标签引用了告警实例生成的标签或用户配置的标签。

通知策略还允许您定义每个告警实例组发送通知的频率。

在本教程中,您将

  • 了解告警规则分组的工作原理。
  • 创建一个处理分组的通知策略。
  • 为实际场景定义告警规则。
  • 接收和查看分组告警通知。

开始之前

您可以通过多种方式学习本教程。

设置 Grafana Stack (OSS 用户)

为了演示如何使用 Grafana Stack 观察数据,请下载并运行以下文件。

  1. 克隆 教程环境仓库

    git clone https://github.com/grafana/tutorial-environment.git
  2. 切换到您克隆仓库的目录

    cd tutorial-environment
  3. 运行 Grafana Stack

    docker compose up -d

    第一次运行 docker compose up -d 时,Docker 会下载教程所需的所有资源。这可能需要几分钟时间,具体取决于您的互联网连接。

    注意

    如果您的系统上已经运行了 Grafana、Loki 或 Prometheus,您可能会看到错误,因为 Docker 镜像尝试使用的端口已被您的本地安装占用。如果发生这种情况,请停止这些服务,然后再次运行命令。

告警规则分组工作原理

告警通知分组使用以下方式配置:标签时间设置

  • 标签 将告警规则与通知策略关联并定义分组。
  • 时间设置 控制何时以及多久发送一次通知。
A diagram about the components of a notification policy, including labels and groups

标签类型

保留标签(默认)

  • 由 Grafana 自动生成,例如,alertnamegrafana_folder
  • 示例:alertname="High CPU usage"

用户配置的标签:

  • 手动添加到告警规则。
  • 示例:severitypriority

查询标签:

  • 由数据源查询返回。
  • 示例:regionserviceenvironment

时间设置

分组等待:发送第一个通知前的等待时间。分组间隔:同一组通知之间的时间间隔。重复间隔:为未更改的分组重新发送通知前的等待时间。

共享相同 标签值 的告警会被分到同一组,时间设置决定了通知频率。

更多详细信息,请参阅

告警分组的实际案例

场景:监控分布式应用

您正在监控跨多个区域的指标,例如 CPU 使用率、内存利用率和网络延迟。其中一些告警规则包含诸如 region: us-westregion: us-east 等标签。如果这些区域中有多个告警规则触发,可能导致通知泛滥。

如何管理分组

对告警规则通知进行分组

  1. 定义标签:使用 regionmetricinstance 等标签对告警进行分类。
  2. 配置通知策略:
    • 查询标签 "region" 进行告警分组。
    • 示例
      • region: us-west 的告警通知发送给西海岸团队。
      • region: us-east 的告警通知发送给东海岸团队。
  3. 指定 时间设置 以控制通知频率。
    • 示例
      • 分组间隔:设置决定了同一告警组的更新通知发送频率。默认情况下,此间隔设置为 5 分钟,但您可以根据需要自定义为更短或更长。

设置告警规则分组

通知策略

按照上述示例,通知策略 被创建用于将带有 region 标签的告警实例路由到特定的联系点。目标是每个区域接收一个合并的通知。为了演示分组的工作原理,东海岸团队的告警通知不分组。在时间方面,为该区域定义了特定的计划。此设置会覆盖父级设置,以微调特定标签(即区域)的行为。

  1. 登录 Grafana

    • Grafana Cloud 用户:通过 Grafana Cloud 登录。
    • OSS 用户:访问 https://:3000
  2. 导航至 通知策略

    • 前往 告警与 IRM > 告警 > 通知策略
  3. 添加子策略

    • 在默认策略中,点击 + 新建子策略

    • 标签region

    • 运算符=

    • us-west

      此标签匹配 region 标签为 us-west 的告警规则。

  4. 选择一个 联系点

    • 选择 Webhook

    如果您还没有联系点,请添加一个 联系点

  5. 启用继续匹配

    • 开启 继续匹配后续同级节点,以便即使匹配到一个或多个标签(即 region 标签)后,评估仍继续进行。
  6. 覆盖分组设置

    • 切换 覆盖分组

    • 分组依据:添加 region 作为标签。移除任何现有标签。

      分组依据 将共享相同分组标签的告警合并到一个通知中。例如,所有带有 region=us-west 的告警都将合并到同一个通知中,从而更易于管理并减少告警疲劳。

  7. 设置自定义时间

    • 切换 覆盖常规时间设置

    • 分组间隔2m。这将确保同一告警组的后续通知以 2 分钟的间隔发送。虽然默认是 5 分钟,但此处我们选择 2 分钟是为了演示目的提供更快的反馈。

      时间设置 控制通知发送频率,有助于平衡及时告警和最小化噪音。

  8. 保存并重复

    • region = us-east 重复上述步骤,但不要覆盖分组和时间设置。使用不同的 Webhook 端点作为联系点。
    Two nested notification policies to route and group alert notifications

    这些嵌套策略应将 region 标签为 us-west 或 us-east 的告警实例路由出去。只有 us-west 区域团队应接收分组告警通知。

    注意

    在 Grafana 中,通知策略中的每个标签必须具有唯一的键。如果您尝试添加相同的标签键(例如,region)和不同的值(例如,us-west 和 us-east),则只有最后输入的会保存,之前的会被丢弃。这是因为标签存储为关联数组(map),其中每个键必须唯一。对于相同的标签键,请使用 regex 匹配器(例如,region=~“us-west|us-east”)。

创建告警规则

在本节中,我们将根据应用监控示例配置一条告警规则。

  1. 导航至 告警与 IRM > 告警 > 告警规则
  2. 点击 新建告警规则

输入告警规则名称

使其简短且具有描述性,因为它会出现在您的告警通知中。例如:High CPU usage - Multi-region

定义查询和告警条件

在本节中,我们使用 Grafana 管理的告警规则创建的默认选项。默认选项允许我们定义查询、表达式(用于操作数据 – UI 中的 WHEN 字段)以及触发告警必须满足的条件(在默认模式下是阈值)。

Grafana 包含一个 测试数据源,用于创建模拟时间序列数据。此数据源已包含在本教程的演示环境中。如果您在 Grafana Cloud 或您自己的本地 Grafana 实例中工作,您可以通过 连接 菜单添加数据源。

  1. 从下拉菜单中选择 TestData 数据源。

  2. 场景 选择 CSV 内容

  3. 复制以下 CSV 数据

    • 选择 TestData 作为数据源。

    • 场景 设置为 CSV 内容

    • 使用以下 CSV 数据

      csv
      region,cpu-usage,service,instance
      us-west,35,web-server-1,server-01
      us-west,81,web-server-1,server-02
      us-east,79,web-server-2,server-03
      us-east,52,web-server-2,server-04
      us-west,45,db-server-1,server-05
      us-east,77,db-server-2,server-06
      us-west,82,db-server-1,server-07
      us-east,93,db-server-2,server-08

    返回的数据模拟了数据源返回多个时间序列,每个时间序列都会创建一个对应的告警实例。

  4. 告警条件 部分

    • 保持 Last 作为 reducer 函数(WHEN)的值,并将 75 作为阈值。这是告警规则应触发的阈值。
  5. 点击 预览告警规则条件 以运行查询。

    它应该返回 5 个处于 Firing(触发中)状态的系列,其中两个来自 us-west 区域,三个来自 us-east 区域。

    Preview of a query returning alert instances.

添加文件夹和标签

  1. 文件夹 中,点击 + 新建文件夹 并输入名称。例如:Multi-region alerts。此文件夹包含我们的告警规则。

设置评估行为

每条告警规则都会分配到一个评估组。您可以将告警规则分配到现有评估组,或创建一个新的评估组。

  1. 评估组和间隔 中,重复上述步骤创建一个新的评估组。将其命名为 Multi-region group
  2. 选择一个 评估间隔(告警评估频率)。选择 1m
  3. 待处理周期 设置为 0s(零秒),以便条件满足时告警规则立即触发(这可以最大限度地减少演示等待时间)。

配置通知

选择当告警规则触发时谁应接收通知。

  1. 选择 使用通知策略

  2. 点击 预览路由 以确保匹配正确。

    Preview of alert instance routing with the region label matcher

    预览应显示来自数据源的 region 标签通过我们配置的标签匹配器成功匹配了我们之前创建的通知策略。

  3. 点击 保存规则并退出

创建第二个告警规则

重复上述步骤创建第二条告警规则,用于高内存使用率告警。

  1. 通过点击 更多 > 复制 复制告警规则。

  2. 命名为 High Memory usage - Multi-region

  3. 使用以下 CSV 数据模拟数据源返回内存使用率。

    region,memory-usage,service,instance
    us-west,42,cache-server-1,server-09
    us-west,88,cache-server-1,server-10
    us-east,74,api-server-1,server-11
    us-east,90,api-server-1,server-12
    us-west,53,analytics-server-1,server-13
    us-east,81,analytics-server-2,server-14
    us-west,77,analytics-server-1,server-15
    us-east,94,analytics-server-2,server-16
  4. 点击保存规则并退出。

接收分组告警通知

现在告警规则已配置完成,当告警触发时,您应该在联系点接收到告警通知。

当配置的告警规则检测到跨多个区域的 CPU 或内存使用率高于 75% 时,它将每分钟评估一次指标。如果条件持续存在,通知将被分组,并在首次告警发送前等待 30 秒。同一告警组的后续通知将每隔 2 分钟发送一次(仅限 US-west 告警实例),从而增加分组告警通知的频率。US-east 实例的后续通知应按默认的 5 分钟间隔发送。如果条件持续存在较长时间,则 4 小时的重复间隔确保只有在问题持续存在时才会重新发送告警。

因此,我们的通知策略应路由三条通知:一条分组通知,包含来自 us-west 区域的 CPU 和内存告警实例;以及两条单独的通知,包含来自 us-east 区域的告警实例。

分组通知示例

json
{
  "receiver": "US-West-Alerts",
  "status": "firing",
  "alerts": [
    {
      "status": "firing",
      "labels": {
        "alertname": "High CPU usage - Multi-region",
        "grafana_folder": "Multi-region alerts",
        "instance": "server-05",
...
  {
    "status": "firing",
      "labels": {
        "alertname": "High Memory usage - Multi-region",
        "grafana_folder": "Multi-region alerts",
        "instance": "server-10",
      },

...}

us-west 联系点的 CPU 和内存告警实例合并到单个通知的详细信息。

json
{
  "receiver": "US-East-Alerts",
  "status": "firing",
  "alerts": [
    {
      "status": "firing",
      "labels": {
        "alertname": "High CPU usage - Multi-region",
        "grafana_folder": "Multi-region alerts",
        "instance": "server-03",
        "region": "us-east",
        "service": "web-server-2"
...}}}

us-east 联系点的 CPU 告警实例合并到单独通知的详细信息。

json
{
  "receiver": "US-East-Alerts",
  "status": "firing",
  "alerts": [
    {
      "status": "firing",
      "labels": {
        "alertname": "High memory usage - Multi-region",
        "grafana_folder": "Multi-region memory alerts",
        "instance": "server-12",
        "region": "us-east"
...}}}

us-east 联系点的内存告警实例合并到单独通知的详细信息。

结论

通过配置 通知策略 以及使用 标签(例如 region),您可以根据特定标准对告警通知进行分组,并将它们路由到相应的团队。微调 时间设置——包括分组等待、分组间隔和重复间隔——可以进一步减少噪音,并确保通知具有可操作性,而不会让值班工程师应接不暇。

Grafana 告警第 4 部分 中了解更多

提示

Grafana 告警入门 - 第 4 部分 中,您将学习如何使用模板创建自定义和简洁的通知。