Prometheus即时查询中关联指标的可行性及实现方法咨询
在Prometheus即时查询中关联指标并排序的解决方案
当然可以!要实现你想要的——关联job_last_run和job_state指标,按运行时间戳排序并展示对应状态——我们可以通过PromQL的标签匹配、关联语法来完成,具体如下:
核心查询语句
sort_desc(job_last_run + on(jobname) group_left(state) label_format(label_replace(job_state, "jobname", "$1", "name", "(.*)"), state="%v") * 0)
语句拆解说明
我们一步步来看这个查询的作用:
label_replace(job_state, "jobname", "$1", "name", "(.*)"):首先统一两个指标的作业名称标签——把job_state的name标签替换成jobname,这样就能和job_last_run的jobname标签匹配,为后续关联做准备。label_format(..., state="%v"):把job_state的指标值(可读状态数值)转换成名为state的标签,这样我们就能在查询结果里直接看到每个作业对应的状态。... * 0:将处理后的job_state指标值置为0,这样和job_last_run相加时不会改变原有的时间戳数值,保证结果里的数值还是正确的作业运行时间戳。on(jobname) group_left(state):指定按jobname标签关联两组指标,group_left表示保留左边(job_last_run)的所有序列,并把右边的state标签附加到左边的序列上,实现“一个时间戳对应一个状态”的关联效果。sort_desc(...):最后按job_last_run的时间戳值降序排序,让最近运行的作业排在最前面。
展示效果
在Prometheus的UI中执行这个查询后,你会看到每个作业对应的序列:
- 标签包含
jobname(作业名)和state(对应状态数值) - 指标值是该作业的最后运行时间戳(秒级Unix时间)
- 所有序列按时间戳从新到旧排序
如果是在Grafana中用表格面板展示,只需将这个查询添加到面板中,然后在字段设置里选择显示jobname、state标签和指标值,就能得到你想要的结构化表格。
内容的提问来源于stack exchange,提问作者Shadow00Caster
相关产品推荐
相关产品推荐

