grafana 通过同一 prometheus 数据源叠加多个 promql 查询实现指标关联分析,支持多查询并行、标签匹配运算、双 y 轴对比、子查询偏移及变量动态关联。

Prometheus 本身不直接“关联查询”多个指标,但 Grafana 可以通过同一数据源(Prometheus)叠加、对比、组合多个 PromQL 查询,实现逻辑上的“关联分析”。关键不是 Prometheus 做关联,而是你在 Grafana 面板里用 PromQL 写出能反映指标间关系的表达式,并合理组织展示。
确保 Prometheus 数据源已正确配置
这是前提。Grafana 必须能连上 Prometheus 实例:
- 在 Grafana 中进入「Configuration → Data Sources」→ 「Add data source」→ 选择 Prometheus
- URL 填写 Prometheus 的访问地址,例如 http://192.168.1.139:9090(注意协议和端口)
- 保存前务必点击 Save & test,确认状态为 “Data source is working”
在面板中添加多个 PromQL 查询
Grafana 面板支持单面板内并行执行多个独立查询,每个查询可对应不同指标或不同维度:
- 编辑面板 → 点击「+ Query」添加新查询行(Query A、B、C…)
- 每行都可输入自己的 PromQL,例如:
● Query A:rate(http_requests_total[5m])
● Query B:rate(http_request_duration_seconds_sum[5m]) / rate(http_request_duration_seconds_count[5m])
● Query C:sum by(instance)(node_memory_MemAvailable_bytes) - 每个查询可单独设置别名(Alias)、图例格式、Y轴、是否显示等,便于区分含义
用 PromQL 主动做指标间运算(真·关联)
更深层的“关联”,是靠 PromQL 自身能力完成的,比如匹配标签、聚合对比、条件筛选:
-
标签一致匹配:两个指标必须有共同 label(如
instance、job)才能 join 或比较
例如:rate(node_cpu_seconds_total{mode!="idle"}[1m]) / ignoring(mode) group_left sum by(instance)(rate(node_cpu_seconds_total[1m]))—— 计算各节点 CPU 使用率 -
多指标组合告警/趋势:把错误率和总请求数画在同一图中,用双 Y 轴观察相关性
例如:左轴画rate(api_errors_total[5m]),右轴画rate(api_requests_total[5m]) -
子查询与偏移对比:分析当前值 vs 历史同期
例如:rate(http_requests_total[1h]) - rate(http_requests_total[1h] offset 24h)
利用变量动态关联不同目标
让一个面板自动适配不同服务或实例,实现“按需关联”:
- 在 Dashboard 设置中添加变量(Variables),类型选 Query
- 查询语句写成:
label_values(up, job)或label_values(node_exporter_build_info, instance) - 在面板 PromQL 中引用变量,如:
rate(node_network_receive_bytes_total{instance=~"$instance"}[5m]) - 切换变量值时,所有含该变量的查询自动重算,相当于“动态关联”到不同目标











