如何关联两个Prometheus指标?查询报错及需求咨询
问题:关联Prometheus两个指标,同时展示模板名称与状态
背景说明
- 两个Prometheus指标:
template_details_total:存储模板的ID、名称等元信息,示例:template_details_total{id='1', name='t_name'},每个ID对应唯一名称template_status_total:存储模板的状态数据,示例:template_status_total{id='1', status='success'},同一个ID可能对应多个不同状态值
- 需求:通过PromQL关联两个指标,在Grafana仪表板中同时展示模板名称和对应的状态
尝试的查询及错误
用户尝试的查询语句(存在语法错误,缺少右括号):
template_details_total * on(id) group_left(status) sum by (status) (template_status_total)
执行后报错(翻译为中文):
查询执行错误:在操作的右侧匹配组{}上发现重复的序列。
问题分析及解决方案
错误原因
原查询的sum by (status)会把template_status_total的id标签丢弃,导致右侧序列没有id字段,无法和左侧的template_details_total通过id关联;同时按status聚合后,右侧的序列没有匹配的关联键,触发重复序列的错误。
正确查询语句
如果需要保留原始的template_status_total数据并关联名称:
template_status_total * on(id) group_left(name) template_details_total
如果需要先聚合每个ID+状态的统计值,再关联名称:
sum by(id, status) (template_status_total) * on(id) group_left(name) template_details_total
逻辑说明
on(id)指定通过id标签关联两个指标group_left(name)表示保留左侧(template_details_total)的name标签,将其附加到右侧的状态指标序列上- 由于每个ID对应唯一名称,关联后每个
id+status的序列都会带上对应的模板名称,正好满足在Grafana中同时展示名称和状态的需求
内容的提问来源于stack exchange,提问作者Abhinav Prasun
相关产品推荐
相关产品推荐

