标签联合查询
Prometheus 的标签(Labels)是多维数据模型的核心,每个指标都由一组键值对标签唯一定义。但在实际场景中,不同指标可能使用不同的标签体系,或者需要将多个指标的信息合并展示。标签联合查询(Label Join)正是解决这类问题的工具。
常见的联合查询场景包括:服务指标使用 service 标签标识服务名,日志指标使用 app 标签;你需要将两者关联时,可以通过标签联合实现。再比如,将实例 IP 和实例名称进行映射展示,方便运维人员快速定位。
label_join 与 label_replace
label_join 用于创建一个新标签,将某个标签的值与其他字符串拼接。例如,将 instance 标签的值与字符串 -health 拼接:
这个查询会生成一个新标签 instance_name,值为 192.168.1.1-health。在实际使用中,可以将 instance IP 与服务别名拼接,生成更易读的展示标签。
label_replace 用于对标签值进行正则替换,常用于从现有标签中提取信息。例如,从 instance 标签提取 IP 部分:
这个查询将 instance:9100 格式的值提取出 IP 部分,生成 instance_ip 标签。
跨指标标签联合
更复杂的场景是跨指标的标签联合。Prometheus 原生不支持直接 JOIN 两个不同指标,但可以通过 on() 和 group_left()/group_right() 修饰符实现横向联合。例如,将 http_requests_total 的 service 标签与 service_info 指标的 owner 标签关联:
这个查询将请求速率与服务负责人信息关联,可以用于「按负责人统计各团队的请求量」等场景。