菜单
Grafana Cloud Enterprise Open source

注释和标签模板参考

警报规则中的注释和标签可以使用纯文本定义。但是,您也可以定义模板,使用警报规则查询中的动态数据自定义其值。

例如,您可以模板化 summary 注释以包含来自查询值的信息,为响应人员提供相关的告警上下文。有关各种用例,请参阅模板注释和标签

在模板中,变量代表查询中的动态值,而函数则执行操作来转换或格式化这些数据。

变量

变量代表警报规则查询中的动态值,可以在模板中显示或访问。

符号 $. 用于引用变量及其属性。您可以使用 $ 符号后跟变量名直接在警报规则定义中引用变量。类似地,您可以使用点 (.) 表示法在警报规则模板中访问变量的属性。

{{ $values.A.Value }}

模板基于 Go 模板系统。有关附加信息,请参阅模板语言

模板化注释和标签时,可以使用以下变量

变量描述
$labels包含来自查询的所有标签,仅限于查询标签。
$values包含所有即时查询和表达式的标签和浮点值,按其引用 ID 索引。
$value一个字符串,包含警报规则中所有即时查询的标签和值;阈值、聚合、数学表达式和经典条件。当使用单个数据源时,它返回查询的值。通常建议使用$values

$labels

$labels 变量包含来自查询的所有标签。它不包含用户配置和保留的标签,仅包含查询标签。

An alert rule displaying labels and value from a query.
一个警报规则显示来自查询的标签和值。

例如,假设您的查询返回所有服务器的 CPU 使用率,并且您有一个警报规则,当任何服务器在过去 5 分钟内 CPU 使用率超过 80% 时触发。您希望在警报中添加一个摘要注释,告诉您哪台服务器的 CPU 使用率很高。使用 $labels 变量,您可以编写一个模板,打印出人类可读的句子,例如

CPU usage for {{ $labels.instance }} has exceeded 80% for the last 5 minutes

此模板的结果将是

CPU usage for server1 has exceeded 80% for the last 5 minutes

如果您使用的是经典条件,则 $labels 将不包含查询中的任何标签。经典条件会丢弃这些标签,以强制执行一维行为(每个警报规则最多只有一个警报)。如果您想在模板中使用来自查询的标签,请参阅此处的示例。

$values

$values 变量是一个表,包含所有即时查询和表达式的标签和浮点值,按其引用 ID 索引(例如,ABC 等)。它不包含范围查询的结果,因为它们可以返回数百或数千行。

每个引用 ID,例如 $values.A,都有以下属性

属性类型描述
浮点数即时查询或表达式返回的值。
标签键/值对与实例查询或表达式关联的标签。

这是之前的示例,现在打印即时查询的值,其引用 ID 为 A

{{ $values.A.Value }} CPU usage for {{ $labels.instance }} over the last 5 minutes.

如果警报带有标签 instance=server1 且查询返回 81.2345,则模板将打印

81.2345 CPU usage for instance1 over the last 5 minutes.

如果引用 ID A 中的查询是范围查询而不是即时查询,则添加一个引用 ID 为 B 的聚合表达式,并将 $values.A.Value 替换为 $values.B.Value

{{ $values.B.Value }} CPU usage for {{ $labels.instance }} over the last 5 minutes.

或者,您可以使用 index() 函数检索查询值

{{ index $values "B" }} CPU usage for {{ index $labels "instance" }} over the last 5 minutes.

$value

$value 变量是一个字符串,包含警报规则中所有即时查询的标签和值;阈值、聚合、数学表达式和经典条件。

当警报规则中使用单个数据源时,$value 将直接返回查询值。

此示例打印 $value 变量

{{ $value }}: CPU usage has exceeded 80% for the last 5 minutes.

当使用多个数据源时,它将显示类似这样的内容

[ var='A' labels={instance=instance1} value=81.234, , [ var='B' labels={instance=instance2} value=1 ] ]: CPU usage has exceeded 80% for the last 5 minutes.

但是使用单个数据源时,它只会显示查询的值

81.234: CPU usage has exceeded 80% for the last 5 minutes.

相反,我们建议使用$values,它包含与 $value 相同的信息,但结构化为更易于使用的表格格式。

函数

函数可以在模板中执行操作,例如转换或格式化数据。

请注意,Go 模板语言提供的函数,例如 indexandprintflen,以及许多其他函数,都可用。

此外,以下函数也适用于模板化注释和标签

数字

名称参数返回描述
humanize数字或字符串字符串将十进制数字人类化。
humanize1024数字或字符串字符串humanize 类似,但使用 1024 作为基数而不是 1000。
humanizeDuration数字或字符串字符串将以秒为单位的持续时间人类化。
humanizePercentage数字或字符串字符串将比率值人类化为百分比。
humanizeTimestamp数字或字符串字符串将 Unix 时间戳人类化。
toTime数字或字符串时间将以秒为单位的 Unix 时间戳转换为时间。

字符串

