如何在Prometheus中通过正则动态为所有告警添加'team'标签?
实现批量为Prometheus告警添加动态'team'标签
你可以通过两种方式批量实现这个需求,不用逐个修改告警表达式:
方案一:在Prometheus采集阶段预处理指标(全局生效)
这种方式会在指标进入Prometheus前就添加上team标签,所有基于这些指标的告警自动继承该标签,一劳永逸。
编辑Prometheus的配置文件,在对应的采集任务(比如你的kube-state-metrics)下加入relabel_configs规则:
scrape_configs: - job_name: 'kube-state-metrics' # 保留原有采集配置(比如静态配置、服务发现等) relabel_configs: # 先匹配container标签含test的指标,添加team=data - source_labels: [container] regex: '.*test.*' target_label: team replacement: 'data' action: replace # 若container没匹配上,再匹配pod标签含test的情况,补加team=data - source_labels: [pod] regex: '.*test.*' target_label: team replacement: 'data' action: replace condition: 'team !~ .+' # 仅当team标签还未设置时执行
如果要对所有采集任务生效,把这段relabel_configs放到全局配置的relabel_configs节点下即可。
方案二:在Alertmanager路由阶段添加告警标签
如果不想改动Prometheus的采集配置,可以在Alertmanager层面,给所有告警统一添加标签:
编辑Alertmanager配置文件,在route节点下加入label_replacements规则:
route: group_by: ['alertname'] group_wait: 30s group_interval: 5m repeat_interval: 1h receiver: 'default-receiver' # 批量添加team标签的规则 label_replacements: - source_labels: [container] regex: '.*test.*' target_label: team replacement: 'data' - source_labels: [pod] regex: '.*test.*' target_label: team replacement: 'data' condition: 'team !~ .+' # 避免覆盖已存在的team标签
这种方式只在告警流转时添加标签,不会影响原始指标的标签内容。
方案对比
- Prometheus采集阶段处理:标签会附加到原始指标上,查询指标时也能看到,适合需要全局指标标签的场景。
- Alertmanager路由阶段处理:仅作用于告警,原始指标不受影响,适合只需要告警带标签的场景。
内容的提问来源于stack exchange,提问作者TomerA
相关产品推荐
相关产品推荐

