前回の記事では、Auto Scalingによる自動スケーリングについて解説しました。本記事では、AWSリソースの監視に欠かせないAmazon CloudWatchについて解説します。メトリクスの収集、アラームによる異常検知、CloudWatch Logsによるログ管理、ダッシュボードの作成まで、運用に必要な監視の基礎を身につけましょう。
Amazon CloudWatchとは
Amazon CloudWatchは、AWSリソースとアプリケーションのモニタリングと可観測性を提供するマネージドサービスです。メトリクスの収集、ログの管理、アラームの設定、ダッシュボードによる可視化など、運用に必要な機能を統合的に提供します。
CloudWatchの主な機能
CloudWatchには以下の主要機能があります。
| 機能 | 説明 |
|---|---|
| CloudWatch Metrics | AWSリソースのメトリクス収集と可視化 |
| CloudWatch Alarms | メトリクスに基づくアラートの設定 |
| CloudWatch Logs | ログデータの収集、保存、分析 |
| CloudWatch Dashboards | カスタムダッシュボードの作成 |
| CloudWatch Events/EventBridge | イベント駆動のアクション実行 |
| CloudWatch Insights | ログとメトリクスの高度な分析 |
なぜCloudWatchが必要か
クラウド環境では、リソースの状態をリアルタイムで把握し、問題を早期に検知することが重要です。
graph TB
subgraph "監視なしの問題"
NoMonitor[監視なし]
NoMonitor --> Problem1[障害に気づかない]
NoMonitor --> Problem2[パフォーマンス低下の<br/>原因がわからない]
NoMonitor --> Problem3[コスト最適化が<br/>できない]
endgraph TB
subgraph "CloudWatch導入のメリット"
CW[CloudWatch]
CW --> Benefit1[異常の早期検知と<br/>自動通知]
CW --> Benefit2[パフォーマンスの<br/>可視化と分析]
CW --> Benefit3[リソース使用量の<br/>把握とコスト最適化]
endCloudWatchを導入することで、以下のメリットが得られます。
- 可視性の向上: システムの状態をリアルタイムで把握
- 障害の早期検知: 異常値を検知してアラートを送信
- 自動対応: アラームをトリガーにAuto Scalingやアクションを実行
- トラブルシューティング: ログとメトリクスを組み合わせた原因分析
- コスト最適化: リソース使用状況の把握による最適化
CloudWatch Metricsの基礎
CloudWatch Metricsは、AWSリソースとアプリケーションのパフォーマンスデータを収集・可視化するサービスです。
メトリクスの基本概念
graph TB
subgraph "メトリクスの構成要素"
Namespace[名前空間<br/>AWS/EC2] --> Metric[メトリクス名<br/>CPUUtilization]
Metric --> Dimension[ディメンション<br/>InstanceId=i-xxxx]
Dimension --> Datapoint[データポイント<br/>タイムスタンプ + 値]
end| 概念 | 説明 | 例 |
|---|---|---|
| 名前空間(Namespace) | メトリクスのグループ | AWS/EC2、AWS/RDS、カスタム名前空間 |
| メトリクス名(Metric Name) | 測定する項目の名前 | CPUUtilization、NetworkIn |
| ディメンション(Dimension) | メトリクスを識別する属性 | InstanceId、DBInstanceIdentifier |
| データポイント | タイムスタンプと値のペア | 2026-01-25 12:00:00, 45.5 |
| 期間(Period) | データの集約間隔 | 60秒、300秒、3600秒 |
| 統計(Statistic) | データの集計方法 | Average、Sum、Maximum、Minimum |
EC2の標準メトリクス
EC2インスタンスでは、以下のメトリクスが自動的に収集されます。
| メトリクス | 説明 | 単位 | 監視のポイント |
|---|---|---|---|
| CPUUtilization | CPU使用率 | % | 高負荷の検知 |
| NetworkIn | 受信バイト数 | Bytes | トラフィック監視 |
| NetworkOut | 送信バイト数 | Bytes | トラフィック監視 |
| NetworkPacketsIn | 受信パケット数 | Count | ネットワーク性能 |
| NetworkPacketsOut | 送信パケット数 | Count | ネットワーク性能 |
| DiskReadBytes | ディスク読み取りバイト数 | Bytes | インスタンスストア |
| DiskWriteBytes | ディスク書き込みバイト数 | Bytes | インスタンスストア |
| DiskReadOps | ディスク読み取り回数 | Count | I/O性能 |
| DiskWriteOps | ディスク書き込み回数 | Count | I/O性能 |
| StatusCheckFailed | ステータスチェック失敗 | Count | インスタンス障害 |
EC2の標準メトリクスには、メモリ使用率やディスク使用率が含まれていません。これらを監視するには、CloudWatch Agentを使用してカスタムメトリクスを収集する必要があります。
他のAWSサービスのメトリクス
主要なAWSサービスで収集される代表的なメトリクスを示します。
| サービス | 名前空間 | 代表的なメトリクス |
|---|---|---|
| ELB(ALB) | AWS/ApplicationELB | RequestCount、TargetResponseTime、HTTPCode_Target_2XX_Count |
| RDS | AWS/RDS | CPUUtilization、DatabaseConnections、FreeStorageSpace |
| S3 | AWS/S3 | BucketSizeBytes、NumberOfObjects |
| Lambda | AWS/Lambda | Invocations、Duration、Errors |
| DynamoDB | AWS/DynamoDB | ConsumedReadCapacityUnits、ConsumedWriteCapacityUnits |
| Auto Scaling | AWS/AutoScaling | GroupInServiceInstances、GroupDesiredCapacity |
詳細モニタリング
EC2インスタンスでは、標準モニタリング(5分間隔)と詳細モニタリング(1分間隔)を選択できます。
| 項目 | 標準モニタリング | 詳細モニタリング |
|---|---|---|
| 収集間隔 | 5分 | 1分 |
| 料金 | 無料 | 有料 |
| ユースケース | 一般的な監視 | リアルタイム性が必要な場合 |
| Auto Scaling | 推奨しない | 推奨 |
Auto Scalingと連携する場合は、より迅速なスケーリング判断のために詳細モニタリングを有効にすることを推奨します。
graph LR
subgraph "モニタリング間隔の違い"
Standard[標準モニタリング<br/>5分間隔] --> Detect1[異常検知まで<br/>最大10分]
Detailed[詳細モニタリング<br/>1分間隔] --> Detect2[異常検知まで<br/>最大2分]
endカスタムメトリクス
CloudWatch Agentを使用することで、OSレベルのメトリクスやアプリケーション固有のメトリクスを収集できます。
CloudWatch Agentとは
CloudWatch Agentは、EC2インスタンスやオンプレミスサーバーにインストールして、メトリクスとログを収集するソフトウェアです。
graph TB
subgraph "CloudWatch Agentの役割"
Agent[CloudWatch Agent]
Agent --> OS[OSメトリクス<br/>メモリ、ディスク]
Agent --> Log[ログ収集<br/>アプリログ、システムログ]
Agent --> Custom[カスタムメトリクス<br/>アプリ固有の指標]
OS --> CW[CloudWatch]
Log --> CW
Custom --> CW
endCloudWatch Agentで収集できるメトリクス
| カテゴリ | メトリクス | 説明 |
|---|---|---|
| メモリ | mem_used_percent | メモリ使用率 |
| メモリ | mem_available | 利用可能メモリ |
| ディスク | disk_used_percent | ディスク使用率 |
| ディスク | disk_free | 空きディスク容量 |
| CPU(詳細) | cpu_usage_user | ユーザーモードCPU使用率 |
| CPU(詳細) | cpu_usage_system | システムモードCPU使用率 |
| ネットワーク | net_bytes_recv | ネットワーク受信バイト数 |
| プロセス | procstat_cpu_usage | 特定プロセスのCPU使用率 |
CloudWatch Agentのインストール
CloudWatch Agentのインストール手順を示します。
|
|
CloudWatch Agent設定ファイルの作成
設定ファイルは、ウィザードを使用して対話的に作成するか、JSONファイルを直接作成します。
|
|
設定ファイル(JSON)の例を示します。
|
|
CloudWatch Agentの起動
設定ファイルを使用してエージェントを起動します。
|
|
IAMロールの設定
EC2インスタンスにCloudWatch Agentを使用する場合、以下の権限を持つIAMロールをアタッチする必要があります。
|
|
AWSが提供するマネージドポリシーCloudWatchAgentServerPolicyを使用することも推奨されます。
PutMetricData APIによるカスタムメトリクス
アプリケーションから直接カスタムメトリクスを送信することも可能です。
|
|
graph TB
subgraph "カスタムメトリクスの送信方法"
App[アプリケーション] --> SDK[AWS SDK<br/>PutMetricData API]
Agent[CloudWatch Agent] --> Auto[自動収集]
CLI[AWS CLI] --> Manual[手動送信]
SDK --> CW[CloudWatch]
Auto --> CW
Manual --> CW
endCloudWatch Alarms
CloudWatch Alarmsは、メトリクスを監視し、しきい値を超えた場合にアクションを実行する機能です。
アラームの状態
CloudWatchアラームは3つの状態を持ちます。
graph LR
subgraph "アラームの状態遷移"
OK[OK<br/>正常] --> |しきい値超過| ALARM[ALARM<br/>警告]
ALARM --> |しきい値以下に回復| OK
OK --> |データ不足| INSUFFICIENT[INSUFFICIENT_DATA<br/>データ不足]
ALARM --> |データ不足| INSUFFICIENT
INSUFFICIENT --> |データ受信| OK
INSUFFICIENT --> |しきい値超過| ALARM
end| 状態 | 説明 |
|---|---|
| OK | メトリクスがしきい値の範囲内 |
| ALARM | メトリクスがしきい値を超過 |
| INSUFFICIENT_DATA | 判断に必要なデータが不足 |
アラームの作成
CloudWatchコンソールから「アラーム」→「アラームの作成」を選択します。
ステップ1: メトリクスの選択
| 設定項目 | 説明 | 設定例 |
|---|---|---|
| 名前空間 | メトリクスのグループ | AWS/EC2 |
| メトリクス名 | 監視する項目 | CPUUtilization |
| ディメンション | 対象リソースの指定 | InstanceId = i-xxxxxxxxx |
| 統計 | 集計方法 | Average |
| 期間 | 集計間隔 | 5分 |
ステップ2: 条件の設定
| 設定項目 | 説明 | 設定例 |
|---|---|---|
| しきい値の種類 | 静的または異常検出 | 静的 |
| 条件 | より大きい、より小さい等 | >= しきい値 |
| しきい値 | 警告を発する値 | 80 |
| データポイント | アラームを発する条件 | 3/5(5評価期間中3回超過) |
graph TB
subgraph "アラーム条件の評価"
Collect[メトリクス収集<br/>5分間隔] --> Evaluate[評価期間<br/>5回分を評価]
Evaluate --> Check{3回以上<br/>しきい値超過?}
Check -->|はい| Alarm[ALARM状態]
Check -->|いいえ| OK[OK状態]
end「3/5」のような設定は、一時的なスパイクによる誤検知を防ぐために有効です。
ステップ3: アクションの設定
| アクションタイプ | 説明 | ユースケース |
|---|---|---|
| SNS通知 | SNSトピックに通知を送信 | メール、Slack通知 |
| Auto Scalingアクション | スケーリングポリシーを実行 | 自動スケーリング |
| EC2アクション | インスタンスの停止、終了、再起動 | コスト削減、障害対応 |
| Systems Managerアクション | Automationドキュメントを実行 | 自動修復 |
SNS連携によるアラート通知
アラーム発生時にSNS(Simple Notification Service)を使用して通知を送信する構成を示します。
graph LR
subgraph "アラート通知の流れ"
CW[CloudWatch<br/>Alarm] --> SNS[SNS<br/>Topic]
SNS --> Email[メール通知]
SNS --> Lambda[Lambda関数]
SNS --> Slack[Slack通知<br/>(Lambda経由)]
endSNSトピックの作成とサブスクリプションの設定手順を示します。
|
|
実用的なアラーム設定例
本番環境で設定すべき代表的なアラームを示します。
| 対象 | メトリクス | しきい値 | 目的 |
|---|---|---|---|
| EC2 | CPUUtilization | >= 80%(5分×3回) | 高負荷検知 |
| EC2 | StatusCheckFailed | >= 1 | インスタンス障害 |
| ALB | HTTPCode_Target_5XX_Count | >= 10(1分×2回) | サーバーエラー検知 |
| ALB | TargetResponseTime | >= 5秒(5分×3回) | レスポンス遅延 |
| ALB | HealthyHostCount | < 2 | ターゲット減少 |
| RDS | CPUUtilization | >= 80%(5分×3回) | DB高負荷 |
| RDS | FreeStorageSpace | < 10GB | ストレージ枯渇 |
| RDS | DatabaseConnections | >= 最大接続数の80% | 接続数上限 |
複合アラーム(Composite Alarms)
複合アラームは、複数のアラームの状態を組み合わせて評価する機能です。
graph TB
subgraph "複合アラームの構成"
Alarm1[CPU高負荷<br/>アラーム] --> Composite[複合アラーム<br/>AND条件]
Alarm2[メモリ高負荷<br/>アラーム] --> Composite
Composite --> Action[通知アクション]
end複合アラームの設定例を示します。
|
|
複合アラームを使用することで、以下のメリットが得られます。
- アラートノイズの削減: 複数条件が揃った場合のみ通知
- 重大度の判断: 複数の問題が同時発生した場合を検知
- 誤検知の防止: 一時的なスパイクによる誤報を削減
異常検出(Anomaly Detection)
CloudWatch Anomaly Detectionは、機械学習を使用してメトリクスの正常な範囲を自動的に学習し、異常を検出します。
graph TB
subgraph "異常検出の仕組み"
History[過去のメトリクス<br/>履歴データ] --> ML[機械学習<br/>モデル]
ML --> Band[予測バンド<br/>上限・下限]
Current[現在のメトリクス] --> Compare[予測バンドと比較]
Band --> Compare
Compare --> |バンド外| Anomaly[異常検出]
Compare --> |バンド内| Normal[正常]
end異常検出は、以下のような動的なワークロードに有効です。
- 日次・週次で変動するトラフィックパターン
- 季節性のあるビジネスメトリクス
- 固定しきい値が設定しにくいメトリクス
CloudWatch Logs
CloudWatch Logsは、AWSリソースやアプリケーションからのログを一元的に収集、保存、分析するサービスです。
CloudWatch Logsの構成要素
graph TB
subgraph "CloudWatch Logsの階層構造"
LogGroup[ロググループ<br/>/webserver/nginx/access]
LogGroup --> Stream1[ログストリーム<br/>i-xxxxxxxxa]
LogGroup --> Stream2[ログストリーム<br/>i-xxxxxxxxb]
Stream1 --> Event1[ログイベント<br/>タイムスタンプ + メッセージ]
Stream1 --> Event2[ログイベント<br/>タイムスタンプ + メッセージ]
end| 概念 | 説明 | 例 |
|---|---|---|
| ロググループ | ログの論理的なグループ | /webserver/nginx/access |
| ログストリーム | ログのソースごとの分類 | インスタンスID、コンテナID |
| ログイベント | 個々のログエントリ | タイムスタンプ + ログメッセージ |
| 保持期間 | ログの保存期間 | 1日〜無期限 |
ログの収集方法
CloudWatch Logsにログを送信する主な方法を示します。
| 方法 | 説明 | ユースケース |
|---|---|---|
| CloudWatch Agent | EC2やオンプレミスからログを収集 | サーバーログ、アプリログ |
| AWS SDK/CLI | アプリケーションから直接送信 | カスタムログ |
| VPCフローログ | VPCのネットワークトラフィックログ | ネットワーク分析 |
| Lambda | Lambda関数の実行ログ | サーバーレスアプリ |
| その他AWSサービス | CloudTrail、RDS等からの連携 | 監査、DB監視 |
CloudWatch Agentによるログ収集
CloudWatch Agentの設定ファイルでログ収集を設定します。
|
|
ログの保持期間設定
ログの保持期間は、コスト管理とコンプライアンス要件に基づいて設定します。
| 保持期間 | ユースケース |
|---|---|
| 1日〜7日 | 開発・テスト環境のデバッグログ |
| 30日〜90日 | 本番環境の運用ログ |
| 1年〜10年 | 監査ログ、コンプライアンス要件 |
| 無期限 | 法的要件がある場合 |
|
|
CloudWatch Logs Insights
CloudWatch Logs Insightsは、ログデータを対話的にクエリ・分析するための機能です。
graph LR
subgraph "Logs Insightsの処理フロー"
Query[クエリ記述] --> Scan[ロググループ<br/>スキャン]
Scan --> Parse[フィールド<br/>抽出]
Parse --> Result[結果表示<br/>グラフ化]
end代表的なクエリ例を示します。
|
|
|
|
|
|
|
|
メトリクスフィルター
メトリクスフィルターを使用すると、ログからメトリクスを抽出してアラームを設定できます。
graph LR
subgraph "メトリクスフィルターの仕組み"
Log[ログイベント] --> Filter[フィルター<br/>パターンマッチ]
Filter --> Metric[カスタムメトリクス]
Metric --> Alarm[CloudWatch<br/>Alarm]
endメトリクスフィルターの設定例を示します。
|
|
これにより、ログにERRORが出現するたびにメトリクスがカウントされ、しきい値を超えた場合にアラームを発報できます。
サブスクリプションフィルター
サブスクリプションフィルターを使用すると、ログをリアルタイムでストリーミングできます。
| 送信先 | ユースケース |
|---|---|
| Kinesis Data Streams | 大量ログのリアルタイム処理 |
| Kinesis Data Firehose | S3、Redshift、Elasticsearchへの配信 |
| Lambda | カスタム処理、外部サービス連携 |
| 別アカウントのCloudWatch Logs | クロスアカウントログ集約 |
graph LR
subgraph "サブスクリプションフィルターの活用"
Logs[CloudWatch Logs] --> Filter[サブスクリプション<br/>フィルター]
Filter --> Firehose[Kinesis<br/>Data Firehose]
Firehose --> S3[S3<br/>長期保存]
Filter --> Lambda[Lambda]
Lambda --> Slack[Slack<br/>通知]
endCloudWatch Dashboards
CloudWatch Dashboardsは、メトリクスとログを可視化するカスタマイズ可能なダッシュボードを作成する機能です。
ダッシュボードの特徴
| 特徴 | 説明 |
|---|---|
| カスタマイズ | ウィジェットを自由に配置 |
| クロスリージョン | 複数リージョンのメトリクスを一元表示 |
| クロスアカウント | 複数アカウントのメトリクスを集約 |
| 自動更新 | リアルタイムでデータを更新 |
| 共有 | URLで他のユーザーと共有可能 |
ウィジェットの種類
| ウィジェット | 説明 | ユースケース |
|---|---|---|
| 折れ線グラフ | 時系列データの表示 | CPU使用率の推移 |
| 積み上げ面グラフ | 複数メトリクスの累積表示 | 各サーバーのトラフィック合計 |
| 数値 | 単一の値を大きく表示 | 現在のアクティブユーザー数 |
| ゲージ | 進捗やパーセンテージの表示 | リソース使用率 |
| テキスト | Markdown形式のテキスト | ダッシュボードの説明 |
| アラーム状態 | アラームの状態一覧 | 監視対象の健全性確認 |
| ログテーブル | Logs Insightsクエリ結果 | 直近のエラーログ |
| Explorer | 動的なリソース検索 | タグベースのメトリクス表示 |
ダッシュボードの設計例
Webアプリケーションの監視ダッシュボード構成例を示します。
graph TB
subgraph "ダッシュボードのレイアウト"
subgraph "上段: 概要"
Alarm[アラーム状態]
Users[アクティブユーザー数]
ErrorRate[エラー率]
end
subgraph "中段: インフラ"
EC2CPU[EC2 CPU使用率<br/>折れ線グラフ]
Memory[メモリ使用率<br/>折れ線グラフ]
Network[ネットワーク<br/>積み上げ面グラフ]
end
subgraph "下段: アプリケーション"
ALBLatency[ALBレスポンスタイム<br/>折れ線グラフ]
RequestCount[リクエスト数<br/>折れ線グラフ]
Logs[直近のエラーログ<br/>ログテーブル]
end
endダッシュボードの作成(AWS CLI)
AWS CLIを使用してダッシュボードを作成することもできます。
|
|
|
|
CloudWatchの料金体系
CloudWatchの主な料金項目を理解し、コストを最適化しましょう。
主な料金項目
| 項目 | 無料枠 | 有料枠 |
|---|---|---|
| カスタムメトリクス | - | メトリクス数×月額 |
| API(GetMetricData等) | 100万回/月 | 超過分×リクエスト数 |
| ダッシュボード | 3個まで | 4個目以降×月額 |
| アラーム | 10個まで | 11個目以降×月額 |
| ログ取り込み | 5GB/月 | 超過分×GB |
| ログ保存 | 5GB/月 | 超過分×GB×月 |
| Logs Insights | - | スキャンしたデータ量×GB |
コスト最適化のポイント
| 対策 | 説明 |
|---|---|
| ログ保持期間の最適化 | 必要最小限の期間に設定 |
| メトリクス解像度の選択 | 標準解像度(1分)と高解像度(1秒)の使い分け |
| 不要なカスタムメトリクスの削除 | 使用していないメトリクスの整理 |
| Logs Insightsクエリの最適化 | 必要なロググループのみを対象に |
| S3へのログエクスポート | 長期保存はS3に移行してコスト削減 |
CloudWatchを活用した監視設計
実践的な監視設計のベストプラクティスを示します。
監視の階層
graph TB
subgraph "監視の階層"
Infra[インフラ層<br/>EC2, EBS, ネットワーク]
Platform[プラットフォーム層<br/>RDS, ElastiCache, ALB]
App[アプリケーション層<br/>カスタムメトリクス, ログ]
Business[ビジネス層<br/>KPI, SLI/SLO]
Infra --> Platform --> App --> Business
end各層の監視項目
| 層 | 監視項目 | メトリクス例 |
|---|---|---|
| インフラ | サーバーリソース | CPU、メモリ、ディスク、ネットワーク |
| プラットフォーム | マネージドサービス | RDS接続数、キャッシュヒット率、ELBレイテンシ |
| アプリケーション | アプリ固有指標 | エラー率、処理時間、キュー長 |
| ビジネス | ビジネス指標 | 注文数、アクティブユーザー、売上 |
SLI/SLOベースの監視
SLI(Service Level Indicator)とSLO(Service Level Objective)に基づいた監視を実装しましょう。
| SLI | 測定方法 | SLO例 |
|---|---|---|
| 可用性 | 成功リクエスト / 総リクエスト | 99.9% |
| レイテンシ | レスポンスタイムのP95 | 200ms以下 |
| エラー率 | 5XXエラー数 / 総リクエスト | 0.1%以下 |
| スループット | 処理リクエスト数/秒 | 1000 req/s以上 |
graph LR
subgraph "SLOベースのアラート"
Metric[メトリクス収集] --> Calculate[SLI計算<br/>エラー率 = 5XX/Total]
Calculate --> Compare[SLO比較<br/>0.1%以下?]
Compare -->|超過| Alert[アラート発報]
Compare -->|OK| Continue[継続監視]
endまとめ
本記事では、Amazon CloudWatchを使用したAWSリソースの監視について解説しました。
CloudWatchの主要機能として、以下の内容を学びました。
- CloudWatch Metrics: AWSリソースのメトリクスを収集し可視化
- カスタムメトリクス: CloudWatch Agentを使用してOS・アプリレベルの指標を収集
- CloudWatch Alarms: しきい値を設定し、異常時にSNS通知やAuto Scalingをトリガー
- CloudWatch Logs: ログを一元管理し、Logs Insightsで分析
- CloudWatch Dashboards: メトリクスとログを可視化するダッシュボードを作成
監視設計のポイントとして、以下を押さえておきましょう。
- インフラ、プラットフォーム、アプリケーション、ビジネスの各層を監視
- SLI/SLOに基づいた監視とアラート設計
- コスト最適化を意識したログ保持期間とメトリクス解像度の設定
次回の記事では、Route 53を使用したDNS管理とドメイン管理について解説します。CloudWatchによる監視と組み合わせて、可用性の高いシステム運用を実現しましょう。