使用 grafana.ini 和环境变量配置 Grafana 服务器
了解配置文件的位置、覆盖的顺序,以及如何将设置保存在 Git 中。
Grafana 服务器的行为由一个 INI 文件以及覆盖它的环境变量控制。了解这些规则,就可以把整个配置保存在仓库中,而无需手动改动任何东西。本指南涵盖文件的位置、优先级如何运作、如何注入值和密钥,以及你最常接触的设置。
配置位于何处
defaults.ini随 Grafana 发布,包含所有默认值(tarball 安装时位于conf/)。切勿编辑它。它是了解有哪些选项的最佳参考。grafana.ini是你的配置文件。在 Linux 软件包中是/etc/grafana/grafana.ini,官方 Docker 镜像读取同一路径。对于 tarball 安装,使用conf/custom.ini。传入--config可指向其他文件。- 以
GF_开头的环境变量会同时覆盖这两者。
优先级由低到高:defaults.ini,然后是你的 grafana.ini,再是 GF_* 环境变量(以及命令行参数)。只把你想更改的选项放进你的文件,这样 diff 会保持很小。
在 INI 文件中,以 ; 开头的行是注释,所以要启用某个选项,请去掉开头的 ;:
;http_port = 3000 # ignored
http_port = 3000 # active
更改文件或环境之后,需要重启 Grafana。
环境变量覆盖
模式是 GF_<SECTION>_<KEY>,其中 section 和 key 为大写,任何 . 或 - 都替换为 _:
GF_SECURITY_ADMIN_USER=owner # [security] admin_user
GF_SERVER_ROOT_URL=https://grafana.example.com # [server] root_url
GF_AUTH_GOOGLE_CLIENT_SECRET=newS3cretKey # [auth.google] client_secret
GF_FEATURE_TOGGLES_newNavigation=true # [feature_toggles] newNavigation
GF_DEFAULT_INSTANCE_NAME=my-instance # top-level instance_name, no section
环境变量天然适合容器和 Kubernetes,因为同一份文件可以被每个环境共享,而特定于环境的值(URL、密码)则来自平台。
文件内的变量展开
选项值可以使用 $__env{} 和 $__file{} 提供器,或 ${NAME} 简写,来引用环境变量或文件:
[paths]
logs = $__env{LOGDIR}/grafana
[security]
admin_password = ${GF_ADMIN_PASSWORD}
secret_key = $__file{/run/secrets/grafana_secret_key}
[database]
password = $__file{/etc/secrets/gf_sql_password}
$__file{} 读取文件并去除首尾空白,这使它很适合以文件形式挂载的 Docker 和 Kubernetes secret。Grafana Enterprise 还有一个 $__vault{} 提供器。官方 Docker 镜像还接受在变量名后加 __FILE 后缀(例如 GF_SECURITY_ADMIN_PASSWORD__FILE=/run/secrets/admin_password),这在密钥指南中有介绍。
一个实用的基线
适用于小型类生产环境的简短 grafana.ini:
[paths]
provisioning = /etc/grafana/provisioning
[server]
protocol = http
http_port = 3000
domain = grafana.example.com
root_url = https://grafana.example.com/
; add the sub path to root_url and enable this when served from /grafana
; serve_from_sub_path = true
[database]
type = postgres
host = postgres:5432
name = grafana
user = grafana
password = $__file{/run/secrets/grafana_db_password}
[security]
admin_user = admin
admin_password = $__file{/run/secrets/grafana_admin_password}
secret_key = $__file{/run/secrets/grafana_secret_key}
cookie_secure = true
[users]
allow_sign_up = false
[analytics]
reporting_enabled = false
check_for_updates = false
[log]
mode = console
level = info
值得了解的几点:
- 数据库。 默认是 SQLite,适合单实例和测试。生产环境请使用 PostgreSQL 或 MySQL,并且超过一个 Grafana 副本时必须使用。
root_url必须与公开地址一致,否则告警通知中的链接和 OAuth 重定向会出错。如果反向代理将 Grafana 放在子路径下,请把该子路径加到root_url,并设置serve_from_sub_path = true。admin_password只在 Grafana 首次创建数据库时应用。之后更改该设置不会改变现有管理员用户的密码。secret_key用于加密为数据源存储的密钥。如果你更改它,之前存储的密钥就无法读取,数据源必须重新 provision。请显式设置它,并且不要随意轮换。[paths] provisioning是 Grafana 查找 provisioning 文件夹的位置。软件包上的默认值是/etc/grafana/provisioning。
用于邮件告警的 SMTP
[smtp]
enabled = true
host = smtp.example.com:587
user = grafana@example.com
password = $__file{/run/secrets/smtp_password}
from_address = grafana@example.com
from_name = Grafana
startTLS_policy = OpportunisticStartTLS
或者使用同样效果的 GF_SMTP_ENABLED=true、GF_SMTP_HOST=... 等。请对照你所用版本的 defaults.ini 验证选项名称。
功能开关
实验性的或需要主动选择的功能,在一个专门的配置段中开启:
[feature_toggles]
; list the toggles you want, as documented for your version
newNavigation = true
优先使用文件或环境变量,而不是 UI,这样设置能在重建后保留下来。开关会随版本更替而增减,所以每次升级时都要复查。
验证并检查实际生效的配置
启动 Grafana 之后,你可以将你设置的内容与实际生效的内容比较:
curl -s -u admin:$GRAFANA_ADMIN_PASSWORD http://localhost:3000/api/admin/settings | jq '.server'
这个管理端点返回合并后的设置,敏感键的值会被屏蔽。它是确认某个环境变量是否真正生效的最快方式。如果没有生效,请检查变量的拼写(大写、下划线),以及该选项是否存在于 defaults.ini 中。
保存在 Git 中
- 提交
grafana.ini和一个带占位值的.env.example。 - 真正的 secret 不要放进仓库:以文件形式挂载、以环境变量形式注入,或加密后提交(参见密钥指南)。
- 升级 Grafana 时,复查
defaults.ini的变化。新版本会增加选项,有时也会弃用旧选项。
热门指南
-
将 Grafana 作为代码运维:全景图 哪些可以放在文件里,哪些需要 API,以及各部分如何组合在一起。 -
从 JSON 文件 Provision 仪表板 从磁盘加载仪表板,从目录映射文件夹,并在不丢失变更的前提下创作仪表板。 -
Provision 告警规则、联系点与通知策略 用 YAML 定义整条告警管线,使其像代码一样被审查和版本化。 -
使用 Helm 和 Provisioning Values 在 Kubernetes 上部署 Grafana 通过 Helm chart 运行 Grafana,数据源、仪表板和设置都来自 values 文件。 -
从命令行重新加载、验证并排查 Provisioning 问题 找出 Grafana 加载了什么,无需重启即可重新加载,并修复常见的 provisioning 错误。