You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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数据源

  1. 数据源选择Alertmanager,查询活跃告警时,每条告警自带startsAt字段(告警触发的时间)
  2. 在表格面板中添加计算列,用Grafana的模板函数计算时间差:
    直接用{{ humanizeDuration (dateDiff $value.startsAt now) }},就能自动输出1m、2h、3d这种友好格式

使用Prometheus数据源

  1. 查询指标alertmanager_alerts{state="active"},这个指标记录了所有活跃告警
  2. 用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 23:15:33