Prometheus学习系列(十六)之模板例子

本文围绕Prometheus展开,介绍其支持在警报注释、标签及服务控制台页面进行模板化,模板语言基于Go模板系统。详细阐述了简单警报字段模板、简单迭代、展示值、使用命令行URL参数、高级迭代、定义可重用模板等内容,还给出了Prometheus官网及作者Github地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)}}
七、链接

Prometheus官网地址:https://prometheus.io/
我的Github:https://github.com/Alrights/prometheus

### 关于 Prometheus Email 告警模板的配置 Prometheus 的告警管理器 (Alertmanager) 支持通过自定义模板来调整电子邮件的内容结构。这些模板允许用户灵活地控制发送到接收方的信息格式,从而满足特定需求。 #### 自定义 Email 模板的基础 Alertmanager 提供了一组默认模板用于生成告警消息,但也可以通过创建自定义模板覆盖默认行为。要实现这一点,需编辑 Alertmanager 的 `templates` 文件夹中的 `.tmpl` 文件[^1]。此文件可以包含 Go 模板语法,以便动态生成基于告警数据的消息内容。 以下是典型的目录布局和相关路径设置: ```yaml global: smtp_smarthost: 'smtp.example.com:587' smtp_from: 'alertmanager@example.com' smtp_auth_username: 'alertmanager' smtp_auth_password: 'password' route: receiver: 'team-X-mail' receivers: - name: 'team-X-mail' email_configs: - to: 'team-x@example.com' html: '{{ template "email.html" . }}' # 调用自定义 HTML 模板 ``` 在此示例中,`html:` 字段指定了如何渲染邮件正文部分,并调用了名为 `"email.html"` 的模板[^2]。 #### 创建自定义模板实例 下面是一个简单的自定义模板例子: ```go {{ define "email.html" }} <html> <head></head> <body> <h1>告警通知</h1> <p><strong>状态:</strong> {{ .Status }}</p> <p><strong>告警名称:</strong> {{ .CommonLabels.alertname }}</p> <p><strong>时间戳:</strong> {{ .StartsAt.Format "Mon, Jan 2, 2006, 3:04 PM MST" }}</p> <table border="1"> <tr> <th>标签名</th> <th>值</th> </tr> {{ range $label, $value := .CommonLabels }} <tr> <td>{{ $label }}</td> <td>{{ $value }}</td> </tr> {{ end }} </table> <p><strong>描述:</strong> {{ .Annotations.summary }}</p> </body> </html> {{ end }} ``` 该模板利用了 Go 的模板引擎功能,能够遍历并展示来自 PromQL 查询的结果集中的元数据字段(如 Labels 和 Annotations)。它还包含了基本的 HTML 结构以增强可读性和美观度[^1]。 #### 配置加载与验证 为了使新模板生效,在启动 Alertmanager 服务时应确保其指向正确的模板文件位置。例如: ```bash ./amtool templates reload /path/to/templates/ ``` 这一步骤会重新加载所有已更改的模板而无需重启整个进程[^2]。 另外需要注意的是,如果遇到任何错误,则可以通过日志排查问题所在;通常情况下,这些问题源于语法不正确或是变量未正确定义等原因造成的解析失败。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值