Grafana Provisioning 是实现监控即代码最稳定推荐方式,启动时自动加载配置,支持版本控制与CI/CD;目录含 datasources、dashboards、alerting 子目录;数据源用 YAML 定义,仪表盘通过发现规则加载 JSON 文件。

Grafana 的 Provisioning 是实现监控即代码(Monitoring as Code)最稳定、最推荐的落地方式。它不依赖运行时 API 调用,而是在 Grafana 启动时自动加载配置文件,天然支持版本控制、环境隔离和 CI/CD 集成。
Provisioning 目录结构与启用方式
默认情况下,Grafana 会在 conf/provisioning/ 下查找配置。你也可以通过主配置文件自定义路径:
[paths]
provisioning = /etc/grafana/provisioning
标准目录结构如下:
-
provisioning/datasources/:存放 YAML 格式的数据源定义(如
prometheus.yaml) -
provisioning/dashboards/:存放仪表盘发现规则(如
dashboard.yml),不是直接放 JSON 文件 - provisioning/alerting/:存放告警规则 YAML(Grafana v9.1+ 原生支持)
数据源自动化配置(YAML 示例)
在 provisioning/datasources/prometheus.yaml 中写入:
apiVersion: 1
datasources:
- name: Prometheus
type: prometheus
url: http://prometheus:9090
access: proxy
isDefault: true
关键点:
-
type 必须与 Grafana 支持的数据源类型严格一致(如
loki、influxdb、elasticsearch) -
access: proxy 表示请求经 Grafana 代理转发,适合跨域或权限受限场景;
direct则由浏览器直连 - 敏感字段(如
password、basicAuthPassword)应使用secureJsonFields加密,避免明文泄露
仪表盘自动加载机制
仪表盘本身是 JSON 文件,但 Provisioning 不直接管理它们——而是通过 dashboard.yml 定义“发现规则”:
apiVersion: 1
providers:
- name: 'default'
orgId: 1
folder: ''
type: file
options:
path: /var/lib/grafana/dashboards
然后把导出的仪表盘 JSON(例如 host-overview.json)放到 /var/lib/grafana/dashboards/ 目录下即可被自动识别。注意:
- JSON 文件中若含硬编码数据源名,需确保与
datasources/中定义的name完全一致 - 建议使用
__inputs和__requires字段保持模板兼容性,便于多环境复用 - 开发阶段可配合
grafana-toolkit将 JSON 转为可维护的 TypeScript 模板,再编译回 JSON
CI/CD 集成与环境差异化
将整个 provisioning/ 目录纳入 Git 仓库后,可通过流水线实现分环境部署:
- 用 Helm 或 Ansible 替换变量(如
{{ PROMETHEUS_URL }}),生成不同环境的 YAML - 在 CI 中校验 YAML 语法(
yamllint)和 JSON 结构(jq) - 部署时仅需同步配置文件 + 重启 Grafana(或发送 SIGHUP 重载)
- 生产环境可搭配
grafana-api工具做上线前一致性比对,防止配置漂移

















