CnOps 智能运维与可观测社区
首页开源项目实践文章视频课程常见问答开发者工具STAROps 专题
导航菜单
首页开源项目实践文章视频课程常见问答开发者工具STAROps 专题

CnOps 智能运维与可观测社区

愿景

CnOps 智能运维与可观测社区是一个以"智能运维与可观测"为核心的开放、包容、分享的技术社区,旨在聚集运维专家、开发者和爱好者,共同探讨、学习和分享可观测最佳实践与最新技术,与众多技术社区合作互动,共同探讨交叉领域的技术挑战,推动可观测领域的创新与进步。

内容社区

  • 实践文章
  • 视频课程
  • 开源项目
  • 常见问答
  • 开发者工具

友情链接

  • Prometheus
  • Grafana Lab
  • OpenTelemetry
  • LoongCollector

关注我们

阿里云云原生公众号阿里云云原生
阿里云可观测公众号阿里云可观测

Copyright © 2026 CnOps 社区. All rights reserved.

首页/开源项目/Prometheus/模板示例
文档目录
安装Prometheus Agent 模式存储联邦编写 HTTP 服务发现管理 APIPrometheus 3.0 迁移指南API 稳定性保证功能开关
配置定义记录规则告警规则模板示例模板参考promtool 的 HTTP 配置规则的单元测试HTTPS 和认证

Prometheus

模板示例

Prometheus 支持在告警的注解和标签以及控制台页面中使用模板。模板能够对本地数据库运行查询、遍历数据、使用条件、格式化数据等。Prometheus 模板语言基于 Go 模板系统。 告警字段模板将在每次规则迭代时为每个触发的告警执行,因此请保持查询和模板轻量。如果你需要更复杂的告警模板,建议改为链接到控制台。 这将显示实例列表以及它们是否在线: 特殊的 ....

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

简单的告警字段模板

alert: InstanceDown
expr: up == 0
for: 5m
labels:
  severity: page
annotations:
  summary: "Instance {{$labels.instance}} down"
  description: "{{$labels.instance}} of job {{$labels.job}} has been down for more than 5 minutes."

告警字段模板将在每次规则迭代时为每个触发的告警执行,因此请保持查询和模板轻量。如果你需要更复杂的告警模板,建议改为链接到控制台。

简单迭代

这将显示实例列表以及它们是否在线:

{{ range query "up" }}
  {{ .Labels.instance }} {{ .Value }}
{{ end }}

特殊的 . 变量包含每次循环迭代的当前样本值。

显示单个值

{{ with query "some_metric{instance='someinstance'}" }}
  {{ . | first | value | humanize }}
{{ end }}

Go 和 Go 的模板语言都是强类型的,因此必须检查是否返回了样本以避免执行错误。例如,如果抓取或规则评估尚未运行,或者主机宕机,就可能发生这种情况。

包含的 prom_query_drilldown 模板处理此问题,允许对结果进行格式化,并链接到表达式浏览器。

使用控制台 URL 参数

{{ with printf "node_memory_MemTotal{job='node',instance='%s'}" .Params.instance | query }}
  {{ . | first | value | humanize1024 }}B
{{ end }}

如果以 console.html?instance=hostname 访问,.Params.instance 将评估为 hostname。

高级迭代

<table>
{{ range printf "node_network_receive_bytes{job='node',instance='%s',device!='lo'}" .Params.instance | query | sortByLabel "device"}}
  <tr><th colspan=2>{{ .Labels.device }}</th></tr>
  <tr>
    <td>Received</td>
    <td>{{ with printf "rate(node_network_receive_bytes{job='node',instance='%s',device='%s'}[5m])" .Labels.instance .Labels.device | query }}{{ . | first | value | humanize }}B/s{{end}}</td>
  </tr>
  <tr>
    <td>Transmitted</td>
    <td>{{ with printf "rate(node_network_transmit_bytes{job='node',instance='%s',device='%s'}[5m])" .Labels.instance .Labels.device | query }}{{ . | first | value | humanize }}B/s{{end}}</td>
  </tr>{{ end }}
</table>

这里我们遍历所有网络设备并显示每个设备的网络流量。

由于 range 操作没有指定变量,在循环内 .Params.instance 不可用,因为 . 现在是循环变量。

定义可重用模板

Prometheus 支持定义可重用的模板。当与控制台库支持结合使用时特别强大,允许在控制台之间共享模板。

{{/* Define the template */}}
{{define "myTemplate"}}
  do something
{{end}}

{{/* Use the template */}}
{{template "myTemplate"}}

模板限于一个参数。args 函数可用于包装多个参数。

{{define "myMultiArgTemplate"}}
  First argument: {{.arg0}}
  Second argument: {{.arg1}}
{{end}}
{{template "myMultiArgTemplate" (args 1 2)}}

文章大纲