实际上问题更大,还有一些指标名称相同但标签不同:
metric1-value{host="host1"} metric1-value-expected{host="host1"}
metric1-value{host="host2"} metric1-value-expected{host="host2"}
metric2-value {host="host1"} metric2-value-expected{host="host1"}
metric2-value {host="host2"} metric2-value-expected{host="host2"}
metric3-value {host="host1"} metric3-value-expected{host="host1"}
metric3-value{host="host2"} metric3-value-expected{host="host2"}
由于使用指标的第一部分创建一个“id”标签,例如:“metric1”,由于多个指标名称定义,将导致相同的错误。
执行查询时出错:不允许多对多匹配:匹配的标签在一侧必须是唯一的
我所做的是创建一个名为“id”的外部标签,其中包含指标的第一部分和主机名,例如:“metric1_host2”。为此,我使用 label_replace 嵌套了 label_join。
label_join(label_replace({__name__=~"metric.*-value"}, "id", "$1", "__name__", "(metric.*)-value"), "id", "_", "id", "host") != label_join(label_replace({__name__=~"metric.*-expected"}, "id", "$1", "__name__", "(metric.*)-expected"), "id", "_", "id", "host")
因此,指标将是这样的,并且是独一无二的:
metric1-value{host="host2" id="metric1_host2"}