Grafana 告警入门 - 第 5 部分

简介

Grafana 告警入门教程第 5 部分是 Grafana 告警入门教程第 4 部分的延续。

在本教程中,我们将重点介绍如何使用 Grafana 优化您的系统健康监控告警策略,特别是在使用 Prometheus 时。想象一下,您正在管理一个 Web 应用程序或一组服务器,跟踪 CPU、内存和磁盘使用率等关键指标。监控固然重要,但告警管理可以让您的团队对问题采取行动,同时又不会被噪音淹没。

在本教程中,您将学习如何:

  • 利用通知策略实现基于查询值的动态路由:使用通知策略根据动态生成的标签路由告警,确保关键告警到达值班团队,而优先级较低的告警发送到通用监控频道。
  • 设置静默时间,在维护期间或周末抑制某些告警。
  • 将告警链接到仪表盘,提供更多上下文以解决问题。

开始之前

  • 交互式学习环境

  • Grafana 开源版

    • 如果您选择在本地运行 Grafana 技术栈,请确保已安装以下应用程序:
      • Docker Compose(包含在 macOS 和 Windows 的 Docker Desktop 中)
      • Git

设置 Grafana 技术栈

要使用 Grafana 技术栈观测数据,请下载并运行以下文件。

  1. 克隆教程环境仓库

    bash
    git clone https://github.com/tonypowa/grafana-prometheus-alerting-demo.git
  2. 切换到克隆的仓库目录

    bash
    cd grafana-prometheus-alerting-demo
  3. 构建 Grafana 技术栈

    docker compose build
  4. 启动容器

    docker compose up -d

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

注意

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

用例:使用 Prometheus 和 Grafana 进行系统健康监控和告警

在此用例中,我们重点介绍如何将系统 CPU、内存和磁盘使用情况监控作为监控设置的一部分。此示例基于 Grafana Prometheus 告警演示,该演示通过 Prometheus 和 Grafana 收集和可视化系统指标。

您的团队负责确保服务器的健康状况,您希望利用 Grafana 的高级告警功能来实现:

  • 根据查询值设置谁应接收告警通知。
  • 根据查询值抑制告警。
  • 将告警规则集成到可视化中以提供更好的上下文。

场景

在提供的演示设置中,您将监控:

  • CPU 使用率。
  • 内存消耗。

您有关键告警(例如,CPU 使用率超过 75%)和警告告警(例如,内存使用率超过 60%)。

有时,您还有计划的维护窗口,期间可能会暂时抑制某些告警。

创建可视化以监控指标

为了跟踪这些指标并了解系统在不同环境中的行为,您可以设置 CPU 使用率和内存消耗的可视化。这将使您更容易查看系统的性能以及告警如何根据环境标签进行分发,包括在计划的维护窗口期间。

时间序列可视化支持告警规则,以注释和告警规则状态的形式提供更多上下文。请按照以下步骤创建可视化以监控应用程序的指标。

  1. 登录 Grafana

    • 导航至 https://:3000,Grafana 应该在此地址运行。
    • 用户名和密码:admin
  2. 创建时间序列面板

    • 导航至仪表盘
    • 点击新建
    • 选择新建仪表盘
    • 点击+ 添加可视化
    • 选择 Prometheus 作为数据源(演示中已提供)。
    • 输入面板标题,例如 CPU 和内存使用率
  3. 添加指标查询

    • 在查询区域,复制并粘贴以下 PromQL 查询:

      ** 如果未选中,请切换到代码模式 **

      promql
      flask_app_cpu_usage{environment="prod"}
    • 点击运行查询

    此查询应显示 prod 环境中模拟的 CPU 使用率数据。

  4. 添加内存使用率查询

    • 在查询区域,粘贴以下 PromQL 查询:

    • 时间序列面板显示生产环境中的 CPU 和内存使用率指标。

      promql
      flask_app_memory_usage{environment="prod"}
    Time-series panel displaying CPU and memory usage metrics in production.
    这两个指标都会返回标签,我们稍后将使用这些标签将告警实例与相应的路由关联起来。这些标签有助于定义如何根据环境或其他标准路由告警。

    点击保存仪表盘

  5. 我们的时间序列面板已准备就绪。您可以随意将指标与诸如 environment = “staging” 等标签组合。

    通知策略通过标签匹配器将告警实例路由到联系点。由于我们知道应用程序返回哪些标签(即,environmentjobinstance),我们可以使用这些标签来匹配告警规则。

创建通知策略

从 Grafana 侧边栏导航至告警 & IRM > 告警 > 通知策略

  1. 添加子策略

  2. 默认策略中,点击+ 新建子策略

    • 标签environment
    • 操作符=
    • production
    • 此标签匹配环境标签为 prod 的告警规则。
    • 选择一个联系点
  3. 如果您没有任何联系点,请添加一个联系点

    • 为了快速测试,您可以使用 webhook.site 的公共 webhook 来捕获和检查告警通知。如果您选择此方法,请在联系点的下拉菜单中选择 Webhook

    启用继续匹配

  4. 开启继续匹配后续兄弟节点,以便即使一个或多个标签(即,environment 标签)匹配后,评估仍会继续。

    • 保存并重复
  5. 按照相同的步骤创建另一个子策略。

    • 使用 environment = staging 作为标签/值对。
    • 随意使用不同的联系点。
    • 标签定义好后,我们可以为 CPU 和内存指标创建告警规则。这些告警规则将使用 Prometheus 中收集和存储的指标标签。

