菜单
Grafana Cloud Enterprise 开源

标签和注解模板示例

通过模板化,您可以将查询中的动态数据添加到告警标签和注解中。动态数据增强了告警上下文,使响应人员能够更轻松地快速评估和解决问题。

本页提供了标签和注解模板化的常见示例。有关模板化的更多信息,请参阅

注解示例

注解向告警实例添加额外详细信息,常用于提供有助于识别问题和指导响应的有用信息。

注解的一个常见用例是显示触发告警的特定查询值或阈值。

例如,您可以显示来自 $values 变量的查询值,以告知触发告警的 CPU 值。

CPU usage has exceeded 80% ({{ $values.A.value }}) for the last 5 minutes.

或者,您可以使用 index() 函数如下获取查询值。

CPU usage has exceeded 80% ({{ index $values "A" }}) for the last 5 minutes.
template_output
CPU usage has exceeded 80% (81.2345) for the last 5 minutes.

包含标签以获取额外详细信息

为了提供额外的上下文,您可以使用 $labels 变量包含查询中的标签。

例如,前面的示例也可以包含受影响的 instance

CPU usage for {{ $labels.instance }} has exceeded 80% ({{ $values.A.Value }}) for the last 5 minutes.
template_output
CPU usage for Instance 1 has exceeded 80% (81.2345) for the last 5 minutes.

您可以将查询返回的任何标签合并到模板中。例如,以下模板包含有关告警发生的环境和区域的信息。

Alert triggered in {{ $labels.environment }} on {{ $labels.region }} region.
template_output
Alert triggered in production on AMER region.

要打印即时查询的值,您可以使用 index 函数或 $values 变量打印其 Ref ID

{{ $values.A.Value }}

对于范围查询,使用 reduce 表达式将其从时序数据缩减为即时向量。然后,您可以通过引用其 Ref ID 来打印结果。例如,如果 reduce 表达式对 Ref ID 为 BA 进行平均,则您将打印 $values.B

{{ $values.B.Value }}

人性化显示查询值

要人性化显示即时查询的值,请使用 humanize 函数

{{ humanize $values.A.Value }}

或者

{{ humanize (index $values "A").Value }}
template_output
554.9

要将即时查询的值打印为百分比,请使用 humanizePercentage 函数

{{ humanizePercentage $values.A.Value }}
template_output
10%

有关显示或格式化数据的更多函数,请参阅

标签示例

标签决定了告警如何路由和管理,确保通知在正确的时间发送给正确的团队。如果您的查询返回的标签未能完全捕获所需的上下文,您可以创建一个新标签并根据查询数据设置其值。

基于查询值

以下是根据查询值创建 severity 标签的示例

Go
{{- if (gt $values.A.Value 90.0) -}}critical
{{- else if (gt $values.A.Value 80.0) -}}high
{{- else if (gt $values.A.Value 60.0) -}}medium
{{- else -}}low
{{- end -}}

在此示例中,severity 标签由查询值决定

  • 值高于 90 时为 critical
  • 值高于 80 时为 high
  • 值高于 60 时为 medium
  • 以及值低于 60 时为 low

然后,您可以使用 severity 标签控制告警的处理方式。例如,您可以立即发送 critical 告警,同时将 low 级别告警路由给团队进行进一步调查。

注意

告警实例通过其标签集唯一标识。

  • 避免在标签中显示查询值,因为这会创建大量告警实例——每个不同的标签集对应一个。请改为在注解中使用查询值。
  • 如果模板化标签的值发生变化,它会映射到不同的告警实例,并且当前标签值不再存在时,先前的实例会转换到 No data 状态。

基于查询标签

您可以使用标签来区分来自不同环境(例如生产、预发布、开发)的告警。例如,您可能想添加一个标签,根据实例的标签设置环境。以下是模板化方法

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

这将打印

  • 例如,对于实例 prod-server-1,标签将是 production
  • 对于 staging-server-1,标签将是 staging
  • 所有其他实例将标记为 development

为了使此模板更灵活,您可以使用正则表达式通过 match() 函数将实例名称与实例名称前缀匹配

Go
{{- if match "^prod-server-.*" $labels.instance -}}
production
{{- else if match "^staging-server-.*" $labels.instance -}}
staging
{{- else -}}
development
{{- end -}}