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

基于起止时间与当前时间在Grafana中计算进程执行时长

解决Grafana展示进程运行时长的三种实用方案

一、修正PromQL表达式实现逻辑判断

PromQL不支持直接的三元运算符,但可以利用布尔值自动转数字(true=1、false=0)的特性实现等价逻辑:

((end_time_gauge > 0) * end_time_gauge + (end_time_gauge == 0) * time()) - start_time_gauge

逻辑说明:

  • 进程结束时(end_time_gauge > 0),第一项生效,计算end_time_gauge - start_time_gauge
  • 进程运行中时(end_time_gauge == 0),第二项生效,计算time() - start_time_gauge

二、借助Grafana数据转移计算逻辑

如果不想在PromQL中写复杂表达式,可以把计算步骤放到Grafana侧:

  1. 先通过PromQL同时拉取两个指标:
    {__name__=~"start_time_gauge|end_time_gauge", job="你的进程job名"}
    
  2. 进入面板的「转换」选项,添加「计算字段」:
    • 字段名设为run_duration
    • 计算表达式使用Grafana变量语法:
      ${end_time_gauge} > 0 ? ${end_time_gauge} - ${start_time_gauge} : time() - ${start_time_gauge}
      
  3. 将run_duration字段的格式设置为「时长」,选择1d 07:22:01样式即可。

三、调整指标上报规则简化查询

如果可以修改进程的指标上报逻辑:

  • 进程运行时,不上报end_time_gauge(或保留指标但不更新值)
  • 进程结束时,一次性上报end_time_gauge为结束时间戳

此时可以合法使用向量集合运算符or:

(end_time_gauge or on(instance, job) vector(time())) - start_time_gauge

逻辑说明:on(instance, job)确保两个指标按相同标签匹配,当end_time_gauge不存在(进程运行中)时,自动用当前时间time()的向量替代。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 05:00:54