请按照以下步骤手动创建告警规则并将其链接到可视化。

创建告警规则以监控 CPU 和内存使用情况

从 Grafana 侧边栏导航至告警 & IRM > 告警 > 告警规则

创建 CPU 使用率告警规则

  1. 点击+ 新建告警规则以创建新的告警。
  2. 使其简短且具有描述性,因为这将出现在您的告警通知中。例如,CPU usage

输入告警规则名称

从下拉菜单中选择 Prometheus 数据源。

定义查询和告警条件

  1. 在查询部分,输入以下查询:

  2. 告警条件部分

    ** 如果未选中,请切换到代码模式 **

    flask_app_cpu_usage{}
  3. WHEN QUERY IS ABOVE 的值输入 75,以设置告警阈值。

    • 点击预览告警规则条件以运行查询。
    • 在 Grafana 中预览返回告警实例的查询。
    Preview of a query returning alert instances in Grafana.
    flask_app_cpu_usage 返回的标签中,environment 标签尤其重要,因为它支持基于环境值的动态告警路由,确保正确的团队接收相关通知。

    在本节中,我们添加一个基于查询值的模板化标签以映射到通知策略。

添加文件夹和标签

文件夹中,点击+ 新建文件夹并输入名称。例如:App metrics。此文件夹包含我们的告警。

  1. 点击+ 添加标签

  2. Key 字段:environment

  3. 字段中复制以下模板:

  4. Go

    在此上下文中,此模板用于根据 environment 标签路由告警通知。当 CPU 使用率等指标超过阈值时,模板会检查环境(例如,prodstaging 或任何其他值)。然后,它会根据查询值生成一个标签(例如,productionstagingdevelopment)。此标签用于告警通知策略中,将告警路由到适当的团队,从而将通知定向到正确的组,使过程更高效并避免不必要的重叠。
    {{- if eq $labels.environment "prod" -}}
    production
    {{- else if eq $labels.environment "staging" -}}
    staging
    {{- else -}}
    development
    {{- end -}}

    点击 + 新建评估组。命名为 System usage

设置评估行为

  1. 选择一个评估间隔(告警的评估频率)。选择 1m。点击创建。
  2. 等待期设置为 0s(零秒),以便告警规则在条件满足时立即触发(这最小化了演示的等待时间)。
  3. 选择在告警规则触发时谁应接收通知。

配置通知

切换高级选项按钮。

  1. 点击预览路由。预览应显示哪些触发的告警根据匹配 environment 标签的通知策略路由到联系点。

  2. 环境标签匹配器匹配的通知策略。

    Notification policies matched by the environment label matcher.
    环境标签匹配器应映射到之前创建的通知策略。这确保了触发的告警实例会被路由到与每个策略关联的相应联系点。

    将您的仪表盘面板链接到此告警规则,以便在告警规则触发或解决时在您的可视化中显示告警注释。

配置通知消息

点击链接仪表盘和面板

  1. 找到您之前创建的面板。
  2. 点击确认
  3. 复制现有告警规则(更多 > 复制),或创建新的内存使用率告警规则,定义阈值条件(例如,内存使用率超过 60%)。

创建第二个内存使用率告警规则

  1. 查询:flask_app_memory_usage{}
  2. 链接到相同的可视化,以便在告警规则触发或解决时获取内存使用率注释。
  3. 现在 CPU 和内存告警规则已设置完成,它们通过我们添加的自定义标签匹配器链接到通知策略。标签的值会根据环境模板使用 $labels.environment 动态更改。这确保了标签值将根据环境设置为 production、staging 或 development。

现在两个告警都已链接到您的仪表盘面板,查看您的仪表盘外观。

可视化指标和告警注释

时间序列面板显示健康指示器和注释。

Time series panel displaying health indicators and annotations.
创建告警规则后,它们应在链接的面板上显示为健康指示器(彩色心形图标:告警处于触发状态时显示红色心形,处于正常状态时显示绿色心形)。此外,注释还包含有用的上下文信息,例如告警触发的时间。

现在我们已经设置了通知策略,我们可以演示如何为重复的时间段静默告警。您可以根据需要静默生产或 staging 策略的通知。

创建静默时间

静默时间对于在维护窗口或周末期间抑制带有特定标签的告警非常有用。

输入名称,例如 Planned downtimeNon-business hours

  1. 添加子策略
    • 选择 SatSun,将静默时间应用于所有周六和周日。
    • 点击保存静默时间
    • 将静默时间添加到所需策略
  2. 转到路由带有 staging 标签实例的通知策略。
    • 选择更多 > 编辑
    • 从下拉菜单中选择静默时间
    • 点击更新策略
    • 此静默时间将应用于在周六和周日触发的所有 staging 环境告警。

通过使用通知策略,您可以根据查询值路由告警,将其定向到适当的团队。将告警集成到仪表盘中提供了更多上下文,而静默时间允许您在维护或低优先级期间抑制告警。

结论

探索本教程中涵盖的相关主题:

了解更多

Grafana 告警入门 - 第 2 部分中了解告警路由的工作原理。