如何获取指标最后已知样本的时间戳?实现服务最后运行时间展示
实现服务最后运行时间表格仪表盘
核心思路
利用Prometheus的last_over_time函数,查询服务指标(如up或process_start_time_seconds)的历史样本,获取每个服务最后一次上报数据的时间戳,不受当前仪表盘时间窗口限制,只要Prometheus存储了对应历史数据即可展示。
具体配置步骤
1. 编写PromQL查询
根据需求选择以下任一查询:
基于
up指标(推荐,直接获取最后在线时间):last_over_time(up{job="你的服务job名"}[1y])说明:
[1y]表示查询过去1年的样本,可根据你的数据保留周期调整(比如[7d]代表7天);job="你的服务job名"替换为实际用于标识服务的标签,也可结合instance等标签精准筛选。基于
process_start_time_seconds指标(获取最后启动时间):last_over_time(process_start_time_seconds{job="你的服务job名"}[1y])说明:返回服务最后一次上报的启动时间,适合需要记录启动时间的场景。
2. Grafana表格面板配置
- 新建一个Table面板,将上述PromQL查询添加到面板的查询编辑器中。
- 切换到Transform标签,添加「Reduce」转换:
- 分组依据选择用于区分服务的标签(如
job、instance) - 聚合函数选择「Last」,确保每个服务仅显示一行数据
- 分组依据选择用于区分服务的标签(如
- 切换到Field标签,对查询结果的字段进行配置:
- 将
Value字段的格式设置为「Time」,列名修改为Last Seen - 可添加其他标签字段(如
instance、job)作为表格的服务名称列,方便识别
- 将
3. 效果验证
即使仪表盘时间窗口设置为「最近1小时」,只要Prometheus中存储了服务5天前的历史样本,表格仍会显示该服务的Last Seen时间戳为5天前的对应时间。
内容的提问来源于stack exchange,提问作者sOltan
相关产品推荐
相关产品推荐

