Grafana 原生支持添加多个 Prometheus 实例作为独立数据源,通过仪表板变量切换集群,这是最轻量且无需额外中间件的多集群监控方案。
先说结论:适合中小规模集群场景,直接在 Grafana 中配置多个数据源配合变量使用,无需改动 Prometheus 架构。
- 适合:集群数量可控,网络可达 Grafana 服务器。
- 先准备:确保每个 Prometheus 实例的 API 地址端口对 Grafana 开放。
- 验收:在仪表板下拉框切换集群,确认曲线数据随之变化。
配置文件速用版
如果你使用 Grafana provisioning 功能批量管理数据源,可以将 YAML 配置文件放置在 /etc/grafana/provisioning/datasources/ 目录下(具体路径取决于安装方式,deb/rpm 包默认在此)。
apiVersion: 1
datasources:
- name: Prometheus-Cluster-A
type: prometheus
url: http://prom-a:9090
access: proxy
- name: Prometheus-Cluster-B
type: prometheus
url: http://prom-b:9090
access: proxy修改完成后重启 Grafana 服务或等待热加载,数据源列表中将出现多个 Prometheus 选项。
原理简述
Prometheus 本身设计为单租户、单集群架构,默认不直接支持跨集群聚合查询。Grafana 作为可视化层,提供了“数据源管理”能力,允许用户在同一个仪表板中引用不同的后端存储。通过这种方式,我们不需要在 Prometheus 层做复杂的联邦配置,就能在界面上实现多集群视图的切换和对比。
分步处理
1. 添加多个数据源
进入 Grafana 设置页面,找到 Data Sources,点击 Add data source。选择 Prometheus,填写第一个集群的 URL,保存并测试连接。重复此步骤添加其他集群,建议命名时带上集群标识,例如 Prometheus-Prod、Prometheus-Dev。
2. 创建仪表板变量
打开需要配置的仪表板,点击设置图标进入 Dashboard Settings,选择 Variables。新建一个变量,名称设为 datasource,类型选择 DataSource,过滤类型为 Prometheus。这样变量会自动列出所有可用的 Prometheus 数据源。
3. 修改面板查询配置
编辑面板中的 Query,注意 数据源选择 与 查询语句 的区别:
- Data Source 字段:选择刚才创建的变量
${datasource}。 - Query 语句:填写通用的 PromQL,例如
up{job="prometheus"}。变量不在 PromQL 语句内部使用,而是控制面板连接的后端。
保存仪表板后,页面顶部会出现下拉框,选择不同选项即可切换底层数据源。
怎么验证是否生效
在仪表板页面顶部的变量下拉框中,依次选择不同集群名称。观察图表曲线是否有数据渲染,或者数值是否发生明显变化。点击面板标题进入 Edit 模式,使用 Query Inspector 查看当前请求的 URL 和返回数据,确认 request 指向的是对应集群的 Prometheus 地址。
常见坑
1. 网络连通性
Grafana 服务器必须能直接访问所有 Prometheus 实例的 9090 端口。如果集群间有防火墙或隔离,Grafana 无法抓取数据,面板会显示 No data 或 Error。
2. 指标命名不一致
不同集群采集的指标名称或 Label 标签如果不统一,切换数据源后图表可能为空。建议统一各集群的 Exporter 版本和采集配置。
3. 数据源数量过多
如果在变量中加载了过多数据源,每次切换都可能触发多次查询请求,增加浏览器和 Grafana 后端负载。如果集群数量增长到几十个以上,建议考虑引入 Thanos 或 Mimir 等查询聚合层,而不是单纯依赖 Grafana 多数据源切换。