Prometheus 支持在警报的注释和标签以及服务的控制台页面中使用模板。模板能够针对本地数据库运行查询、遍历数据、使用条件、格式化数据等,Prometheus 模板语言基于 Go 模板系统。
处理时间序列数据的主要数据结构是 simple,定义如下:
type sample struct { Labels map[string]string Value float64 }
sample 的度量名称由 Labels 映射中一个特殊的 __name__ 标签编码。
[]sample 表示样本列表。
Go 中的 interface{} 类似于 C 语言中的 void 指针。
除了 Go 模板提供的默认函数外,Prometheus 还提供了更易于在模板中处理查询结果的函数。
如果在管道中使用函数,管道值将作为最后一个参数传递。
名称 | 参数 | 返回值 | 备注 |
query | query string | []sample | 查询数据库,不支持返回范围向量。 |
first | []sample | sample | 等于索引为0 |
label | label, sample | string | 等同于索引 sample.Labels 标签 |
value | sample | float64 | 等同于 sample.Value |
sortByLabel | label, []samples | []sample | 根据给定的标签对样本进行排序,稳定。 |
首先,标签和值的目的是使查询结果在管道中易于使用。
名称 | 参数 | 返回值 | 备注 |
humanize | number or string | string | 使用 metric 前缀将数字转换为更易读的格式。 |
humanize1024 | number or string | string | 与 humanize 类似,但使用 1024 作为基数,而不是 1000。 |
humanizeDuration | number or string | string | 将以秒为单位的持续时间转换为更易读的格式。 |
humanizePercentage | number or string | string | 将比率值转换为 100 的分数。 |
humanizeTimestamp | number or string | string | 将以秒为单位的 Unix 时间戳转换为更易读的格式。 |
toTime | number or string | *time.Time | 将Unix时间戳 (以秒为单位) 转换为time.Time。 |
人性化函数旨在产生供人类使用的合理输出,并不保证不同版本的 Prometheus 会返回相同的结果。
名称 | 参数 | 返回值 | 备注 |
title | string | string | strings.Title, 将每个单词的第一个字符大写。 |
toUpper | string | string | strings.ToUpper, 将所有字符转换为大写字母。 |
toLower | string | string | strings.ToLower, 将所有字符转换为小写。 |
stripPort | string | string | net.SplitHostPort, 将字符串拆分为主机和端口,然后只返回主机。 |
match | pattern, text | boolean | regexp.MatchString,测试非锚定 regexp 匹配。 |
reReplaceAll | pattern, replacement, text | string | Regexp.ReplaceAllString,Regexp 替换,未锚定。 |
graphLink | expr | string | 返回表达式浏览器中图形视图的路径。 |
tableLink | expr | string | 返回表达式浏览器中表格("Table")视图的路径。 |
parseDuration | string | float | 将持续时间字符串(如 "1h")解析为所代表的秒数。 |
stripDomain | string | string | 删除 FQDN 的域名部分,保留端口不变。 |
名称 | 参数 | 返回值 | 备注 |
args | []interface{} | map[string]interface{} | 这将把对象列表转换为包含 arg0、arg1 等键的映射。这样做的目的是允许向模板传递多个参数。 |
tmpl | string, []interface{} | nothing | 与内置模板类似,但允许使用非字母作为模板名称。请注意,结果被假定为安全的,不会自动转码。仅适用于控制台。 |
safeHtml | string | string | 将字符串标记为无需自动换码的 HTML 字符串。 |
externalURL | none | string | 可从外部访问 Prometheus 的外部 URL。 |
pathPrefix | none | string | 控制台模板中使用的外部 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。
控制台还可以访问以 {{define "templateName"}}...{{end}} 定义的所有模板,这些模板位于 -web.console.libraries 标志指向的目录中的 *.lib 文件中。由于这是一个共享命名空间,请注意避免与其他用户发生冲突。以 prom、_prom 和 ___ 开头的模板名称以及上述函数均保留给 Prometheus 使用。