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

如何重构Prometheus查询以准确计算Jenkins任务构建时长增幅

解决方案

修复“成功构建平均时长”计算的稀释问题

原查询的核心错误是先对全量样本计算平均,再过滤成功构建的时间序列,导致平均结果包含非成功构建的无效数据。正确逻辑是先过滤成功构建的时长指标,再计算时间范围内的平均值:

最终查询(检测当前成功构建时长超180天平均50%)

default_jenkins_builds_last_build_duration_milliseconds{default_jenkins_builds_last_build_result_ordinal="0"} 
> 1.5 * avg_over_time(default_jenkins_builds_last_build_duration_milliseconds{default_jenkins_builds_last_build_result_ordinal="0"}[180d])

实现“当前与上一次成功构建时长差值”并解决NaN问题

如果需要对比当前与上一次成功构建的时长差,同时避免NaN导致的图表断裂,可结合last_over_time(获取最近成功构建时长)和keep_last_value(填充NaN)实现:

1. 获取当前最近一次成功构建时长(自动补全NaN)

keep_last_value(last_over_time(default_jenkins_builds_last_build_duration_milliseconds{default_jenkins_builds_last_build_result_ordinal="0"}[24h]))

2. 获取上一次成功构建时长(补全NaN)

keep_last_value(last_over_time(default_jenkins_builds_last_build_duration_milliseconds{default_jenkins_builds_last_build_result_ordinal="0"}[24h] offset 24h))

3. 计算时长差值(无历史数据时按0处理)

keep_last_value(last_over_time(default_jenkins_builds_last_build_duration_milliseconds{default_jenkins_builds_last_build_result_ordinal="0"}[24h])) 
- (keep_last_value(last_over_time(default_jenkins_builds_last_build_duration_milliseconds{default_jenkins_builds_last_build_result_ordinal="0"}[24h] offset 24h)) or vector(0))

关键细节

  • keep_last_value:Prometheus 2.27+版本支持,自动用最近的非NaN值填充缺失样本,保障图表连续性。
  • 时间范围[24h]和偏移量offset 24h可根据你的Jenkins构建频率调整(比如高频构建可改为[1h] offset 1h)。
  • 全程通过default_jenkins_builds_last_build_result_ordinal="0"过滤成功构建样本,确保计算数据的有效性。

内容的提问来源于stack exchange,提问作者Thanos Mourtzoukos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 13:21:24