C
DevOps/クラウド 可観測性/Lesson 04

クラウド + モニタリング — AWS · Prometheus · Grafana

45分·theory

クラウド + モニタリング — AWS · Prometheus · Grafana

🎯 このレッスンを読み終えたら

このレッスンをすべて読み終えると、以下の3つを自信を持って実践できるようになります。

  • ✅ AWS / GCP / Azure のコアサービスのマッピング
  • ✅ OpenTelemetry (Trace · Metrics · Logs) のセットアップ
  • ✅ SLO/SLI/SLA + Prometheus + Grafana

学習目標をチェックリストとして手元に置き、すべてに答えられるようになったらレッスンを閉じてください。

AWS の主要サービス + クラウドの選び方

AWS (市場シェア1位、2006年〜):

カテゴリサービス
コンピュートEC2 (VM) · Lambda (サーバーレス) · ECS·EKS (コンテナ)
ストレージS3 (オブジェクト) · EBS (ブロック) · EFS (ファイル)
DBRDS (マネージドRDBMS) · DynamoDB (NoSQL) · ElastiCache (Redis)
ネットワークVPC · CloudFront (CDN) · Route 53 (DNS) · API Gateway
DevOpsCodeDeploy · CodePipeline · CloudFormation
セキュリティIAM · KMS · Secrets Manager · WAF
可観測性CloudWatch · X-Ray (トレーシング)

クラウド比較:

クラウド強み韓国市場
AWS最も多様・学習リソース豊富1位
GCPKubernetes・AI が強力増加中
Azureエンタープライズ・Microsoft エコシステム企業向け
Naver Cloud韓国データ・認証対応政府・金融

コスト削減のヒント:

  • Reserved Instance / Savings Plan — 1年・3年契約 (~60% 割引)
  • Spot Instance — 中断可能 (~90% 割引) · バッチ処理
  • S3 Glacier — 過去データのアーカイブ (~$0.004/GB)
  • Auto Scaling — トラフィックに応じて自動スケール
  • CloudWatch Billing Alarm — 閾値超過時にアラート通知

可観測性 — Metrics · Logs · Traces

可観測性の3本柱:

概要ツール
Metrics時系列の数値 (CPU · リクエスト数 · エラー率)Prometheus + Grafana / Datadog / CloudWatch
LogsテキストイベントLoki / ELK (Elasticsearch+Kibana) / Datadog
Traces分散トレーシングJaeger / Tempo / Datadog APM

Prometheus + Grafana (オープンソースの標準):

  • Prometheus = メトリクスの収集・保存 (プル方式)
  • Grafana = 可視化 (ダッシュボード)
  • Alertmanager = アラート通知 (Slack · PagerDuty)

4つのゴールデンシグナル (Google SRE):
1. Latency — レスポンスタイム (p50 · p95 · p99)
2. Traffic — リクエスト数 (QPS)
3. Errors — 5xx · 例外率
4. Saturation — CPU · メモリ · ディスク · DB接続数

SLO · SLI · SLA:

  • SLI (Indicator) — 測定可能な指標 (例: 可用性 %)
  • SLO (Objective) — 目標値 (例: 99.9% の可用性)
  • SLA (Agreement) — 契約 (違反時に補償が発生)
  • Error Budget — 100% - SLO。0.1% = 月間43分のダウンタイムが許容範囲

eBPFベースのツール (2024年以降のトレンド):

  • Cilium (ネットワーク)、Falco (セキュリティ)、Pixie (アプリ観測)
  • カーネル内で安全にコードを実行 → コードの変更不要
💻 📌 Prometheus + Grafana の例
# ============================================
# docker-compose.yml — ローカル Prometheus + Grafana
# ============================================
version: '3'
srvices:
  prometheus:
    image: prom/prometheus:latest
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    ports: ["9090:9090"]

  grafana:
    image: grafana/grafana:latest
    ports: ["3001:3000"]
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin
    volumes:
      - grafana-data:/var/lib/grafana

  node-exporter:                # システムメトリック
    image: prom/node-exporter:latest
    ports: ["9100:9100"]

volumes:
  grafana-data:

# ============================================
# prometheus.yml — メトリック収集設定
# ============================================
# global:
#   scrape_interval: 15s
# scrape_configs:
#   - job_name: 'myapp'
#     static_configs:
#       - targets: ['localhost:3000']      # /metrics エンドポイント
#   - job_name: 'node'
#     static_configs:
#       - targets: ['node-exporter:9100']

# ============================================
# Node.js アプリにメトリックを公開
# ============================================
# const express = require('express');
# const { register, Counter, Histogram } = require('prom-client');
# const app = express();
#
# const httpRequests = new Counter({
#   name: 'http_requests_total',
#   help: 'Total HTTP requests',
#   labelNames: ['method', 'route', 'status']
# });
#
# const httpDuration = new Histogram({
#   name: 'http_duration_seconds',
#   help: 'HTTP request duration',
#   labelNames: ['method', 'route'],
#   buckets: [0.01, 0.05, 0.1, 0.5, 1, 5]
# });
#
# app.use((req, res, next) => {
#   const end = httpDuration.startTimer({ method: req.method, route: req.path });
#   res.on('finish', () => {
#     httpRequests.inc({ method: req.method, route: req.path, status: res.statusCode });
#     end();
#   });
#   next();
# });
#
# app.get('/metrics', async (req, res) => {
#   res.set('Content-Type', register.contentType);
#   res.end(await register.metrics());
# });

🤖 AI にこう依頼してみてください

このレッスンの概念を理解すれば、AI に具体的な指示ができるようになります。漠然とした「直して」ではなく、語彙を持ったリクエスト — それがトークン節約の出発点です。

  • 「このアプリに OpenTelemetry の trace + metrics + logs をセットアップして」
  • 「この SLO (可用性 99.9%) のモニタリングを Prometheus + Grafana で構成して」

なぜこれがトークンを削減するのか

概念を知らないまま AI の回答を受け取っても、「それは何ですか?」と再度質問しなければなりません。その「再質問」がトークンを消費します。概念を一度しっかり学んでおけば、会話が一度で完結します

クラウド + モニタリング — AWS · Prometheus · Grafana - DevOps