事件标签重写
概述
Relabel 事件处理器是 Nightingale 告警通知流程中对事件标签进行重新标记和处理的重要环节。该处理器的功能和在数据上报时对数据进行 relabel 类似,允许您对告警事件的标签进行各种操作,包括删除、保留、重命名、合并和修改标签值等。
主要功能
- 🏷️ 标签删除:删除不需要的标签(labeldrop)
- 🎯 标签保留:只保留指定的标签(labelkeep)
- 🔄 标签重命名:对标签key进行重命名(labelmap)
- 🔧 标签合并:根据已有标签构建新标签(replace)
- ✏️ 值修改:修改标签的value内容(replace)
使用步骤
1. 选择处理器类型
在告警规则配置页面,选择"处理器"类型为 Relabel。
2. 配置操作类型
根据需求选择合适的 Action:
- 删除标签:选择
labeldrop - 保留标签:选择
labelkeep - 重命名标签:选择
labelmap - 修改/构建标签:选择
replace
3. 配置匹配条件
在 regex 字段中设置标签key的匹配条件,支持正则表达式。
4. 设置替换内容(如需要)
根据选择的操作类型,配置相应的 replacement、target_label 等参数。
5. 测试配置
保存配置后,新的告警事件将按照设置的规则进行标签处理。
使用场景与配置示例
场景 1:删除不需要的标签

如上图中的告警事件,有非常多的标签,如果有的标签我们不太关心想去掉,可以通过 labeldrop 操作,将这些标签 drop 掉,比如如果想删掉 listening_10 和 host 标签,可以配置如下:
配置参数:
- Action:
labeldrop - Regex:
listening_10|host

保存之后,listening_10 和 host 会被删除。

场景 2:只保留指定的标签

如上图中的告警事件,有非常多的标签,如果只想保留我们关心的标签,可以通过 labelkeep 操作,比如我们只想保留 service、name 和 addr 标签,可以配置如下:
配置参数:
- Action:
labelkeep - Regex:
service|^name$|addr
注意:name 这样写
^name$是因为其他标签包含了name,进行严格匹配

保存之后,新的告警事件,只会保留 service|name|addr 三个标签。

场景 3:重命名标签key

如上图,想将 __name__ 重命名为 name,则可以使用如下配置:
配置参数:
- Action:
labelmap - Regex:
__(name)__ - Replacement:
$1或固定值name
新的 name 标签增加之后,之前的 __name__ 标签还会保留,需要再配置一个 labeldrop 删除掉。

保存之后,新的告警事件,__name__ 会改为 name。

场景 4:构建新的标签

如上图的告警事件,如果我们想构建一个包括了 ident+listening_10 内容的新标签,我们可以使用 replace 操作,将 ident+listening_10 合并到一起:
配置参数:
- Action:
replace - Target_label:
addr - Source_labels:
["ident", "listening_10"] - Separator:
:

保存之后,新的告警事件,会有一个新的 addr 标签。

场景 5:修改标签的value

如上图,如果我们修改 addr 标签,将端口部分去掉,可以使用 replace 操作:
配置参数:
- Action:
replace - Target_label:
addr - Source_labels:
["addr"] - Regex:
([^:]+):.* - Replacement:
${1}

保存之后,新的告警事件,addr 中的端口会去掉。

常见使用场景
1. 标签清理
清理告警事件中的冗余标签,只保留业务关心的核心标签。
2. 标签标准化
统一标签命名规范,将不规范的标签key重命名为标准格式。
3. 环境区分
通过标签合并,构建包含环境信息的新标签,便于告警分类。
4. 敏感信息处理
去除或修改包含敏感信息的标签内容。
注意事项
- 🔍 正则表达式:所有匹配条件都支持正则表达式,确保语法正确
- 📋 操作顺序:多个relabel操作按配置顺序执行,注意操作间的依赖关系
- ⚠️ 标签保留:使用labelmap重命名标签时,原标签仍会保留,需额外配置labeldrop删除
- 🧪 充分测试:建议在生产环境使用前进行充分测试
- 📊 性能影响:复杂的正则表达式可能影响处理性能,建议优化匹配条件
常见问题
Q1:配置了 Relabel 但告警事件标签没变,怎么排查?
A:按这个顺序:
- 匹配条件:regex 写错的概率最大 — 用 即时查询 看实际事件标签,对照正则匹配;
- 操作类型选错:labelmap 不删原标签,需要再配一个 labeldrop;
- 处理器顺序:在告警规则的"流水线配置"里,relabel 处理器需要在告警通知节点之前;
- 生效时机:Relabel 处理新触发的事件,已经存在的事件不会被回溯重写。
Q2:labelkeep 和 labeldrop 都用了,谁优先?
A:按处理器配置顺序执行。先 labeldrop 再 labelkeep 等于"先删一批,再只保留一批",最终留下交集。建议别同时用,选一个语义清晰的就行。
Q3:标签 value 含特殊字符(如 []、{}、空格),正则怎么写?
A:
- 在 regex 里对特殊字符转义:
\[、\{、\(空格通常不用转); - 或者用更宽松的
.*匹配; - 用
^和$限定边界避免误匹配,如^name$(精确匹配 name)。
Q4:可以从其他标签的 value 提取部分字符串成为新标签吗?
A:可以 — 用 replace + 正则捕获组:
Action: replace
Source_labels: [original_label]
Regex: ^([a-z]+)-(\d+)$ # 捕获前缀和数字
Target_label: prefix
Replacement: ${1} # 引用第 1 个捕获组
效果:original_label=web-01 → 新增 prefix=web 标签。