You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Prometheus告警配置:如何用env标签替换cluster标签?

解决Prometheus告警规则替换标签的问题

你的配置无效的核心原因是告警规则里不支持relabel_configs字段(这个配置仅用于Prometheus的抓取阶段或Alertmanager配置),同时标签引用和字段处理逻辑有误。以下是几种可行的解决方案:

方案1:在查询表达式中转换标签(通用场景)

通过label_replace函数直接在指标查询阶段将cluster标签转换为env,并调整聚合维度保留env而非cluster:

- alert: SQL
  expr: avg by (datname, env) (
    label_replace(
      rate(pg_stat_database_blks_hit{datname!~"template.*", cluster="prod"}[5m]) / 
      (rate(pg_stat_database_blks_hit{datname!~"template.*", cluster="prod"}[5m]) + rate(pg_stat_database_blks_read{datname!~"template.*", cluster="prod"}[5m])),
      "env", "$1", "cluster", "(.*)"
    )
  ) < 0.98
  for: 2m
  labels:
    severity: email
  annotations:
    summary: "PostgreSQL low cache"
    description: "PostgreSQL low on cache for database {{ $labels.datname }} in env {{ $labels.env }}"
  • 逻辑:用label_replace把每个时间序列的cluster标签值复制到env标签,再通过avg by (datname, env)聚合,最终告警只会携带datname和env标签。

方案2:固定值场景直接赋值(cluster值固定为prod)

如果你的cluster值始终是prod,可以直接给env赋值并清空cluster标签:

- alert: SQL
  expr: avg(rate(pg_stat_database_blks_hit{datname!~"template.*", cluster="prod"}[5m]) / (rate(pg_stat_database_blks_hit{datname!~"template.*", cluster="prod"}[5m]) + rate(pg_stat_database_blks_read{datname!~"template.*", cluster="prod"}[5m]))) by (datname, cluster) < 0.98
  for: 2m
  labels:
    severity: email
    env: "prod"  # 直接指定env值
    cluster: ""  # 清空cluster标签,告警中不再显示
  annotations:
    summary: "PostgreSQL low cache"
    description: "PostgreSQL low on cache for database {{ $labels.datname }} in env {{ $labels.env }}"

方案3:多cluster场景直接映射标签

如果cluster有多个取值(如prod、staging),可以直接将cluster的值映射给env并删除原标签:

- alert: SQL
  expr: avg(rate(pg_stat_database_blks_hit{datname!~"template.*"}[5m]) / (rate(pg_stat_database_blks_hit{datname!~"template.*"}[5m]) + rate(pg_stat_database_blks_read{datname!~"template.*"}[5m]))) by (datname, cluster) < 0.98
  for: 2m
  labels:
    severity: email
    env: '{{ $labels.cluster }}'  # 直接引用cluster的值作为env
    cluster: ""  # 删除cluster标签
  annotations:
    summary: "PostgreSQL low cache"
    description: "PostgreSQL low on cache for database {{ $labels.datname }} in env {{ $labels.env }}"

内容的提问来源于stack exchange,提问作者xttx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 00:32:30