Grafana Alerting 入门 - 第 4 部分

Grafana Alerting 入门 - 第 4 部分

Grafana Alerting 入门教程第 4 部分是 Grafana Alerting 入门教程第 3 部分 的延续。

在本教程中,您将学习

  • Grafana Alerting 中的两种模板类型:标签和注解模板,以及通知模板。
  • 如何使用摘要和描述注解配置告警规则。
  • 如何创建与告警规则注解集成的通知模板。
  • 如何使用内置通知模板分组和格式化多个告警实例。
  • 如何在通知模板 payload 中利用告警实例预览告警通知。

开始之前

您可以通过不同的方式跟随本教程进行操作。

注意:本教程中讨论的某些 Grafana Alerting 模板化功能目前仅在 Grafana Cloud 中可用,尚未发布到开源 (OSS) 版本。

  • Grafana Cloud

    继续前往模板化工作原理

  • 交互式学习环境

  • Grafana OSS

    • 如果您选择在本地运行 Grafana stack,请确保您安装了以下应用程序

    • Docker Compose(包含在适用于 macOS 和 Windows 的 Docker Desktop 中)

    • Git

设置 Grafana stack (OSS 用户)

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

  1. 克隆tutorial environment 仓库

    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 镜像正尝试使用您本地安装已占用的端口。如果出现这种情况,请停止这些服务,然后再次运行该命令。

模板化工作原理

在 Grafana 中,您可以使用模板动态拉取关于告警规则的特定数据。这使得告警通知消息更加灵活且信息丰富。您可以模板化告警规则的标签和注解,或模板化通知本身。两者都使用 Go 模板语言。

How templating works
模板化工作原理

告警规则标签和注解的模板化

标签和注解是应用模板的关键字段。在注解中使用模板的主要优势之一是能够整合来自查询的动态数据,从而使告警能够反映与触发条件相关的实时信息。通过在注解中使用模板化,您可以自定义每个告警实例的内容,例如包含实例名称和指标值,从而使通知更具信息量。

通知模板

模板化的真正强大之处在于它如何帮助您使用动态告警数据格式化通知。通知模板允许您拉取注解中的详细信息,以创建清晰一致的消息。它们还使在不同联系点重复使用相同格式变得简单,从而节省时间和精力。

通知模板允许您自定义每条通知中信息的呈现方式。例如,您可以使用模板来组织和格式化触发或已解决告警的详细信息,使接收者更容易一眼了解每个告警的状态——所有这些都在一条通知中完成。

这个特定的通知模板会拉取每个告警实例的摘要和描述注解,并将它们组织到不同的部分,例如“触发中”和“已解决”。这样,用户就不会收到一长串单独的告警通知,而是可以收到一条结构良好、将所有相关详细信息分组在一起的消息。

当您希望减少通知噪音时,这种方法非常有用,特别是在同一时间有多个告警实例触发的情况下(例如,多个实例的 CPU 使用率过高)。您可以利用模板创建统一且易于阅读的通知,其中包含所有相关详细信息。

步骤 1:模板化标签和注解

现在我们已经介绍了模板化的工作原理,接下来进入下一步。我们将指导您创建一个带有摘要和描述注解的告警规则。在此过程中,我们将包含 CPU 使用率和实例名称,这些信息将在稍后的通知模板中使用。

创建告警规则

  1. 登录 Grafana

    • Grafana Cloud 用户:通过 Grafana Cloud 登录。
    • OSS 用户:访问 https://:3000
  2. 创建一个包含摘要和描述注解的告警规则

    • 导航到 告警和 IRM > 告警 > 告警规则
    • 点击 + 新建告警规则
    • 输入告警规则名称。将其命名为 High CPU usage
  3. 定义查询和告警条件 部分

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

      TestData 已包含在演示环境中。如果您在使用 Grafana Cloud 或您自己的本地 Grafana 实例,可以通过连接菜单添加数据源。

    • Scenario 中选择 CSV Content

    • 复制以下 CSV 数据

      region,cpu-usage,service,instance
      us-west,88,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

      此数据集模拟了一个返回多个时间序列的数据源,每个时间序列都会生成一个独立的告警实例。

  4. 告警条件 部分

    • 保持 Last 作为归约函数 (WHEN) 的值,并将 75 作为阈值,表示 CPU 使用率高于 75%。这是告警规则应触发的阈值。
    • 点击 预览告警规则条件 运行查询。

    它应该返回 3 个处于 Firing 状态的序列,以及 1 个处于 Normal 状态的序列。

    Preview of a query returning alert instances
    返回告警实例的查询预览
  5. 添加文件夹和标签 部分

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

      注意:虽然在此处可以模板化标签,但本教程重点介绍如何模板化摘要和注解字段。

  6. 设置评估行为 部分

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

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

    • 选择一个 联系点。如果您没有任何联系点,请点击 查看或创建联系点
  8. 配置通知消息 部分

    在此步骤中,您将配置 摘要描述 注解,以使您的告警通知信息丰富且易于理解。这些注解使用模板动态包含关于告警的关键信息。

    • 摘要 注解:将以下代码作为该注解的值输入。

      Go
      {{- "\n" -}}
      Instance: {{ index $labels "instance" }}
      {{- "\t" -}} Usage: {{ index $values "A"}}%{{- "\n" -}}

      此模板会自动将实例名称(来自 $labels 数据)及其当前 CPU 使用率(来自 $values[“A”])添加到告警摘要中。\t:在实例名称和值之间添加一个制表符空格。而,\n:在值之后插入一个新行。

      输出示例

      server-01	88

      此输出帮助您快速了解哪个实例受到影响及其使用水平。

  9. 可选:添加描述以帮助值班工程师更好地理解告警规则的作用。例如:此告警监控各个实例的 CPU 使用率,并在任何实例超过 75% 的使用率阈值时触发。

  10. 点击 保存规则并退出

