【実務・中級編】Docker ComposeでPrometheusを5分で構築!ローカル開発環境の監視を始めよう – 運用監視・オブザーバビリティ活用バイブル

「なんとなく監視」からの卒業:Prometheusで構築する、攻めのローカル開発環境

こんにちは。テックリードの視点から言わせてもらえば、「開発環境の挙動がブラックボックスであること」は、エンジニアにとって最大の負債です。

ローカルで動いているコンテナが「重いのか?」「なぜ重いのか?」「どこで詰まっているのか?」。これを勘や `docker stats` のチラ見だけで済ませていないでしょうか。

今日は、Prometheusを5分で立ち上げ、あなたのローカル開発環境を「観測可能な実験場」に変える、プロの実践的な構築術を伝授します。

—

1. 構築するアーキテクチャ:なぜPrometheusなのか?

Prometheusは単なるグラフ描画ツールではありません。「時系列データのクエリエンジン」です。

今回の構成では、`Prometheus` が `node-exporter`(ホストのメトリクス収集)と `cAdvisor`(コンテナごとの負荷収集)を定期的に「Pull」する構成をとります。これが分散システム監視の基本形です。

[ Prometheus ] <-- (Pull) -- [ cAdvisor (Dockerメトリクス) ] | <-- (Pull) -- [ Node Exporter (OSメトリクス) ] +--> [ Grafana (可視化・オプション) ]

—

2. 即座に動く実用設定:`docker-compose.yml` & `prometheus.yml`

まずは、設定ファイルのベストプラクティスを共有します。ハードコーディングは避け、環境変数やセパレート構成を意識することが、チーム共有の第一歩です。

docker-compose.yml

version: ‘3.8’
services:
prometheus:
image: prom/prometheus:latest
volumes:

  • ./prometheus.yml:/etc/prometheus/prometheus.yml:ro

ports:

  • “9090:9090”

restart: always

cadvisor:
image: gcr.io/cadvisor/cadvisor:latest
volumes:

  • /:/rootfs:ro
  • /var/run:/var/run:ro
  • /sys:/sys:ro
  • /var/lib/docker/:/var/lib/docker:ro

ports:

  • “8080:8080”

prometheus.yml

プロのこだわり: `scrape_interval` は短すぎるとDBが肥大化し、長すぎると急激なスパイクを見逃します。開発環境なら `15s` がスイートスポットです。

global:
scrape_interval: 15s

scrape_configs:

  • job_name: ‘docker-containers’

static_configs:
# cadvisorのホスト名をコンテナ名で指定(Dockerネットワーク内)

  • targets: [‘cadvisor:8080’]

—

3. コンテナ起動と「隠れたキーボードショートカット」

構築は `docker-compose up -d` 一発です。`http://localhost:9090` にアクセスしてください。

ここで、PrometheusのWeb UIを使いこなす「生産性爆上げショートカット」を紹介します。

  • `Shift + Enter`: クエリの実行(マウスを触るな、キーボードから手を離すな)。
  • `Ctrl + Enter`: グラフの再描画。
  • `?` (Help): 全ショートカット一覧。まずはこれを開いてください。

神の使いこなし術:
UIの `Graph` タブではなく、必ず `Expression browser` でクエリを組み立ててください。`rate(container_cpu_usage_seconds_total[5m])` のような関数を打ち込み、即座に結果を確認する。この「フィードバックループの速さ」こそが、デバッグ能力の差になります。

—

4. トラブルシューティング:接続エラーを即死させない

「TargetがDownしている」という真っ赤な表示が出た場合、焦らず以下を確認してください。

1. Docker Networkの隔離: Prometheusコンテナから `cadvisor` のホスト名が名前解決できているか? (`docker exec -it ping cadvisor`)
2. ボリュームのパーミッション: `/var/run/docker.sock` へのアクセス権限不足は、Docker環境での「あるある」です。
3. 時刻同期: ローカルのDocker Desktopの場合、時計がズレることがあります。メトリクスはタイムスタンプ命。同期を確認してください。

—

5. チームで活かすための「プロの作法」

最後に、チーム開発で役立つ「設定の標準化」について。

  • ダッシュボードのコード管理: 構築したGrafanaダッシュボードは必ず `JSON` でエクスポートし、Gitリポジトリの `/ops/dashboards/` 配下で管理してください。
  • ラベルの統一: `env=local`, `app=backend` などのラベル付けルールを定義しましょう。これが無いと、本番環境で地獄を見ます。
  • Prometheusのルールファイル分割: 設定が肥大化したら `rule_files` を活用し、アラート定義とジョブ定義を物理的に分離してください。

結び:監視は「保険」ではなく「武器」

監視を「障害が起きた時に見るもの」と考えているうちは二流です。
「今、この瞬間のパフォーマンスを数値で証明できる」という状態こそが、エンジニアの自信を支える最強の武器になります。

さあ、今すぐPrometheusを立ち上げ、あなたの開発環境の「中身」を可視化してください。そこには、今まで気づかなかった「改善の宝庫」が眠っているはずです。

タイトルとURLをコピーしました