如何使用PromQL合并标签名相同值不同的两个指标并生成指定结构?
PromQL合并指标查询解决方案
原始指标结构
metric1{label_1="a",label_2="b",...,status="running"} 0 metric1{label_1="a",label_2="b",...,status="running"} 1 metric2{label_1="a",label_2="b",...,status="healthy"} 0 metric2{label_1="a",label_2="b",...,status="healthy"} 1
需求说明
筛选出值为特定值的指标,合并为如下结构的指标:
resultmetric{label_1="a",label_2="b",...,metric1_status="running", metric2_status="healthy"}
正确PromQL查询语句
假设你要筛选的值为1,替换为你需要的特定值即可:
label_replace(metric1{value=1}, "metric1_status", "$1", "status", "(.*)") * on(label_1, label_2) group_left(metric1_status) label_replace(metric2{value=1}, "metric2_status", "$1", "status", "(.*)")
语句解释
- 标签重命名:使用
label_replace函数,将metric1的status标签重命名为metric1_status,metric2的status标签重命名为metric2_status,同时保留label_1、label_2等共同标签。 - 指标合并:通过
on(label_1, label_2)指定合并时匹配的共同标签,确保同一组label_1/label_2的指标能关联到一起;group_left(metric1_status)保证左侧指标的新标签被保留,同时合并右侧指标的metric2_status标签。 - 值筛选:
{value=1}部分替换为你需要的特定值条件,比如{value=0}。
内容的提问来源于stack exchange,提问作者Petr Javorik
相关产品推荐
相关产品推荐

