如何用正则结合Prometheus向量匹配关联不同端口的实例指标?
解决方案:通过PromQL的label_replace函数实现主机名前缀关联
可以利用PromQL内置的label_replace函数,给两个指标生成仅包含主机名前缀的新标签,再基于这个新标签完成关联过滤。具体实现如下:
最终查询语句
label_replace(memory_used{tenant="1000", job="main"}, "host", "$1", "instance", "^(.{9}):.*") and on(host) label_replace(instance_operating_state{group="B", job="main"} == 0, "host", "$1", "instance", "^(.{9}):.*")
语句说明
label_replace函数作用:该函数可对指标标签做正则替换生成新标签,参数含义:
- 第一个参数:目标指标
- 第二个参数:新标签名称(这里定义为
host) - 第三个参数:替换后的标签值(
$1代表正则捕获的第一个分组内容) - 第四个参数:要处理的原标签(这里是
instance) - 第五个参数:正则表达式,
^(.{9}):.*用于捕获开头固定9位长度的主机名前缀(匹配冒号前的部分),忽略后续端口内容
关联逻辑:先给
memory_used和过滤后的instance_operating_state == 0都生成host标签,再通过on(host)指定基于新标签关联,绕过原instance标签的端口差异,实现仅按主机名前缀匹配过滤。适配固定前缀长度:正则中的
.{9}对应你提到的固定长度前缀,根据实际前缀长度调整数字即可。
该方案完全依赖PromQL原生语法,无需修改数据源配置,也不需要Grafana插件,符合你的需求。
内容的提问来源于stack exchange,提问作者scavwrencher
相关产品推荐
相关产品推荐

