首页/云/可观测性速查/label_replace:查询期改写标签
Prometheus 与采集64 条

label_replace:查询期改写标签

label_replace(v, dst, replacement, src, regex) 用正则从源标签提取内容写入目标标签;常用于统一不同系统的标签命名或补齐维度。

可观测性速查云更新于 2026-10-13

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 个完全匹配才生效,注意转义写法
匹配失败时既不会新增标签也不会报错,排查时先确认源标签确实存在、正则确实能匹配,再去怀疑别的环节。

易错点

  • 源标签不存在或正则不匹配时结果不会新增标签,先确认源标签拼写与正则写法
  • label_replace 只影响查询结果,不会改变已存储的数据,别指望它修正历史数据
  • 参数顺序记反(把源标签写到第二位)会得到空标签,而且不会有任何报错提示
  • 生产看板里大量使用会抬升查询开销,标签统一最终要回到接入侧落地

数据来源与参考

  • Prometheus 文档 · label_replace()
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