请参与 Prometheus 用户调研(2026 年 3 月版) ,帮助社区确定未来开发工作的优先级!

模板参考

Prometheus 支持在告警的注解和标签中,以及在提供的控制台页面中使用模板。模板能够针对本地数据库运行查询、遍历数据、使用条件判断、格式化数据等。Prometheus 模板语言基于 Go 模板  系统。

数据结构

处理时间序列数据的主要数据结构是样本 (sample),定义如下:

type sample struct {
  Labels map[string]string
  Value  interface{}
}

样本的指标名称编码在 Labels 映射中的特殊 __name__ 标签内。

[]sample 表示一个样本列表。

Go 语言中的 interface{} 类似于 C 语言中的 void 指针。

函数

除了 Go 模板提供的默认函数 外,Prometheus 还提供了一些函数,以便在模板中更轻松地处理查询结果。

如果函数在管道 (pipeline) 中使用,管道值将作为最后一个参数传递。

查询

名称参数返回值备注
query查询字符串[]sample查询数据库,不支持返回范围向量 (range vectors)。
first[]samplesample等同于 index a 0
label标签,样本字符串等同于 index sample.Labels label
valuesampleinterface{}等同于 sample.Value
sortByLabel标签,[]samples[]sample按给定的标签对样本进行排序。排序是稳定的。

firstlabelvalue 旨在使查询结果易于在管道中使用。

数字

名称参数返回值备注
humanize数字或字符串字符串将数字转换为更易读的格式,使用公制前缀 
humanize1024数字或字符串字符串类似于 humanize,但使用 1024 而非 1000 作为底数。
humanizeDuration数字或字符串字符串将以秒为单位的持续时间转换为更易读的格式。
humanizePercentage数字或字符串字符串将比率值转换为 100 的分数。
humanizeTimestamp数字或字符串字符串将以秒为单位的 Unix 时间戳转换为更易读的格式。
toTime数字或字符串*time.Time将以秒为单位的 Unix 时间戳转换为 time.Time。
toDuration数字或字符串*time.Duration将以秒为单位的持续时间转换为 time.Duration。
nowfloat64返回模板执行时刻的 Unix 时间戳(秒)。

人性化 (Humanizing) 函数旨在产生适合人类阅读的输出,不保证在不同 Prometheus 版本间返回完全相同的结果。

字符串

名称参数返回值备注
title字符串字符串cases.Title ,将每个单词的首字母大写。
toUpper字符串字符串strings.ToUpper ,将所有字符转换为大写。
toLower字符串字符串strings.ToLower ,将所有字符转换为小写。
stripPort字符串字符串net.SplitHostPort ,将字符串拆分为主机和端口,仅返回主机部分。
match模式,文本布尔值regexp.MatchString  测试非锚定的正则表达式匹配。
reReplaceAll模式,替换值,文本字符串Regexp.ReplaceAllString  正则表达式替换,非锚定。
graphLinkexpr字符串返回表达式浏览器中用于该表达式的图形视图路径。
tableLinkexpr字符串返回表达式浏览器中用于该表达式的表格视图路径。
parseDuration字符串浮点数将如 "1h" 的持续时间字符串解析为代表的秒数。
stripDomain字符串字符串移除 FQDN 的域名部分。端口保持不变。
urlQueryEscape字符串字符串url.QueryEscape  转义字符串,以便可以安全地放入 URL 查询中。

其他

名称参数返回值备注
args[]interface{}map[string]interface{}将对象列表转换为键为 arg0、arg1 等的映射。旨在允许将多个参数传递给模板。
tmpl字符串,[]interface{}类似于内置的 template,但允许使用非字面量作为模板名称。注意,结果被认为是安全的,不会被自动转义。仅在控制台中可用。
safeHtml字符串字符串将字符串标记为不需要自动转义的 HTML。
externalURL字符串Prometheus 外部可访问的 URL。
pathPrefix字符串用于控制台模板的外部 URL 路径 

模板类型的差异

每种类型的模板都提供不同的信息,可用于参数化模板,并存在一些其他差异。

告警字段模板

.Value.Labels.ExternalLabels.ExternalURL 分别包含告警值、告警标签、全局配置的外部标签以及外部 URL(使用 --web.external-url 配置)。为方便起见,它们也作为 $value$labels$externalLabels$externalURL 变量暴露出来。

控制台模板

控制台在 /consoles/ 上暴露,并从 -web.console.templates 标志指向的目录中获取。

控制台模板使用 html/template  渲染,它提供自动转义功能。若要绕过自动转义,请使用 safe* 函数。

URL 参数可用作 .Params 中的映射。要按名称访问多个 URL 参数,.RawParams 是每个参数的列表值映射。URL 路径在 .Path 中可用,不包含 /consoles/ 前缀。全局配置的外部标签在 .ExternalLabels 中可用。这四个也提供了便捷变量:$rawParams$params$path$externalLabels

控制台还可以访问在 -web.console.libraries 标志指向的目录中的 *.lib 文件中定义的所有模板(使用 {{define "templateName"}}...{{end}})。由于这是一个共享命名空间,请务必避免与其他用户冲突。以 prom_prom__ 开头的模板名称,以及上述列出的函数,均为 Prometheus 保留使用。

本页内容