环境变量不能直接创建数据源,仅能预填充provisioning YAML模板中的占位符;需结合provisioning配置、环境变量注入和初始化脚本实现自动配置。
Grafana 支持通过环境变量覆盖配置文件中的设置,数据源配置也不例外——但需注意:环境变量不能直接定义完整数据源(如 Prometheus 实例),而是用于预填充或辅助已有配置。真正实现“自动配置数据源”,需结合 Grafana 的 API 或初始化脚本。不过,环境变量在自动化流程中扮演关键角色,尤其在容器化部署(如 Docker、Kubernetes)中非常实用。
环境变量主要用于设置 Grafana 启动时的全局参数,影响数据源的连接行为,而非创建新数据源。常见可覆盖项包括:
GF_DATASOURCES_PROMETHEUS_URL 设置(需配合插件或自定义配置模板)GF_DATASOURCES_PROMETHEUS_USER 和 GF_DATASOURCES_PROMETHEUS_PASSWORD
GF_DATASOURCES_PROMETHEUS_HTTP_TIMEOUT、GF_DATASOURCES_PROMETHEUS_TLS_SKIP_VERIFY
GF_DATASOURCES_MYDB_NAME=MyDB + GF_DATASOURCES_MYDB_TYPE=mysql(需 Grafana v9.5+ 及插件支持)Grafana 的数据源是运行时对象,存储在数据库(如 SQLite、PostgreSQL)中,环境变量本身不触发写入操作。最新明确说明:环境变量仅用于覆盖 grafana.ini 中的静态配置项,不用于动态注册数据源。也就是说:
export GF_DATASOURCES_PROMETHEUS_URL=http://prom:9090 就让 Grafana 自动添加一个 Prometheus 数据源provisioning/datasources/ YAML 文件)才能生效要实现“启动即可用”的数据源自动配置,应采用 provisioning + 环境变量 + 初始化脚本 三者协同:
custom.ini 或环境变量中开启:GF_PROVISIONING_PATH=/etc/grafana/provisioning
/etc/grafana/provisioning/datasources/prometheus.yaml,其中使用 ${ENV_VAR_NAME} 占位符:url: ${PROMETHEUS_URL:-http://localhost:9090}
docker run -e PROMETHEUS_URL=http://prom-prod:9090 grafana/grafana
POST /api/datasources,配合脚本验证响应状态实际部署中容易踩的几个坑:
GF_ 前缀;provisioning 中的占位符用 ${VAR},不是 $VAR
datasources/,环境专属放 datasources/env/
GF_SECURITY_ADMIN_PASSWORD 等敏感变量时,避免日志泄露,建议配合 secret mount 或 vault 注入envFrom: secretRef 加载凭证,而非明文 env: 定义