Grafana をコードとして運用する:全体像
ファイルに置けるもの、API が必要なもの、そしてそれらがどう組み合わさるか。
クリックで操作する Grafana は、2 つ目のコピーが必要になったり、ロールバックが必要になったり、「このパネルを誰が変更したのか」という質問に答える必要が出てきたりするまでは、問題なく機能します。このガイドでは、UI ではなくファイルから Grafana を実行する方法の全体像を示すので、YAML を書き始める前に、どのリソースにどのメカニズムを使うかがわかります。
UI が問題になる理由
ダッシュボード、データソース、アラートを手作業で作成すると、時間とともに 3 つのことが悪化します。
- 何も再現できない。 状態は Grafana のデータベースにあります。インスタンスを再構築するには、すべてのクリックをやり直すことになります。
- 変更が見えない。 レビューのステップがなく、Grafana 自身のバージョンログ以外の履歴もありません。
- 環境がドリフトする。 staging と本番は徐々に乖離し、それがどのようにかは誰にもわかりません。
解決策は、データベースをキャッシュとして、リポジトリを真実として扱うことです。Grafana が必要とするすべてのものは、起動時にファイルからプロビジョニングされるか、ファイルを読み取るツールによって適用されます。
階層
| 層 | 形式 | 制御するもの | 適用するもの |
|---|---|---|---|
| サーバー設定 | grafana.ini と GF_* 環境変数 | ポート、データベース、認証、SMTP、ログ、feature toggle | 起動時の Grafana |
| データソースのプロビジョニング | YAML | データソースとその認証情報 | 起動時の Grafana |
| ダッシュボードのプロビジョニング | YAML のプロバイダー + JSON ファイル | ダッシュボードとフォルダー | Grafana。一定の間隔で再スキャン |
| アラートのプロビジョニング | YAML | アラートルール、コンタクトポイント、ポリシー、ミュートタイミング、テンプレート | 起動時の Grafana |
| プラグインのプロビジョニング | YAML | インストール済みのプラグインアプリの設定 | 起動時の Grafana |
| Terraform | HCL | API を持つすべてのもの:フォルダー、データソース、ダッシュボード、アラート、チーム、サービスアカウント | terraform apply |
| Grafana Operator | Kubernetes のカスタムリソース | インスタンス、フォルダー、ダッシュボード、データソース、アラートルール | クラスター内のコントローラー |
| Git Sync | Repository リソース | Git リポジトリに保存され、双方向に同期されるダッシュボード | Grafana 自身 |
どれを使うべきか
- コンテナまたは VM 内の 1 つの Grafana、小規模なチーム: サーバー設定とファイルによるプロビジョニング。追加の可動部分がありません。
- GitOps(Flux または Argo CD)を使う Kubernetes: インスタンスには Grafana の Helm チャートを使い、プロビジョニングファイルを ConfigMap として使うか、各ダッシュボードとデータソースを個別の Kubernetes オブジェクトとして扱いたい場合は Grafana Operator を使います。
- 多数のインスタンス、または Grafana Cloud: Terraform。スタック、サービスアカウント、チームも作成できるためです。
- 多くの人が作成するダッシュボード: Git Sync、または JSON を生成する Grafana Foundation SDK のようなコードライブラリ。
これらはうまく組み合わせられます。一般的な構成は、データソースとアラートにはファイルによるプロビジョニングを、ダッシュボードには Git Sync または Terraform を使うものです。
ファイルではできないこと
一部のリソースには、プロビジョニングのファイル形式がありません。それに備えて計画してください。
- ユーザー、チーム、組織、サービスアカウント は、API または Terraform(あるいは SSO とロールマッピングを持つ ID プロバイダー)で作成します。
- フォルダーとダッシュボードの権限 は、API、Terraform、または Operator で管理します。
- 最初の admin パスワード は、初回実行時にのみ設定されるため、後で変更するには CLI や API の呼び出しが必要です。
認証と Terraform のガイドが、これらの回避策を説明します。
プロビジョニングされたものはロックされる
プロビジョニングされたリソースは、ファイルによって所有されることを意図しています。データソースは editable: false とマークでき、プロバイダーのダッシュボードは UI での保存を拒否でき、プロビジョニングされたアラートのリソースは UI ではまったく編集できません。それが要点です。誰かが手作業で変更できるなら、Git は真実ではなくなります。UI は、データの探索やパネルの下書きには依然として有用であることを忘れないでください。ダッシュボードのガイドの作成のワークフローが、それらの下書きを Git に戻す方法を示します。
変更のメンタルモデル
- リポジトリ内のファイル(ダッシュボードの JSON、データソースの YAML、アラートルール)を編集します。
- プルリクエストを開き、diff をレビューし、マージします。
- 配信メカニズムがそれを適用します。コンテナの再起動、ダッシュボードの再スキャン、Flux の調整、または
terraform applyです。 - Grafana 自身のデータベースが一致するように更新されます。何か問題が起きたら、commit を revert します。
次に進む先
compose ファイルからローカルの Grafana を実行し(次のガイド)、設定のルールを学び、その後、データソース、ダッシュボード、アラートを 1 つずつ追加します。リファレンスとしては、Grafana のドキュメントを参照してください。
人気のガイド
-
grafana.ini と環境変数で Grafana サーバーを設定する 設定ファイルの場所、上書きの順序、設定を Git に保つ方法を理解します。 -
JSON ファイルからダッシュボードをプロビジョニングする ディスクからダッシュボードを読み込み、ディレクトリからフォルダーを対応付け、変更を失わずに作成します。 -
アラートルール、コンタクトポイント、通知ポリシーをプロビジョニングする アラートのパイプライン全体を YAML で定義し、コードのようにレビューしてバージョン管理します。 -
Helm とプロビジョニングの values で Grafana を Kubernetes にデプロイする データソース、ダッシュボード、設定のすべてが values ファイルから来る、Helm チャートで Grafana を実行します。 -
コマンドラインからプロビジョニングを再読み込み、確認、トラブルシューティングする Grafana が何を読み込んだかを調べ、再起動せずに再読み込みし、よくあるプロビジョニングのエラーを修正します。