Grafana 告警入门 - 第 4 部分

Grafana 告警入门 - 第 4 部分

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

在本教程中,您将学习

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

开始之前

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

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

  • Grafana Cloud

    继续阅读模板化如何工作

  • 交互式学习环境

    • 或者,您可以在我们的交互式学习环境中尝试此示例:Grafana 告警入门 - 第 4 部分。这是一个完全配置好的环境,已安装所有依赖项。
  • Grafana OSS

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

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

    • Git

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

模板化如何工作

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

How templating works
模板化如何工作

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

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

通知模板

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

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

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

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

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

现在我们已经介绍了模板化如何工作,让我们继续下一步。我们将指导您创建带有摘要和描述注解的告警规则。在此过程中,我们将结合 CPU 使用率和实例名称,这些内容稍后将在我们的通知模板中使用。

创建告警规则

  1. 登录 Grafana

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

    • 导航至 Alerts & IRM > Alerting > Alert rules
    • 点击 + New alert rule
    • 输入告警规则名称。命名为 High CPU usage
  3. Define query an alert condition 部分

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

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

    • 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. Alert condition 部分

    • 保持 Last 作为聚合函数 (WHEN) 的值,阈值设置为 75,表示 CPU 使用率高于 75%。这是告警规则应该触发的阈值。
    • 点击 Preview alert rule condition 以运行查询。

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

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

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

      注意:虽然可以在这里模板化标签,但在本教程中,我们重点介绍摘要和注解字段的模板化。

  6. Set evaluation behaviour 部分

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

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

    • 选择一个联系点。如果您没有联系点,请点击 View or create contact points
  8. Configure notification message 部分

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

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

      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. 点击 Save rule and exit

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

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

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

步骤 2:模板化通知

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

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

添加通知模板

  1. 导航至 Alerts & IRM > Alerting > Contact points
  2. 选择 Notification Templates 选项卡。
  3. 点击 + Add notification template group
  4. 输入名称。例如 instance-cpu-summary。
  5. Add example 下拉菜单中,选择 Print firing and resolved alerts

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

{{- /* 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:此子模板拉取您之前配置的摘要注解。

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

  1. 点击 Edit payload

  2. 点击 Use existing alert instance

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

  3. 点击该告警规则。

  4. 选择一个实例。

  5. 点击 Add alert data to payload

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

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

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

将模板应用到您的联系点

  1. 将模板应用到您的联系点。
    • 导航至 Alerts & IRM > Alerting > Contact points
    • 编辑您的联系点。
  2. 可选 [电子邮件] 设置部分
    • 点击 Edit Message
    • Select notification template 下,搜索 custom.firing_and_resolved_alerts
    • 点击 Save
  3. 保存您的联系点。

接收通知

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

注意:您可能需要暂停告警规则评估,然后恢复它以触发通知。

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

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

结论

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

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

Grafana 告警入门第 5 部分 了解更多

提示

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