名称参数返回描述
title字符串字符串将每个单词的首字母大写。
toUpper字符串字符串将所有文本转换为大写。
toLower字符串字符串将所有文本转换为小写。
stripPort字符串字符串仅返回主机名。
match模式,文本布尔值将文本与正则表达式模式匹配。
reReplaceAll模式,替换字符串,文本字符串替换与正则表达式匹配的文本。
graphLink表达式字符串返回给定表达式和数据源在 Explore 中的图形视图路径。
tableLink表达式字符串返回给定表达式和数据源在 Explore 中的表格视图路径。
parseDuration字符串浮点数解析持续时间字符串(如“1h”)为它所代表的秒数。
stripDomain字符串字符串返回移除 FQDN 域名部分的结果。

其他

名称参数返回描述
args[]interface{}map[string]interface{}将对象列表转换为带有键 arg0, arg1 等的 map。
safeHtml字符串字符串将字符串标记为不需要自动转义的 HTML。
externalURL字符串返回在 ini 文件中配置的 Grafana 服务器的外部 URL。
pathPrefix字符串返回在 ini 文件中配置的 Grafana 服务器的路径。

关于这些函数的进一步上下文,请注意 Grafana 中的模板基于 Prometheus 模板实现,从而能够在 Grafana 中使用这些函数和类似于 Prometheus 的模板来格式化告警消息。

humanize

humanize 函数将十进制数字人类化

{{ humanize 1000.0 }}
1k

humanize1024

humanize1024 的工作原理类似于 humanize,但使用 1024 作为基数而不是 1000

{{ humanize1024 1024.0 }}
1ki

humanizeDuration

humanizeDuration 函数将以秒为单位的持续时间人类化

{{ humanizeDuration 60.0 }}
1m 0s

humanizePercentage

humanizePercentage 函数将 0 到 1 之间的比率值人类化为百分比

{{ humanizePercentage 0.2 }}
20%

humanizeTimestamp

humanizeTimestamp 函数将 Unix 时间戳人类化

{{ humanizeTimestamp 1577836800.0 }}
2020-01-01 00:00:00 +0000 UTC

toTime

toTime 函数将以秒为单位的 Unix 时间戳转换为时间。

{{ toTime 1727802106 }}
2024-10-01 17:01:46 +0000 UTC

title

title 函数将每个单词的首字母大写

{{ title "hello, world!" }}
Hello, World!

toUpper

toUpper 函数将所有文本转换为大写

{{ toUpper "Hello, world!" }}
HELLO, WORLD!

toLower

toLower 函数将所有文本转换为小写

{{ toLower "Hello, world!" }}
hello, world!

stripPort

stripPort 将字符串分割为主机名和端口,然后仅返回主机名

{{ stripPort "example.com:8080" }}
example.com

match

match 函数将文本与正则表达式模式匹配

{{ match "a.*" "abc" }}
true

reReplaceAll

reReplaceAll 函数替换与正则表达式匹配的文本

{{ reReplaceAll "localhost:(.*)" "example.com:$1" "localhost:8080" }}
example.com:8080

graphLink 函数返回给定表达式和数据源在 Explore 中的图形视图路径

{{ graphLink "{\"expr\": \"up\", \"datasource\": \"gdev-prometheus\"}" }}
/explore?left=["now-1h","now","gdev-prometheus",{"datasource":"gdev-prometheus","expr":"up","instant":false,"range":true}]

parseDuration

parseDuration 函数解析持续时间字符串(如“1h”)为它所代表的秒数。

{{ parseDuration "1h" }}
3600

stripDomain

stripDomain 移除 FQDN 的域名部分,保留端口不变

{{ stripDomain "example.com:8080" }}
example:8080

tableLink 函数返回给定表达式和数据源在 Explore 中的表格视图路径

{{ tableLink "{\"expr\": \"up\", \"datasource\": \"gdev-prometheus\"}" }}
/explore?left=["now-1h","now","gdev-prometheus",{"datasource":"gdev-prometheus","expr":"up","instant":true,"range":false}]

args

args 函数将对象列表转换为带有键 arg0, arg1 等的 map。这旨在允许将多个参数传递给模板

{{define "x"}}{{.arg0}} {{.arg1}}{{end}}{{template "x" (args 1 "2")}}
1 2

safeHtml

safeHtml 函数将字符串标记为不需要自动转义的 HTML

{{ safeHtml "<b>Text</b>"}}
<b>Text</b>

externalURL

externalURL 函数返回在 ini 文件中配置的 Grafana 服务器的外部 URL

{{ externalURL }}
https://example.com/grafana

pathPrefix

pathPrefix 函数返回在 ini 文件中配置的 Grafana 服务器的路径

{{ pathPrefix }}
/grafana

与通知模板的差异

通知模板和警报规则模板都使用 Go 模板系统。然而,通知模板中可用的函数和变量与注释和标签模板中使用的不同,后者在本文档中描述。

注释和标签模板在单个警报实例的上下文中操作,而通知模板应用于包含一组警报的通知。

例如,通知模板提供 .Alerts 变量,其中包含通知中所有触发和已解决的警报列表。此变量在警报规则模板中不可用,警报规则模板在单个警报实例的上下文中操作。

此外,您不能像通知模板那样重用标签和注释的模板。相反,您需要在标签或注释字段中内联编写每个模板,并手动复制到您想要重用模板的任何位置。