Prometheus

56142
下载
Prometheus 是一个开源的监控和告警系统,专注于时间序列数据的采集与存储。由 SoundCloud 开发,配备高级查询语言PromQL,便于数据挖掘与分析,并无缝对接多种可视化平台。

模版示例


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."

告警字段模板将在每轮规则迭代时对触发(fire)的每个告警执行一次,因此请保持查询和模板的轻量化。如果需要更复杂的告警模板,则推荐使用控制台进行操作。

简单遍历

下面显示了一组实例及其状态:

{{ 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>接收</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>发送</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 "myTemplate"}}
do something
{{end}}
{{/* 使用模版 */}}
{{template "myTemplate"}}

模板最多只能接受一个参数。可以使用args函数来包装多个参数。

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

该文档基于 Prometheus 官方文档翻译而成。


observability.cn Authors 2024 | Documentation Distributed under CC-BY-4.0
Copyright © 2017-2024, Alibaba. All rights reserved. Alibaba has registered trademarks and uses trademarks.
浙ICP备2021005855号-32