「とりあえず動いた」で満足するな。Grafana + Prometheusを最強の観測基盤に変えるための「実戦的」構築術
こんにちは。現場で泥臭いトラブルシューティングを繰り返してきたエンジニアの皆さんに、一つだけ問いたい。
「君たちの監視基盤は、障害発生時に『今、何が起きているか』を即座に語りかけてくれるか?」
「とりあえずメトリクスが見れればいい」という構築は、一秒を争う障害対応の現場では単なるノイズの山だ。今日は、Docker環境での構築手順をベースにしつつ、明日から君たちの開発スピードを劇的に変える「プロの作法」を伝授する。
—
1. 構築の前に:なぜ「コード」ですべてを管理するのか
監視基盤を構築する際、ブラウザのGUIでポチポチ設定するのは「死への入り口」だ。GUIの設定は再現性がなく、チーム内での共有もできない。
我々は「監視もインフラもすべてコード(IaC)で管理する」。これがオブザーバビリティの第一歩だ。
docker-compose.yml:実務で耐えうる「神」構成
初心者がやりがちな「とりあえずマウント」を排し、永続化と権限管理を意識した構成がこれだ。
version: ‘3.8’
volumes:
prometheus_data: {}
grafana_data: {}
services:
# Prometheus: 時系列データの心臓部
prometheus:
image: prom/prometheus:latest
container_name: prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
- prometheus_data:/prometheus
command:
- ‘–config.file=/etc/prometheus/prometheus.yml’
- ‘–storage.tsdb.retention.time=15d’ # 運用負荷を考慮した15日保持
ports:
- “9090:9090”
# Grafana: データの可視化と解析の要
grafana:
image: grafana/grafana:latest
container_name: grafana
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin # 本番では必ず環境変数等で隠蔽すること
- GF_USERS_ALLOW_SIGN_UP=false # セキュリティの基本:登録は制限する
volumes:
- grafana_data:/var/lib/grafana
ports:
- “3000:3000”
depends_on:
- prometheus
—
2. 起動と「プロの」初期設定
`docker-compose up -d` を叩けば、`localhost:3000` でログイン画面が現れる。
最初のデータソース追加の「罠」
初心者は「URL」に `http://localhost:9090` と入れがちだが、これはDockerコンテナ内部のネットワークを理解していない証拠だ。Docker Composeのサービス名で指定するのが正解だ。
- URL: `http://prometheus:9090`
これで、Grafanaは同じDockerネットワークを介してPrometheusと通信する。
—
3. 現場を救う「隠れたキーボードショートカット」
Grafanaの操作でマウスを使っている時間は、すべて無駄だ。以下のショートカットを指に覚え込ませろ。
- `Shift + Space`: コマンドパレットを開く(ここからダッシュボード検索が最強に早い)。
- `d` + `r`: 直近のデータ範囲をリロード。
- `d` + `z`: ズームアウト。
- `d` + `l`: グラフの凡例(Legend)表示の切り替え。
これらを使いこなすだけで、会議室のモニターの前でマウスをカチカチ鳴らす「素人感」を払拭できる。
—
4. 絶対入れるべき「神プラグイン」
Grafanaはプラグインを入れることで、ただのグラフ描画ソフトから「インシデント管理ツール」に進化する。
1. [Clock Panel](https://grafana.com/grafana/plugins/grafana-clock-panel/): UTCとJSTを並べる。時差によるログの突き合わせミスを撲滅する。
2. [Status Panel](https://grafana.com/grafana/plugins/vonage-status-panel/): 「健康状態」を信号機(赤・黄・青)で表示せよ。ダッシュボードを一瞥するだけで異常を察知できる。
3. [Infinity](https://grafana.com/grafana/plugins/grafana-infinity-datasource/): JSONやCSVなどの外部APIを直接叩ける。Prometheus以外の外部ツールとの連携に必須だ。
—
5. チーム開発で生き残るための「共有ルール」
監視基盤で最も悲惨なのは、「俺のダッシュボード」が乱立し、どれが正解か分からなくなることだ。
- Provisioning機能を使え: ダッシュボードのJSONを `provisioning/dashboards` ディレクトリに配置し、コンテナ起動時に読み込ませろ。GUIで作成したダッシュボードは必ず「Export」してGit管理下に置くこと。
- 変数を駆使せよ: 環境(dev, stg, prod)やノード名をハードコードするな。`$environment` や `$node` といった「Dashboard Variables」を定義し、一つのダッシュボードですべての環境を切り替えて見るのがプロだ。
—
最後に:オブザーバビリティの本質とは
ツールを導入しただけで満足してはいけない。重要なのは「どのメトリクスがビジネスのKPIに直結しているか」を定義することだ。
CPU使用率が80%になったからアラートを出す? それはただの「監視」だ。
「ユーザーがエラー画面を何回見たか」「トランザクションが何ミリ秒遅延したか」を追うことこそが、「オブザーバビリティ(観測可能性)」である。
この環境を構築した今、君たちは「システムが何を語っているか」を聴く準備ができた。さあ、次はダッシュボードの向こう側にある、ユーザーの体験を観測する旅に出よう。
質問があればいつでも来い。現場の戦友として、いつでも答えを叩き込んでやる。