如何为prometheus-community/prometheus Chart告警规则自动注入固定标签
可行实现方案
要满足「告警规则注解中可直接引用公共标签」的需求,标签必须在Prometheus渲染注解模板前完成注入,优先选择以下方案:
方案1:配置Prometheus全局外部标签(最推荐)
这是Prometheus原生支持的全局标签机制,改造成本最低,external_labels中定义的标签会自动添加到所有对外输出的数据中,包括触发的告警、远程写入的指标、联邦采集的指标等,且告警规则注解模板可以直接读取到对应值。
Helm Chart配置方式
在部署prometheus-community/prometheus使用的values.yaml中添加以下配置即可:
server: global: external_labels: env: prod cluster: project-prod-eks
升级Chart生效后,所有告警规则无需手动添加这两个标签,注解中的{{ $labels.env }}和{{ $labels.cluster }}会自动渲染为对应值。
优势
- 配置一次全局生效,无需修改任何现有告警规则
- 原生能力稳定可靠,无额外适配成本
- 多集群/多环境场景下可直接通过标签区分不同实例的告警和指标
方案2:Helm模板统一注入公共标签(适合自定义告警规则场景)
如果你不希望全局指标都携带这两个标签,且告警规则是通过Helm模板自定义维护的,可以将公共标签定义为全局变量,在所有告警规则的labels块统一引入。
配置方式
- 在
values.yaml中定义公共标签变量:
commonAlertLabels: env: prod cluster: project-prod-eks
- 在告警规则模板中引用变量:
groups: - name: nginx.rules rules: - alert: NGINXTooMany400s expr: 100 * ( sum( nginx_ingress_controller_requests{status=~"4.+"} ) / sum(nginx_ingress_controller_requests) ) > 5 for: 1m labels: severity: warning {{- toYaml .Values.commonAlertLabels | nindent 6 }} annotations: description: Too many 4XXs on {{ $labels.env }} / {{ $labels.cluster }} summary: More than 5% of all requests returned 4XX, this requires your attention
优势
- 灵活性高,可针对部分告警规则选择性添加公共标签
- 标签在规则定义阶段生效,支持注解中正常引用
劣势
- 需要调整现有告警规则的模板代码,改造成本高于方案1
其他可选方案(不支持注解引用标签,仅作补充)
如果你的需求仅为最终告警通知携带公共标签,不需要在告警规则注解中引用,可以选择以下方案,但无法满足你当前的注解引用需求:
- 配置Prometheus的
alert_relabel_configs:在告警发往Alertmanager前为所有告警追加标签,注解渲染阶段无法读取到该部分标签 - 配置Alertmanager的
alert_relabel_configs:在Alertmanager接收到告警后追加标签,仅影响最终通知携带的标签
内容的提问来源于stack exchange,提问作者DmitrySemenov
相关产品推荐
相关产品推荐

