第20章:Prometheus導入:スクレイプのしくみを知る 🕸️📥
① 今日のゴール 🎯
- Prometheusが **pull型(取りに来る)**でメトリクスを集めるのが分かる 💪
- **targets(監視対象)**が「UP」になるのを確認できる ✅
scrape_interval(取りに来る頻度)の意味がざっくり分かる ⏱️
② まずは1枚イメージ図 🖼️
- **API(あなたのNodeアプリ)**が
/metricsを公開 🌱 - Prometheus が一定間隔で
http://api:3000/metricsを取りに行く 🕷️ - 取ったデータは Prometheus 内の時系列DBにたまる 📦
- (次章)Grafana が Prometheus にクエリして可視化する 🖥️✨
イメージ(超ざっくり)👇
[Browser] [Prometheus] ----scrape----> [API /metrics]
| |
| +---- store time-series ----+
| |
+----(next) Grafana queries Prometheus <-----+
③ ここが大事:Prometheusの基本用語(最小)🧠
- scrape(スクレイプ):Prometheusがメトリクスを取りに行くこと 🕷️
- target:取りに行く相手(URL)🎯
- job:targetのグルーピング名(例:
api)🧩 - scrape_interval:取りに行く間隔(例:5秒、15秒、1分)⏱️
ちなみにデフォルトは 1分(
1m)です(設定で変えられるよ)(prometheus.io)
④ バージョンの話(めっちゃ大事)📌
DockerでPrometheusを動かすとき、**:latest を使うと「いつの間にか中身が変わる」**ことがあります 😇💥
なので教材でも **「バージョン固定」**がおすすめです。
- 2026-02-13 時点での Prometheus 最新リリース表示:3.9.1(2026-01-07) (prometheus.io)
- LTS(長期サポート)枠もあり、例として 3.5 系がLTSに入っています (prometheus.io)
- Docker Hub には
latestタグや多数のタグがあります (Docker Hub) (運用では “latest頼み” を避けよう、の気持ち🙏)
この章では例として v3.9.1 固定で進めます(※あなたの環境で最新が更新されていたら、同じ考えで “その版に固定” してOK👍)(prometheus.io)
⑤ ハンズオン:ComposeでPrometheusを追加する 🛠️📦
Step 0. ファイル配置(例)📁
こんな感じの構成にします(既存プロジェクトに追加するだけ)👇
-
compose.yml -
prometheus/prometheus.yml
Step 1. prometheus/prometheus.yml を作る 📝
ポイントは3つだけ👇
scrape_interval(取りに行く頻度)job_name(グループ名)targets(取りに行く先)
global:
scrape_interval: 5s # 学習用に短め(動きが見えて楽しい😆)
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["prometheus:9090"]
- job_name: "api"
metrics_path: /metrics
static_configs:
- targets: ["api:3000"]
✅ ここ超重要:api:3000 は Composeのサービス名です!
Prometheusコンテナの中から見ると、localhost:3000 は “Prometheus自身” になっちゃうので注意😵💫
設定項目の全体像は公式ドキュメントにもあります(scrape_configs や static_configs など)(prometheus.io)
Step 2. compose.yml に Prometheus を追加する ➕
あなたの api サービスが既にある前提で、Prometheusを足します。
services:
api:
# ここは既存のままでOK(例:build, ports, environment など)
ports:
- "3000:3000"
prometheus:
image: prom/prometheus:v3.9.1
container_name: prometheus
ports:
- "9090:9090"
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
command:
- "--config.file=/etc/prometheus/prometheus.yml"
9090は Prometheus のWeb画面のポートです 🖥️volumesで設定ファイルをコンテナに渡してます 📦
Docker Hub の prom/prometheus イメージ情報(タグなど)(Docker Hub)
Step 3. 起動する 🚀
VS Codeのターミナルで👇
docker compose up -d
docker compose ps
prometheus と api が Up になってたらOK✅
⑥ 動作確認:targets を見る 👀🎯
1) Prometheusの画面を開く 🌐
ブラウザで👇
http://localhost:9090
2) Targets を開く ✅
メニューから Status → Targets を開きます。
ここで job="api" が UP になってたら勝ち🏆✨
裏側ではAPIとしても targets 情報が取れます(/api/v1/targets)(prometheus.io)
⑦ ちょいクエリ体験(最小)📈
Prometheus画面の Graph で、これを試すと “取れてる感” が出ます😆
-
up→ Prometheusが取れてるtargetは1、死んでると0 -
up{job="api"}→ APIだけ見たい時の絞り込み🎯
(次章でGrafanaに渡すと、ここが一気に楽しくなるよ〜✨)
⑧ つまづきポイント 3つ 🪤😵💫
1) targetがDOWNのまま 😭
よくある原因👇
targets: ["localhost:3000"]にしてしまった(罠)- APIが
/metricsを生やしてない or ルーティングが違う - APIコンテナが落ちてる(
docker compose logs apiで確認)
2) /metrics が重い(CPU上がる)🔥
scrape_interval: 1sとかにすると、取りに来る回数が増えて負荷が上がります⚠️ 学習中は短くてもOKだけど、本番運用は慎重にね🙏
3) メトリクスが増えすぎる 🤯
- Prometheusは時系列をためるので、ラベル設計が雑だと爆発します💣 (この話は後半の運用章でじわじわ効いてくるやつ🧠)
⑨ ミニ課題(15分)⏳💪
scrape_intervalを5s → 15sに変える- Prometheusを再起動
- Targetsの
Last Scrapeの更新が遅くなるのを確認する
再起動はこれでOK👇
docker compose restart prometheus
⑩ AIに投げるプロンプト例(コピペOK)🤖📋
プロンプト1:DOWNの原因あてゲーム🎯
PrometheusのTargetsで job="api" が DOWN になります。
Docker Compose 構成で、Prometheusは api:3000/metrics をscrapeしています。
考えられる原因を「可能性が高い順」に10個挙げて、確認コマンドもセットで教えてください。
プロンプト2:prometheus.yml をレビューしてもらう🧑🔧
この prometheus.yml を初心者向けにレビューして、危険ポイントと改善案を教えて。
(特に scrape_interval と targets の書き方)
---ここに貼る---
⑪ この章のまとめ 🧾✨
- Prometheusは pull型で
/metricsを取りに来る 🕷️ - Composeでは target は サービス名:ポート が基本(
api:3000)🎯 - Targetsで UPを確認できれば、導入は成功 ✅
- 次章のGrafanaで「うおお見える!」が来ます😆🖼️✨
次の **第21章(Grafanaで可視化)に向けて、もし今の api 側の /metrics が「どんなメトリクス名を出してるか」も一緒に整理したいなら、/metrics の出力を少し貼ってくれたら、“最初に作るべきダッシュボード用クエリ”**までセットで作るよ〜📈🤝✨