技術
Grafana
ダッシュボード、アラート、データ探索を、コードとして運用する
Grafana は、多くのデータソースのメトリクス、ログ、トレースを可視化し、アラートを設定するための、オープンソースのプラットフォームです。ほとんどの人は Web UI を通じて Grafana を知りますが、Grafana のインストールで重要なことはすべて、ファイルに記述することもできます。サーバー設定、データソース、ダッシュボード、アラートルール、コンタクトポイント、通知ポリシーなどです。このシリーズでは、その 2 つ目の働き方に焦点を当てます。そうすれば、Grafana のインスタンスをいつでも Git から再構築でき、先月誰が何をクリックしたかを誰も覚えておく必要がなくなります。
仕組み
Grafana は、UI を開かなくても制御できる階層から設定を読み取ります。
- サーバー設定(
grafana.iniとGF_*環境変数)は、ポート、データベース、認証、SMTP、feature toggle を制御します。 - プロビジョニングファイル(
provisioning/フォルダー内の YAML)は、起動時にデータソース、ダッシュボードプロバイダー、アラートのリソース、プラグインの設定を作成します。 - ディスク上のダッシュボードの JSON ファイルは、ダッシュボードプロバイダーによって読み込まれ、Grafana の実行中に再スキャンされます。
- API と operator(Terraform、Grafana Operator、Git Sync、
gcxCLI)は、チーム、サービスアカウント、フォルダーの権限など、ファイルだけでは管理できないものを扱います。
これらはすべてプレーンテキストなので、Flux や Argo CD を含む、インフラの他の部分と同じ GitOps のワークフローに適合します。
主要な概念
- Data source(データソース) — Prometheus、Loki、PostgreSQL などのバックエンドへの接続です。ダッシュボードとアラートルールは、名前または UID でデータソースをクエリします。
- Dashboard(ダッシュボード) — パネルと変数からなる JSON ドキュメントです。Grafana は現在、内部でより新しいダッシュボードスキーマを使っており、古い JSON は読み込み時に自動的に移行されます。
- Folder(フォルダー) — ダッシュボードとアラートルールを整理し、権限を持ちます。
- Provisioning(プロビジョニング) — 起動時にファイルからリソースを読み込むことで、誰かがログインする前に存在するようにします。
- Alerting(アラート) — アラートルール、コンタクトポイント、通知ポリシー、ミュートタイミング、テンプレートで、そのすべてをプロビジョニングできます。
- Organization(組織) — 1 つの Grafana サーバー内のテナントの境界です。ほとんどのファイルが
orgIdを受け取ります。
Grafana をコードとして運用する理由
- 再現可能。 失われた、あるいは新しいインスタンスが、リポジトリから同一のものとして戻ってきます。
- レビュー可能。 ダッシュボードやアラートの変更は、追跡されない編集ではなく、diff のあるプルリクエストです。
- 環境間で一貫。 dev、staging、本番は定義を共有し、値だけが異なります。
- ドリフトが見える。 プロビジョニングされたリソースは、UI での編集をロックできるため、Git が信頼できる情報源であり続けます。
はじめに
provisioning/ フォルダーをマウントして Grafana をコンテナで実行し、データソースのファイルとダッシュボードプロバイダーを追加し、その隣にダッシュボードの JSON を置きます。以降のガイドは、そこから始まり、アラート、シークレット、Kubernetes、Terraform、Operator へと進みます。これらは Grafana 13 を想定して書かれています。インストールするバージョンについては、Grafana のドキュメントを確認してください。一部の as-code の機能は、まだ alpha とマークされているためです。