在Grafana中创建重复面板动态验证多环境服务健康
可行解决方案
方案1:利用Grafana变量的键值映射(推荐,无需修改Prometheus)
创建env_name变量:
- 变量类型选择「自定义」
- 在「选项」里按
标签: 值的格式添加每个环境的预期节点数,比如:eu-prod : 5 eu-preview : 2 us-prod : 6 - 可选勾选「包含全部选项」,方便全局查看所有环境状态
修改健康状态查询:
将查询中的固定预期数替换为变量的值部分,用${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}设置面板重复:
在面板的「重复」设置中,选择env_name变量的标签部分(${env_name:label}),每个环境会自动生成独立面板,匹配对应的预期节点数。
方案2:通过Prometheus记录规则预定义预期值(适合多团队共享场景)
如果有权限修改Prometheus配置,可创建记录规则存储各环境的预期节点数,无需在Grafana中维护映射:
添加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使规则生效。
修改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}"}设置面板重复:
在面板「重复」中选择env_name变量,自动生成各环境的监控面板。
为什么之前的嵌套变量写法无效?
Grafana不支持${${env_name}_node_count}这种嵌套变量引用的语法,无法动态拼接变量名,因此必须通过上述键值映射或Prometheus规则的方式实现动态匹配。
内容的提问来源于stack exchange,提问作者Iacopo Pace
相关产品推荐
相关产品推荐

