如何基于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图表配置
- 新建Time Series类型的Panel,选择你的Prometheus数据源
- 将上述PromQL粘贴到查询框
- 调整可视化设置:
- 在「Visualization」标签页,选择「Line」类型,设置合适的
Line width(比如2) - 在「Legend」设置中,选择
{{job}}作为图例,区分不同Job - 若需要标注时段起止,可添加Annotation:
- 数据源选Prometheus,查询
job_timestamp作为事件起始时间,job_timestamp + job_duration作为结束时间,标签用{{job}}
- 数据源选Prometheus,查询
- 在「Visualization」标签页,选择「Line」类型,设置合适的
特殊场景处理
- 如果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
相关产品推荐
相关产品推荐

