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 # 無視される
http_port = 3000 # 有効
ファイルや環境を変更した後は、Grafana を再起動してください。
環境変数による上書き
パターンは GF_<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 # 最上位の instance_name、セクションなし
環境変数は、コンテナや 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 のシークレットに適しています。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/
; /grafana から提供する場合は、root_url にサブパスを追加し、これを有効にする
; 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 が最初にデータベースを作成するときにだけ適用されます。後で設定を変更しても、既存の admin ユーザーのパスワードは変わりません。secret_keyは、Grafana がデータソース用に保存するシークレットを暗号化します。変更すると、以前に保存されたシークレットが読めなくなり、データソースを再度プロビジョニングする必要があります。明示的に設定し、軽々しくローテーションしないでください。[paths] provisioningは、Grafana がプロビジョニングフォルダーを探す場所です。パッケージでのデフォルトは/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 toggle
実験的な機能やオプトインの機能は、専用のセクションでオンにします。
[feature_toggles]
; お使いのバージョンのドキュメントに従って、必要な toggle を列挙する
newNavigation = true
UI ではなく、ファイルや環境を優先してください。そうすれば、再構築しても設定が残ります。toggle はリリース間で現れたり消えたりするため、アップグレードのたびに確認してください。
有効な設定を検証して調べる
Grafana を起動した後、設定したものと有効なものを比較できます。
curl -s -u admin:$GRAFANA_ADMIN_PASSWORD http://localhost:3000/api/admin/settings | jq '.server'
この管理用のエンドポイントは、マージされた設定を返し、機密性のあるキーの値はマスクされます。環境変数が実際に効果を持ったことを確認する、最も手早い方法です。そうでない場合は、変数のスペル(大文字、アンダースコア)と、そのオプションが defaults.ini に存在することを確認してください。
Git に保管する
grafana.iniと、プレースホルダーの値を持つ.env.exampleを commit します。- 実際のシークレットはリポジトリの外に置きます。ファイルとしてマウントする、環境変数として注入する、または暗号化して commit します(シークレットのガイドを参照)。
- Grafana をアップグレードするときは、
defaults.iniの変更を確認してください。新しいリリースでは、オプションが追加され、ときには古いものが非推奨になります。
人気のガイド
-
Grafana をコードとして運用する:全体像 ファイルに置けるもの、API が必要なもの、そしてそれらがどう組み合わさるか。 -
JSON ファイルからダッシュボードをプロビジョニングする ディスクからダッシュボードを読み込み、ディレクトリからフォルダーを対応付け、変更を失わずに作成します。 -
アラートルール、コンタクトポイント、通知ポリシーをプロビジョニングする アラートのパイプライン全体を YAML で定義し、コードのようにレビューしてバージョン管理します。 -
Helm とプロビジョニングの values で Grafana を Kubernetes にデプロイする データソース、ダッシュボード、設定のすべてが values ファイルから来る、Helm チャートで Grafana を実行します。 -
コマンドラインからプロビジョニングを再読み込み、確認、トラブルシューティングする Grafana が何を読み込んだかを調べ、再起動せずに再読み込みし、よくあるプロビジョニングのエラーを修正します。