如何在Grafana中统计Prometheus监控的ASG实例上报时长?
实现ASG实例上报持续时长列的方法
完全可以实现,核心思路是计算当前查询时间与实例首次上报up指标的时间戳差值,再转换为分钟,具体步骤如下:
1. 正确的PromQL查询语句
新增以下查询来获取实例的上报时长:
(time() - timestamp(first_over_time(up{asg_id="$asg_id"}[$__range]))) / 60
语句说明:
$__range:Grafana内置变量,自动匹配当前面板选择的时间范围,确保能获取到实例最早的上报样本first_over_time(...):提取指定时间范围内该实例up指标的第一个样本(即首次上报的样本)timestamp(...):提取该样本的时间戳(Unix时间,单位秒)time():获取当前查询的时间戳- 除以60:将秒数转换为分钟
2. Grafana表格配置
- 保留你原有的查询
count(up{asg_id="$asg_id"}) by (asg_instance),并将其别名设置为ID(或在字段映射中把asg_instance字段映射为ID列) - 将上述时长查询的别名设置为
Duration (m) - 在表格的「字段」设置中,调整列顺序,将
ID和Duration (m)对应到目标位置
为什么之前的min/min_over_time不生效?
min和min_over_time是针对指标数值计算的(比如up的取值是0或1),无法直接获取样本的时间戳。而我们需要的是样本的上报时间,因此必须用first_over_time提取首次上报的样本,再通过timestamp()获取其时间戳来计算差值。
内容的提问来源于stack exchange,提问作者jrich523
相关产品推荐
相关产品推荐