现在我们已经配置了一个带有动态模板用于摘要注解的告警规则,下一步是自定义告警通知本身。虽然默认通知消息包含摘要注解且效果不错,但它通常可能过于冗长。

Default email alert notification with templated annotation
带有模板化注解的默认电子邮件告警通知

为了使我们的告警通知更简洁并满足我们的需求,我们将创建一个自定义的 通知模板,该模板引用我们刚刚设置的摘要注解。通知模板特别有用,因为它们可以在多个联系点重复使用,确保告警消息的一致性。

步骤 2:模板化通知

在此步骤中,我们将使用一个内置的通知模板以清晰有序的方式格式化告警通知。通知模板允许我们自定义告警消息的结构,使其更易于阅读和更相关。

如果没有通知模板,告警消息将包含默认的 Grafana 格式(default.message,参见上图)。

添加通知模板

  1. 导航到 告警和 IRM > 告警 > 联系点
  2. 选择 通知模板 标签页。
  3. 点击 + 添加通知模板分组
  4. 输入名称。例如 instance-cpu-summary
  5. 添加示例 下拉菜单中,选择 打印触发和已解决告警

此模板将告警实例打印到两个部分:触发告警已解决告警,并且只包含每个告警的关键详细信息。此外,它还添加了我们的摘要和描述注解。

{{- /* Example displaying firing and resolved alerts separately in the notification. */ -}}
{{- /* Edit the template name and template content as needed. */ -}}
{{ define "custom.firing_and_resolved_alerts" -}}
{{ len .Alerts.Resolved }} resolved alert(s)
{{ range .Alerts.Resolved -}}
  {{ template "alert.summary_and_description" . -}}
{{ end }}
{{ len .Alerts.Firing }} firing alert(s)
{{ range .Alerts.Firing -}}
  {{ template "alert.summary_and_description" . -}}
{{ end -}}
{{ end -}}
{{ define "alert.summary_and_description" }}
  Summary: {{.Annotations.summary}}
  Status: {{ .Status }}
  Description: {{.Annotations.description}}
{{ end -}}

注意

您的通知模板名称 ({{define "<NAME>"}}) 必须是唯一的。您不能在同一个通知模板分组或不同通知模板分组中拥有两个同名模板。

以下是模板的详细说明

  • {{ define "custom.firing_and_resolved_alerts" -}} 部分:显示已解决告警的数量及其摘要,使用 alert.summary_and_description 模板包含每个告警的摘要、状态和描述。
  • .Alerts.Firing 部分:类似地列出触发中告警实例的数量及其详细信息。
  • alert.summary_and_description:此子模板拉取您之前配置的摘要注解。

预览 区域,您可以看到通知的示例外观。由于我们已经创建了告警规则,您可以进一步预览您的规则中的实际告警实例在通知中将如何显示。

  1. 点击 编辑 Payload

  2. 点击 使用现有告警实例

    您应该在左侧看到我们的告警规则列表。

  3. 点击该告警规则。

  4. 选择一个实例。

  5. 点击 添加告警数据到 Payload

    告警实例已添加到预览底部。

    Preview of an alert instance in a notification template
    通知模板中的告警实例预览
  6. 点击 保存

通知模板准备就绪后,下一步将其应用到您的联系点以查看效果。

将模板应用到联系点

  1. 将模板应用到您的联系点。
    • 导航到 告警和 IRM > 告警 > 联系点
    • 编辑您的联系点。
  2. 可选 [电子邮件] 设置 部分
    • 点击 编辑消息
    • 选择通知模板 下,搜索 custom.firing_and_resolved_alerts
    • 点击 保存
  3. 保存您的联系点。

接收通知

现在模板已应用到联系点,您应该会在指定的联系点接收到通知。

注意:您可能需要暂停然后重新启动告警规则评估以触发通知。

Templated email notification for CPU and memory usage
CPU 和内存使用率的模板化电子邮件通知

在屏幕截图中,您可以看到通知模板如何将告警实例分组到两个部分:触发告警已解决告警。每个部分仅包含每个告警的关键详细信息,确保消息保持简洁和重点突出。此外,我们之前创建的摘要和描述注解也包含在内,提供了受影响实例和 CPU 使用率信息。

结论

在本教程中,我们学习了如何在 Grafana Alerting 中使用模板化创建动态且可操作的告警通知。我们探讨了如何使用注解配置告警规则,设计自定义通知模板,并将其应用到联系点,以增强告警消息的清晰度和效率。通过将告警实例组织成简洁的通知,您可以减少噪音,并确保值班工程师快速理解和解决关键问题。

要深化您对 Grafana 模板化的理解,请查阅以下资源

Grafana Alerting 第 5 部分中了解更多

提示

Grafana Alerting 入门 - 第 5 部分中,您将学习如何动态路由告警并将其链接到仪表盘。