如何在Grafana中添加Alertmanager告警时长列及查询相关文档
Alertmanager查询指南与Grafana告警时长列实现
一、你贴的示例代码解析
这段是Prometheus告警规则配置的片段,不是Alertmanager的查询语句,拆解给你看:
for: 5m expr: ... annotations: timestamp: > time: {{ with query "time()" }}{{ . | first | value | humanizeTimestamp }}{{ end }}
for: 5m:告警触发后,得持续满足表达式5分钟才会推送到Alertmanager,防止临时波动导致误告警expr: ...:这里填PromQL查询语句,用来定义告警触发的条件,比如up == 0就是检测服务是否下线annotations:用来给告警添加额外说明信息的字段- 里面的
timestamp注解用了Go模板语法:{{ with query "time()" }}:执行PromQL的time()查询,获取当前Unix时间戳{{ . | first | value }}:从查询结果里取出第一个样本的数值(也就是当前时间戳){{ humanizeTimestamp }}:把Unix时间戳转换成人类可读的格式,比如2024-05-20 14:30:00
二、Grafana添加告警时长列的实操方法
要在表格里显示活跃告警的时长(1m、1h这种格式),分两种场景处理:
使用Alertmanager数据源
- 数据源选择Alertmanager,查询活跃告警时,每条告警自带
startsAt字段(告警触发的时间) - 在表格面板中添加计算列,用Grafana的模板函数计算时间差:
直接用{{ humanizeDuration (dateDiff $value.startsAt now) }},就能自动输出1m、2h、3d这种友好格式
使用Prometheus数据源
- 查询指标
alertmanager_alerts{state="active"},这个指标记录了所有活跃告警 - 用
time() - alertmanager_alerts_created计算告警已持续的秒数,再用humanizeDuration函数格式化,比如humanizeDuration(time() - alertmanager_alerts_created)
三、Alertmanager查询的核心知识点
1. Alertmanager API查询
Alertmanager通过API对外暴露告警数据,常用接口:
/api/v2/alerts:返回所有活跃告警的完整信息,包含startsAt、labels、annotations等关键字段/api/v2/alerts/groups:按你配置的路由规则分组返回告警
这些API返回的JSON数据,Grafana的Alertmanager数据源会自动解析,无需手动处理
2. 模板语法详解
你看到的模板是Prometheus/Alertmanager通用的Go模板,常用函数:
query():在告警规则的注解/标签中执行PromQL查询humanizeTimestamp:将Unix时间戳转换为可读时间格式humanizeDuration:将秒数转换为1m、1h这种简洁的时长格式value:提取PromQL查询结果中的样本数值
这些模板不仅能用于告警规则配置,还可以定制Alertmanager的通知内容,比如邮件、Slack消息的格式
3. Grafana字段处理技巧
拿到告警数据后,Grafana的字段转换功能可以快速加工数据:
- 可以将
startsAt字段转换为时间格式,再添加计算列计算时长 - 也可以直接在字段别名中使用模板函数,无需单独添加计算列
内容的提问来源于stack exchange,提问作者cduma
相关产品推荐
相关产品推荐

