Grafana Alerting 入门 - 第 5 部分

引言

《Grafana Alerting 入门教程第 5 部分》是《Grafana Alerting 入门教程第 4 部分》的延续。

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

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

  • 利用通知策略基于查询值进行动态路由:使用通知策略根据动态生成的标签路由告警,以便关键告警发送给 On-call 团队,不那么紧急的告警发送到通用监控渠道。
  • 设置静默时间以在维护或周末期间抑制某些告警。
  • 将告警链接到仪表盘,为解决问题提供更多上下文。

开始之前

  • 交互式学习环境

  • Grafana OSS

    • 如果您选择在本地运行 Grafana 堆栈,请确保已安装以下应用程序:
      • Docker Compose(包含在 Docker for Desktop for macOS 和 Windows 中)
      • 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 Alerting Demo,该示例通过 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 查询:

      promql
      flask_app_memory_usage{environment="prod"}
    Time-series panel displaying CPU and memory usage metrics in production.
    时间序列面板显示生产环境中的 CPU 和内存使用率指标。

    这两个指标都返回标签,我们稍后将使用这些标签将告警实例与相应的路由关联起来。这些标签有助于根据环境或其他标准定义告警的路由方式。

  5. 点击 保存仪表盘

    我们的时间序列面板已准备就绪。您可以随意组合指标和标签,例如 environment = “staging”

创建通知策略

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

  1. 导航至 告警与 IRM > 告警 > 通知策略

  2. 添加子策略

    • 默认策略 中,点击 + 新建子策略
    • 标签environment
    • 运算符=
    • production
    • 此标签匹配环境标签为 prod 的告警规则。
  3. 选择联系点

    • 如果您没有任何联系点,请添加一个联系点

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

  4. 启用继续匹配

    • 打开 继续匹配后续同级节点,以便即使一个或多个标签(即环境标签)匹配后,评估仍会继续。
  5. 保存并重复

    • 按照相同的步骤创建另一个子策略。
    • 使用 environment = staging 作为标签/值对。
    • 您可以使用不同的联系点。

定义好标签后,我们可以为 CPU 和内存指标创建告警规则。这些告警规则将使用 Prometheus 中收集和存储的指标标签。

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

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

创建 CPU 使用率告警规则

  1. 从 Grafana 侧边栏导航至 告警与 IRM > 告警 > 告警规则
  2. 点击 + 新建告警规则 以创建新告警。

输入告警规则名称

使其简短且具有描述性,因为这会显示在您的告警通知中。例如,CPU 使用率

定义查询和告警条件

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

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

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

    flask_app_cpu_usage{}
  3. 告警条件部分

    • 当查询值高于 中输入 75 作为值,以设置告警阈值。
    • 点击 预览告警规则条件 以运行查询。
    Preview of a query returning alert instances in Grafana.
    Grafana 中返回告警实例的查询预览。

    flask_app_cpu_usage 返回的标签中,环境标签尤为重要,因为它能根据环境值启用动态告警路由,确保正确的团队接收到相关的通知。

添加文件夹和标签

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

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

  2. 点击 + 添加标签

  3. 字段:environment

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

    Go
    {{- if eq $labels.environment "prod" -}}
    production
    {{- else if eq $labels.environment "staging" -}}
    staging
    {{- else -}}
    development
    {{- end -}}

    在此上下文中,模板用于根据 environment 标签路由告警通知。当 CPU 使用率等指标超过阈值时,模板会检查环境(例如 prodstaging 或任何其他值)。然后它会基于查询值生成一个标签(例如 productionstagingdevelopment)。此标签用于告警通知策略中,将告警路由到相应的团队,从而确保通知发送到正确的组,使流程更高效并避免不必要的重叠。

设置评估行为

  1. 点击 + 新建评估组。将其命名为 System usage
  2. 选择评估间隔(告警评估频率)。选择 1m。点击创建。
  3. 等待期设置为 0s(零秒),这样一旦条件满足,告警规则就会立即触发(这最大限度地减少了演示的等待时间)。

配置通知

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

  1. 切换 高级选项 按钮。

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

    Notification policies matched by the environment label matcher.
    由环境标签匹配器匹配的通知策略。

    环境标签匹配器应映射到之前创建的通知策略。这确保了触发中的告警实例被路由到与每个策略相关的相应联系点。

配置通知消息

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

  1. 点击 链接仪表盘和面板
  2. 找到您之前创建的面板。
  3. 点击 确认

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

  1. 复制现有告警规则(更多 > 复制),或为内存使用率创建一个新的告警规则,定义阈值条件(例如,内存使用率超过 60%)。
  2. 查询:flask_app_memory_usage{}
  3. 链接到相同的可视化,以便在告警规则触发或解决时获得内存使用率注释。

现在,CPU 和内存告警规则已设置好,它们通过我们添加的自定义标签匹配器链接到通知策略。标签的值会根据环境模板动态更改,使用 $labels.environment。这确保了标签值将根据环境设置为 production、staging 或 development。

可视化指标和告警注释

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

Time series panel displaying health indicators and annotations.
显示健康指标和注释的时间序列面板。

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

创建静默时间

现在我们已经设置了通知策略,我们可以演示如何静默定期发生的告警。您可以根据需要静默生产或 staging 策略的通知。

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

  1. 导航至 告警与 IRM > 告警 > 通知策略
    • 输入名称,例如 Planned downtimeNon-business hours
    • 选择 周六周日,将静默时间应用于所有周六和周日。
    • 点击 保存静默时间
  2. 将静默时间添加到所需策略
    • 转到路由带有 staging 标签的实例的通知策略。
    • 选择 更多 > 编辑
    • 从下拉菜单中选择静默时间
    • 点击 更新策略

此静默时间将应用于在周六和周日触发的任何来自 staging 环境的告警。

总结

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

了解更多

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