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

如何基于Prometheus指标在Grafana中制作SQL Agent Job时序图表?

实现SQL Agent Job运行时段的时序线段(Grafana + Prometheus)

核心思路

通过PromQL判断当前时间是否落在Job的运行窗口内(启动时间到启动时间+持续时长),返回值为1的序列,再在Grafana中渲染成线段。

前提指标说明

确保你的Prometheus指标满足:

  • job_timestamp:Gauge类型,值为Job启动的Unix时间戳,带job标签区分不同任务
  • job_duration:Gauge类型,值为Job运行的秒数,带对应job标签

步骤1:编写PromQL查询

根据Job运行频率调整时间范围(示例用7d覆盖7天内的样本),查询语句如下:

sum by (job) (
  (time() >= last_over_time(job_timestamp[7d])) 
  and 
  (time() <= last_over_time(job_timestamp[7d]) + last_over_time(job_duration[7d]))
)
  • last_over_time():获取指定时间范围内最新的指标样本,确保拿到最近一次Job启动的时间和时长
  • sum by (job):按Job聚合结果,避免重复数据
  • 逻辑判断:当当前时间处于[启动时间, 启动时间+时长]区间时,返回1,否则无数据

步骤2:Grafana图表配置

  1. 新建Time Series类型的Panel,选择你的Prometheus数据源
  2. 将上述PromQL粘贴到查询框
  3. 调整可视化设置:
    • 在「Visualization」标签页,选择「Line」类型,设置合适的Line width(比如2)
    • 在「Legend」设置中,选择{{job}}作为图例,区分不同Job
    • 若需要标注时段起止,可添加Annotation:
      • 数据源选Prometheus,查询job_timestamp作为事件起始时间,job_timestamp + job_duration作为结束时间,标签用{{job}}

特殊场景处理

  • 如果Job存在多次历史运行记录,上述查询仅显示最近一次的运行时段。若要展示所有历史时段,需通过Prometheus Recording Rule预先处理,或改用Grafana的Annotation功能展示所有历史运行事件。
  • 若job_timestamp是Counter类型(比如job_started_total,每次启动自增),需用timestamp(last_over_time(job_started_total[7d]))获取启动时间戳,修改后的查询:
sum by (job) (
  (time() >= timestamp(last_over_time(job_started_total[7d]))) 
  and 
  (time() <= timestamp(last_over_time(job_started_total[7d])) + last_over_time(job_duration[7d]))
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 01:22:38