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

在Grafana中创建重复面板动态验证多环境服务健康

可行解决方案

方案1:利用Grafana变量的键值映射(推荐,无需修改Prometheus)

  1. 创建env_name变量:

    • 变量类型选择「自定义」
    • 在「选项」里按标签: 值的格式添加每个环境的预期节点数,比如:
      eu-prod : 5
      eu-preview : 2
      us-prod : 6
      
    • 可选勾选「包含全部选项」,方便全局查看所有环境状态
  2. 修改健康状态查询:
    将查询中的固定预期数替换为变量的值部分,用${env_name:value}获取对应环境的预期节点数:

    count by(env_name)(
        app_state{
            state="healthy",
            env_type=~"${env_type}",
            env_name=~"${env_name}",
            service="our-service"
        }[10m]
    ) == bool ${env_name:value}
    
  3. 设置面板重复:
    在面板的「重复」设置中,选择env_name变量的标签部分(${env_name:label}),每个环境会自动生成独立面板,匹配对应的预期节点数。

方案2:通过Prometheus记录规则预定义预期值(适合多团队共享场景)

如果有权限修改Prometheus配置,可创建记录规则存储各环境的预期节点数,无需在Grafana中维护映射:

  1. 添加Prometheus记录规则:
    在Prometheus规则文件中添加以下内容:

    groups:
    - name: service_expected_nodes
      rules:
      - record: expected_node_count
        expr: |
          label_replace(5, "env_name", "eu-prod", "", "")
          or label_replace(2, "env_name", "eu-preview", "", "")
          or label_replace(6, "env_name", "us-prod", "", "")
          # 按需添加更多环境映射
    

    重启Prometheus使规则生效。

  2. 修改Grafana查询:
    使用on(env_name)关联指标,自动匹配每个环境的预期值:

    count by(env_name)(
        app_state{
            state="healthy",
            env_type=~"${env_type}",
            service="our-service"
        }[10m]
    ) == bool on(env_name) expected_node_count{env_name=~"${env_name}"}
    
  3. 设置面板重复:
    在面板「重复」中选择env_name变量,自动生成各环境的监控面板。

为什么之前的嵌套变量写法无效?

Grafana不支持${${env_name}_node_count}这种嵌套变量引用的语法,无法动态拼接变量名,因此必须通过上述键值映射或Prometheus规则的方式实现动态匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 10:27:30