オブザーバビリティの世界へようこそ。
現場で長く戦っていると必ず直面する「負の遺産」、それがDashboard Sprawl(ダッシュボードの乱立)です。GUIでポチポチと作成された美しいダッシュボードは、誰がいつ修正したのか不明になり、やがて誰も触れない「化石」へと変わります。
これを防ぐ唯一の解は、「ダッシュボードをコードとして扱うこと(Dashboard as Code)」です。今日は、TerraformとGitHub Actionsを駆使して、 GrafanaをGitOpsの管理下に置くための、現場の「最適解」を伝授しましょう。
—
1. なぜ「コード管理」なのか?
GUIでの手動作成は、最初は楽ですが、数ヶ月後には悪夢に変わります。
- 変更履歴の欠如: 「誰がこのグラフの閾値を変えた?」が追えない。
- 再現性の欠如: 環境の作り直しやバックアップが困難。
- 属人化: 作成者の脳内にしか仕様がない。
これをTerraformで管理すれば、Gitのコミット履歴がそのまま「運用ログ」になり、プルリクエストを通すことで「チームによるレビュー」という強力な品質ゲートが生まれます。
—
2. 環境構築:Terraform × Grafana
まずは、TerraformからGrafanaを操作するための準備です。
事前準備
1. Grafana API Keyの発行: Grafanaの `Administration > Users and access > API keys` から、`Editor` 以上の権限を持つキーを発行してください。
2. ディレクトリ構成:
.
├── provider.tf # プロバイダー設定
├── dashboard.tf # ダッシュボード定義
└── variables.tf # 変数定義
provider.tf
terraform {
required_providers {
grafana = {
source = “grafana/grafana”
version = “>= 3.0.0”
}
}
}
provider “grafana” {
url = “https://your-grafana-instance.com”
auth = var.grafana_auth # APIキーを環境変数で渡すのが定石です
}
—
3. Hello World:ダッシュボードをコード化する
ここからが本題です。JSONを直接書くのは苦行ですが、GrafanaのGUIで作成したダッシュボードをJSONエクスポートし、それをTerraformの `grafana_dashboard` リソースに流し込むのが、最も手っ取り早く、かつミスのない手法です。
dashboard.tf
resource “grafana_dashboard” “main_metrics” {
config_json = file(“${path.module}/dashboards/main_metrics.json”)
folder = grafana_folder.operations.id # フォルダ管理もコード化!
}
resource “grafana_folder” “operations” {
title = “Operations-Dashboard”
}
ポイント: `file()` 関数を使って外部JSONを読み込むことで、Grafana上のJSONエディタとTerraformを分離できます。これでデザイナーはUIで作り、エンジニアはGitで管理するという分業が可能です。
—
4. GitHub Actionsで自動デプロイ
Terraformコマンドを手元のPCで打つのは卒業しましょう。GitHubにプッシュしたら自動で反映されるパイプラインを組みます。
.github/workflows/deploy.yml
name: Deploy Dashboards
on:
push:
branches: [main]
jobs:
terraform:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Terraform Apply
env:
GRAFANA_AUTH: ${{ secrets.GRAFANA_API_KEY }}
run: |
terraform init
terraform apply -auto-approve
このパイプラインが完成した瞬間、あなたのチームのオブザーバビリティは「管理される対象」から「進化する資産」へと変わります。
—
5. 伝説のエンジニアからのアドバイス
初心者が陥りやすい罠を一つだけ共有します。それは「すべてをTerraform化しようとしないこと」です。
- 推奨: 頻繁に更新されるチームのメインダッシュボードや、標準化されたアラート定義はTerraformで管理する。
- 非推奨: 個人の調査用スクラッチパッドや、一時的な分析用ダッシュボードまでTerraform化すること。
「定常的で重要なもの」をコード化し、「一時的なもの」はGUIに任せる。 このバランス感覚こそが、現場を疲弊させない最大の秘訣です。
さあ、今日から「ポチポチ作業」を卒業し、Gitの履歴と共に成長するダッシュボード運用を始めてみてください。あなたの運用の質が、劇的に変わるはずです。
何か詰まったら、いつでも聞いてください。設計思想から実装の泥臭い部分まで、一緒に解き明かしていきましょう。