label_replace 是什么
label_replace(向量, 目标标签, replacement, 源标签, 正则) 在查询期用正则从源标签提取内容并写入目标标签,常用来统一不同系统的标签命名或补齐维度。它只影响查询结果,不会改动已存储的数据,因此适合在接入侧暂时无法统一时做应急对齐,例如从 instance 里拆出 IP、把 env 统一成 environment。参数顺序是目标标签在前、源标签在后,replacement 里用 $1 引用捕获组。
基本信息
| 语法 | label_replace(<向量>, "目标标签", "replacement", "源标签", "正则") |
|---|---|
| 作用范围 | 仅影响查询结果,不改动存储数据 |
| 匹配要求 | 正则不匹配时不会新增标签 |
| 适用版本 | Prometheus 2.x 全系列 |
| 权限要求 | 只读查询 |
典型使用场景
- 标签对齐:把不同采集端的 env 与 environment 统一后再聚合
- 维度补齐:从 instance 中拆出地址与端口,便于按地址分组
- 跨系统对比:两套系统标签命名不同,查询期临时对齐后比较
- 看板变量兼容:为模板变量提供一致标签名,避免每个面板各写一套
- 方案验证:先验证标签方案可行,稳定后再回到接入侧改造
使用要点
- 参数顺序容易记反:目标标签在第二位、源标签在第四位
- 正则必须匹配成功才会写入,写错时既不会报错也不会新增标签
- 它只能新增或覆盖指定标签,不适合承担复杂字段计算
- 生产看板大量使用会抬高查询开销,稳定后应回到接入侧统一
- 与向量匹配组合使用时,先确认改动后的标签集合符合预期
用法示例
用法示例
# 从 instance 标签提取地址写入 ip 标签
label_replace(up, "ip", "$1", "instance", "([^:]+):.*")
# 把 env 统一成 environment
label_replace(up, "environment", "$1", "env", "(.+)")
# 从 instance 中拆出端口(PromQL 字符串里的反斜杠需要转义)
label_replace(up, "port", "$1", "instance", ".*:(.*)")参数读法
| 参数 | 位置 | 说明 |
|---|---|---|
| 向量 | 第 1 个 | 通常是 up 或聚合前的表达式 |
| 目标标签 | 第 2 个 | 要写入或覆盖的标签名 |
| replacement | 第 3 个 | 用 $1 引用捕获组内容 |
| 源标签 | 第 4 个 | 从中提取内容的标签名 |
| 正则 | 第 5 个 | 完全匹配才生效,注意转义写法 |
匹配失败时既不会新增标签也不会报错,排查时先确认源标签确实存在、正则确实能匹配,再去怀疑别的环节。