我有两个带有标签的指标
memory_used
{tenant="1000", instance="testhostb:8888", job="main"}
和 instance_operating_state
带标签
{group="B", instance="testhostb:8763", job="main"}
我想根据第二个值过滤第一个。如果他们有相同的实例,我可以使用类似的查询
memory_used and on(instance) (instance_operating_state == 0)
但是它们由不同的出口商暴露,并且有不同的港口。因此,当我尝试使用像上面这样的“on”连接时,我没有得到任何结果,因为完整的实例字符串不匹配。有没有办法使用正则表达式删除冒号 (:) 之后的所有内容,以便我可以只加入实例名称的第一部分?
instance
的新标签,并使用该标签进行加入。
label_replace(metric, "hostname", "$1", "instance", "(.+):.+")
将添加标签 hostname
,其中包含直到
instance
标签中最后一个1冒号为止的所有内容。演示 因此,假设两种情况下的主机名完全相同,您可以运行以下查询
label_replace(memory_used, "hostname", "$1", "instance", "(.+):.+")
and on(hostname)
label_replace(instance_operating_state == 0, "hostname", "$1", "instance", "(.+):.+")
1:如果您使用 relabeling 对实例标签进行一些欺骗,这可能需要额外的考虑。例如,如果 instance
不包含
:
(因此与
(.+):.+
不匹配),则不会添加
hostname
标签。