配置prometheus自定义监控面板标签的关键是prometheus指标标签与grafana变量协同:先确保指标含instance/job/env等标签,再在grafana中用label_values()创建变量并以$var形式嵌入promql,支持多选、正则匹配及层级联动。

配置 Prometheus 自定义监控面板的标签,本质是让 Grafana 面板能动态识别和筛选不同监控目标(如服务、实例、环境),关键在于两层协同:Prometheus 数据源中指标自带的标签(labels),以及 Grafana 中定义的变量(Variables)如何引用这些标签。
确认指标已携带可用标签
自定义面板能“按需筛选”,前提是 Prometheus 已采集到带区分意义的标签。常见来源包括:
-
Exporter 自动注入:node_exporter 默认带
instance、job;Kubernetes 环境下 serviceMonitor 可通过relabel_configs注入namespace、pod、service等 -
应用主动上报:用 Micrometer 或 client_java 上报指标时,在构造 Counter/Timer 时显式添加标签,例如:
counter("http_requests_total", "env", "prod", "api", "user") -
Pushgateway 推送时指定:发送数据时在 URL 路径中声明,如
POST /metrics/job/api/instance/web01/env/prod,对应生成job="api"、instance="web01"、env="prod"
验证方式:直接访问 Prometheus 表达式浏览器,输入 count by (job, env) ({__name__=~".+"}),看是否返回你期望的标签组合。
在 Grafana 中创建对应变量
变量是面板实现“下拉切换”的桥梁。进入 Dashboard Settings → Variables → Add variable:
-
Name:如
env(后续在 PromQL 中用$env引用) -
Type:选
Query - Data source:选你的 Prometheus 数据源
-
Query:填标签值查询语句,例如:
label_values(env)(获取所有唯一 env 值)
或更精准:label_values(http_requests_total{job="my-api"}, env) - Multi-value 和 Include All option:勾选可支持多选或“全选”功能
在面板 PromQL 中使用变量
变量必须嵌入到查询表达式中才能生效。注意语法和匹配逻辑:
- 基础用法:
sum(rate(http_requests_total{env=~"$env"}[5m])) by (api) - 多变量组合:
http_requests_total{env=~"$env", api=~"$api", instance=~"$instance"} - 避免硬编码:把原来写死的
{instance="web01"}替换为{instance=~"$instance"} - 正则匹配符
=~是必须的(即使单选),因为变量值实际传入的是字符串或正则片段
若面板无数据,先检查变量预览值是否为空,再确认该变量值是否真实存在于对应指标的标签中。
进阶:用 label_values + match 实现层级联动
比如先选 env,再根据所选 env 动态加载该环境下可用的 service 列表:
- 第一个变量
env查询:label_values(env) - 第二个变量
service查询:label_values(http_requests_total{env=~"$env"}, service)
这样就能做出“选环境→选服务→查指标”的三级筛选体验,贴合真实运维路径。











