目次
- 初心者から実務者向けの包括的解説
- 概要
- CloudWatch が解決する課題
- 主な特徴
- アーキテクチャ
- メトリクス(Metrics)
- CloudWatch Logs
- CloudWatch Logs Insights
- アラーム(Alarms)
- ダッシュボード(Dashboards)
- CloudWatch Application Signals
- CloudWatch RUM
- CloudWatch Synthetics
- Container Insights
- Lambda Insights
- Database Insights
- CloudWatch Internet Monitor
- EventBridge との関係
- 主要ユースケース
- 他の類似ツールとの比較
- クライアントとエコシステム
- ベストプラクティス
- トラブルシューティング
- コスト最適化
- 学習リソース
- 実装チェックリスト
- まとめ
Amazon CloudWatch 完全ガイド 2026
初心者から実務者向けの包括的解説
Amazon CloudWatch は、AWS リソースとアプリケーションの監視・観測可能性(Observability)を実現する ネイティブ監視プラットフォーム です。2009 年のサービス開始から現在まで、メトリクス・ログ・トレース・アラーム・ダッシュボードの 5 機能を統合し、EC2・Lambda・RDS・ECS など 200+ の AWS サービスと深く統合されています。本ドキュメントは、CloudWatch の本質・コンポーネント・ユースケース・エコシステム・最新動向を体系的に解説する包括的ガイドです。
ドキュメントの目的
本ガイドは以下を対象としています。
- 初心者向け: CloudWatch とは何か、なぜ AWS で標準的な選択肢かを学びたい方
- 開発者向け: カスタムメトリクス・ログ・ダッシュボード・アラームを実装したい方
- SRE / インフラ向け: CloudWatch を中心に AWS インフラの観測基盤を構築したい方
- 意思決定者向け: Datadog / New Relic / Grafana+Prometheus との比較・投資判断
2025-2026 年の CloudWatch 最新動向
- Application Signals SLO 機能拡張(2026年3月):SLO Recommendations(30日の自動分析)、Service-Level SLOs(全体的なサービス信頼性)、SLO Performance Report(カレンダーベースの履歴分析)を新規追加
- Application Signals EKS デフォルト有効化(2026年2月):CloudWatch Observability EKS add-on v5.0.0 で自動有効化
- Kiro IDE 統合(2026年1月):AI エージェント支援によるアプリケーション健全性調査
- Database Insights:RDS / Aurora / DynamoDB の深層的なパフォーマンスメトリクス
- AI Operations:機械学習による異常検知、予測的スケーリング
- GenAI Observability:LLM API 呼び出しのログ・トレース・コスト追跡
- Internet Monitor 拡張:エッジロケーション単位のトラフィック分析
- CloudWatch Logs Unified Query:複数リージョンのログ統一検索
目次
- 概要
- CloudWatch が解決する課題
- 主な特徴
- アーキテクチャ
- メトリクス(Metrics)
- CloudWatch Logs
- CloudWatch Logs Insights
- アラーム(Alarms)
- ダッシュボード(Dashboards)
- CloudWatch Application Signals
- CloudWatch RUM
- CloudWatch Synthetics
- Container Insights
- Lambda Insights
- Database Insights
- CloudWatch Internet Monitor
- EventBridge との関係
- 主要ユースケース
- 他の類似ツールとの比較
- クライアントとエコシステム
- ベストプラクティス
- トラブルシューティング
- コスト最適化
- 学習リソース
- 実装チェックリスト
- まとめ
- 参考文献
概要
初心者向けメモ: CloudWatch は「AWS の公式監視サービス」です。EC2・Lambda・RDS などが自動的にメトリクスを送信し、CloudWatch がそれを受け取って保存・検索・アラームする。外部ツール(Datadog など)とは異なり、AWS サービスとの統合が深く、追加設定なしに 200+ のメトリクスを自動収集できます。
CloudWatch は AWS リソースとアプリケーションの メトリクス・ログ・トレース・アラーム・ダッシュボード を統合管理するネイティブ監視プラットフォームです。EC2・Lambda・RDS・DynamoDB・ALB など AWS サービスのメトリクスを自動収集し、カスタムメトリクス・カスタムログの送信、Logs Insights による分析、Composite Alarms による複合アラーム、Application Signals による APM、RUM によるエンドユーザー監視を提供します。
CloudWatch の位置づけ
【図1】AWS オブザーバビリティスタックにおける CloudWatch の位置:
graph TD
subgraph AWSServices[AWS Services]
EC2[EC2]
Lambda[Lambda]
RDS[RDS]
ALB[ALB/NLB]
DDB[DynamoDB]
ECS[ECS/EKS]
end
subgraph CloudWatchCore[CloudWatch Core]
Metrics[Metrics Standard/Custom/High-res]
Logs[Logs Groups/Streams/Insights]
Alarms[Alarms Simple/Composite/ML]
Dashboards[Dashboards Custom Views]
end
subgraph CloudWatchAdvanced[CloudWatch Advanced Features]
AppSignals["Application Signals APM"]
RUM["RUM エンドユーザー監視"]
Synthetics["Synthetics 合成監視"]
Internet["Internet Monitor"]
ContainerInsights["Container Insights"]
DatabaseInsights["Database Insights"]
end
subgraph Integrations[連携先]
SNS[SNS 通知]
EventBridge[EventBridge]
Lambda2[Lambda 自動修復]
XRay["X-Ray トレース"]
Grafana["Grafana"]
end
AWSServices -->|自動メトリクス| CloudWatchCore
CloudWatchCore -->|クエリ・分析| CloudWatchAdvanced
CloudWatchCore -->|通知・アクション| Integrations
CloudWatchAdvanced -->|通知・アクション| Integrations
CloudWatch が解決する課題
CloudWatch は、AWS 環境における次の問いに答えるための基盤です。
| 課題 | CloudWatch のソリューション |
|---|---|
| リソースが健全か | AWS サービスの標準メトリクス(CPU・メモリ・ディスク・ネットワーク)を自動監視 |
| エラーが増えていないか | Lambda エラー率・API Gateway 5xx エラー・RDS ネットワークエラーをアラーム |
| レイテンシが悪化していないか | ALB ターゲットレスポンス時間・Lambda Duration・RDS クエリ時間を分析 |
| キャパシティを超過していないか | EC2 Auto Scaling・DynamoDB キャパシティ・RDS ストレージを予測的に監視 |
| ユーザーは満足しているか | RUM による実ブラウザ測定で実際のユーザー体験を把握 |
| 個別エラーの原因を特定したい | Logs Insights で複雑なクエリを実行して原因追跡 |
| 複数の異常検知条件を組み合わせたい | Composite Alarms で AND/OR ロジックを実装 |
| インターネット経路に障害がないか | Internet Monitor でユーザー地域ごとの可用性・レイテンシを監視 |
初心者向けメモ: CloudWatch がない時代は、エンジニアが SSH で EC2 にログインして top コマンドを実行していました。CloudWatch はそれを「自動化・集約・可視化」し、「誰でも・いつでも」リアルタイムで状態を把握できるようにしたサービスです。
主な特徴
| 特徴 | 説明 |
|---|---|
| AWS ネイティブ統合 | EC2・Lambda・RDS・DynamoDB など 200+ サービスのメトリクスを自動収集。追加エージェント不要 |
| 3 つのメトリクスタイプ | Standard(1 分)・High-resolution(1 秒)・Composite(演算・ML ベース) |
| カスタムメトリクス対応 | SDK・API・Agent から業務 KPI(注文数・売上・ユーザー数)をカスタム送信 |
| Logs Insights クエリ | SQLライクなクエリ言語で複雑なログ分析が可能(トレース・スパン単位で検索) |
| 複合アラーム(Composite Alarms) | 複数アラームを AND/OR で組み合わせて誤検知を削減 |
| 異常検知(Anomaly Detection) | ML による機械学習ベースの異常検出 |
| クロスアカウントダッシュボード | 複数の AWS アカウントを統一ダッシュボードで監視 |
| Metric Math | メトリクス間の演算(差分・比率・複雑な式)で洞察を生成 |
| EventBridge 統合 | アラーム発火時に Lambda・SNS・SSM・Step Functions を自動トリガー |
| Application Signals | EKS/EC2 の APM(トレース・サービス依存関係マップ・SLO) |
| RUM(Real User Monitoring) | JavaScript SDK でブラウザ経由の実ユーザーメトリクスを収集 |
| Synthetics(合成監視) | 定期的にエンドポイント・GUI フロー・API を検査して可用性を事前検出 |
| Internet Monitor | CloudFront・ALB・NLB のトラフィックを地理的に分析 |
| AWS リージョン対応 | グローバル展開時にも各リージョンで独立した CloudWatch インスタンス |
アーキテクチャ
初心者向けメモ: CloudWatch は 2 層構造です。下層は「メトリクス・ログ・トレース」の データ収集・保存層、上層は「ダッシュボード・アラーム・Insights」の 分析・アクション層。AWS リソースからのデータは自動的に下層に流れ込み、ユーザーが上層で好きなように分析・アラームを設定します。
【図2】CloudWatch の 2 層アーキテクチャ:
graph TD
subgraph DataCollection[データ収集層]
EC2M["EC2 Auto Metrics"]
LambdaM["Lambda Auto Metrics"]
RDSM["RDS Auto Metrics"]
ALB["ALB/NLB Metrics"]
ECS["ECS/EKS Metrics"]
Custom["Custom Metrics API"]
end
subgraph Transport[転送・保存]
CWMetrics["CloudWatch Metrics TSDB"]
CWLogs["CloudWatch Logs ストレージ"]
end
subgraph AnalysisLayer[分析・アクション層]
Dashboard["Dashboards 可視化"]
Insights["Logs Insights クエリ"]
Alarms["Alarms + Composite"]
Anomaly["Anomaly Detection"]
AppSig["Application Signals"]
RUM["RUM"]
end
subgraph Outputs[出力・通知]
SNS["SNS 通知"]
EventBridge["EventBridge 自動化"]
Lambda["Lambda 修復スクリプト"]
Grafana["Grafana/Datadog 連携"]
end
DataCollection --> Transport
Transport --> AnalysisLayer
AnalysisLayer --> Outputs
メトリクス(Metrics)
CloudWatch メトリクスは、時系列データポイント(タイムスタンプ・値・ディメンション)の集合です。
1. 標準メトリクス(Standard Metrics)
AWS サービスから自動的に送信される無料メトリクス(追加設定不要)。
EC2 の標準メトリクス例
| メトリクス | 説明 | デフォルト間隔 |
|---|---|---|
| CPUUtilization | CPU 使用率(%) | 1 分 |
| NetworkIn / NetworkOut | ネットワーク入出力(バイト) | 1 分 |
| DiskReadBytes / DiskWriteBytes | ディスク入出力 | 5 分(詳細監視時1分) |
| StatusCheckFailed | インスタンスステータスチェック失敗 | 1 分 |
Lambda の標準メトリクス例
| メトリクス | 説明 |
|---|---|
| Invocations | 関数呼び出し回数 |
| Duration | 実行時間(ms) |
| Errors | エラー発生回数 |
| Throttles | スロットル発生回数 |
| ConcurrentExecutions | 同時実行数 |
RDS の標準メトリクス例
| メトリクス | 説明 |
|---|---|
| DatabaseConnections | DB 接続数 |
| CPUUtilization | CPU 使用率 |
| FreeStorageSpace | 空きストレージ容量 |
| ReadLatency / WriteLatency | 読み書き遅延 |
| ReplicaLag | レプリケーション遅延 |
2. カスタムメトリクス(Custom Metrics)
アプリケーションから API・SDK・Agent を通じて送信するメトリクス。
カスタムメトリクス送信例(AWS CLI)
aws cloudwatch put-metric-data \
--namespace "MyApp" \
--metric-name "OrdersProcessed" \
--value 42 \
--timestamp 2026-04-26T10:30:00Z \
--dimensions Name=Environment,Value=Production
カスタムメトリクス送信例(Python SDK)
import boto3
cloudwatch = boto3.client('cloudwatch')
cloudwatch.put_metric_data(
Namespace='MyApp',
MetricData=[
{
'MetricName': 'OrdersProcessed',
'Value': 42,
'Unit': 'Count',
'Dimensions': [
{'Name': 'Environment', 'Value': 'Production'},
{'Name': 'Service', 'Value': 'OrderService'}
]
}
]
)
3. 高分解能メトリクス(High-Resolution Metrics)
1 秒間隔でのメトリクス送信(Lambda・カスタムメトリクスで利用可能)。リアルタイム監視やスケーリング判断に適しています。
# 1 秒間隔でメトリクス送信
aws cloudwatch put-metric-data \
--namespace "MyApp" \
--metric-name "RequestLatency" \
--value 42.5 \
--storage-resolution 1 # 1秒間隔
4. Metric Math(メトリクス演算)
複数のメトリクスを組み合わせて新しいメトリクスを作成。
Metric Math の例
# エラー率を計算(エラー数 / 総リクエスト数 * 100)
(m2 / m1) * 100
# m1 = Invocations(総関数呼び出し数)
# m2 = Errors(エラー数)
5. ディメンション(Dimensions)
メトリクスを細分化するためのラベル。複数の環境・サービス・リージョンを区別可能にします。
| メトリクス | ディメンション例 |
|---|---|
| CPUUtilization | InstanceId=i-1234567, AutoScalingGroupName=web-asg |
| RequestCount | LoadBalancer=app/my-alb/1234, TargetGroup=target/my-targets/1234 |
| Duration | FunctionName=ProcessOrder, Version=42 |
CloudWatch Logs
CloudWatch Logs は、アプリケーション・システム・AWS サービスのログを一元管理するサービスです。
ログの構造
ロググループ(Namespace、保持期間設定可能)
├── ロググストリーム(ソースごと:EC2インスタンスID、Lambda関数版、Lambdaエイリアス等)
│ ├── ログイベント(タイムスタンプ + メッセージ + オプション情報)
│ ├── ログイベント
│ └── ...
└── ロググストリーム
└── ...
ログ送信方法
| 方法 | 説明 |
|---|---|
| CloudWatch Agent | EC2・オンプレミスサーバー上で実行。構造化ログを解析 |
| AWS サービス直接送信 | Lambda・API Gateway・VPC Flow Logs が自動送信 |
| SDK / API | アプリケーション側で PutLogEvents API を呼び出し |
| Amazon EventBridge | 他の AWS サービスのイベントをログ化 |
ログ保持期間
| 保持期間 | 説明 |
|---|---|
| 1日 / 3日 / 5日 / 7日 | 短期的な分析 |
| 14日 / 30日 / 60日 / 90日 | 一般的な運用ログ |
| 180日 / 1年 | 長期保存・監査ログ |
| 無期限 | ⚠️ コスト注意:$0.03/GB/月 |
ログフィルタリング
特定パターンのログを抽出・統計。
# ERROR を含むログをカウント
[timestamp, request_id, level = ERROR, ...]
# 500 エラーを含むログ
{ ($.httpCode = 500) }
CloudWatch Logs Insights
SQL ライクな強力なクエリ言語で、ロググループ内のログを分析します。
基本クエリ構文
- fields @timestamp, @message, @duration
- | filter @message like /ERROR/
- | stats count(*) as errorCount by bin(5m)
- | sort errorCount desc
Logs Insights クエリ例
1. エラーレート計算
fields @timestamp, @message
| filter @message like /ERROR/
| stats count(*) as errors,
count(*) as total by bin(1m)
| stats (errors/total)*100 as error_rate
2. レスポンスタイム分析
fields @duration, @message
| filter ispresent(@duration)
| stats avg(@duration) as avg_latency,
pct(@duration, 95) as p95,
pct(@duration, 99) as p99
3. トップエラーメッセージ
fields @message
| filter @message like /ERROR/
| stats count() as count by @message
| sort count desc
| limit 10
Logs Insights フィールド
| フィールド | 説明 |
|---|---|
@timestamp |
ログイベントのタイムスタンプ |
@message |
ログメッセージ本体 |
@logStream |
ロググストリーム名 |
@logGroup |
ロググループ名 |
@duration |
リクエスト処理時間(Lambda) |
@memoryUsed |
メモリ使用量(Lambda) |
@maxMemoryUsed |
最大メモリ使用量(Lambda) |
アラーム(Alarms)
CloudWatch アラームは、メトリクスが特定の条件を満たすときに通知・アクションを実行します。
1. 単純アラーム(Simple Alarm)
単一メトリクスの値がしきい値を超えた場合に発火。
aws cloudwatch put-metric-alarm \
--alarm-name "High CPU" \
--metric-name CPUUtilization \
--namespace AWS/EC2 \
--statistic Average \
--period 300 \
--threshold 80 \
--comparison-operator GreaterThanThreshold \
--alarm-actions arn:aws:sns:ap-northeast-1:123456789:alert
2. 複合アラーム(Composite Alarm)
複数のアラームを AND・OR・NOT で組み合わせて誤検知を削減。
# 例:CPU > 80% AND メモリ > 90% の場合のみ発火
aws cloudwatch put-composite-alarm \
--alarm-name "Critical System State" \
--alarm-rule "(alarm(HighCPU) AND alarm(HighMemory))" \
--alarm-actions arn:aws:sns:...
3. 異常検知アラーム(Anomaly Detection)
機械学習によるベースライン検出。過去 2 週間のデータを学習して異常を判定。
aws cloudwatch put-metric-alarm \
--alarm-name "RequestCount Anomaly" \
--metrics '[{"expression":"ANOMALY_DETECTION_BAND(m1, 2)", "id":"ad1"}, {"id":"m1", "metric":{"metric_name":"RequestCount"}}]' \
--threshold-metric-id ad1
アラームアクション
| アクション | 説明 |
|---|---|
| SNS 通知 | メール・Slack・PagerDuty に通知 |
| EC2 アクション | インスタンス停止・再起動・復旧 |
| Auto Scaling アクション | スケールイン・アウト |
| Systems Manager OpsItem | インシデント管理システムと連携 |
| EventBridge | Lambda・Step Functions・SQS をトリガー |
アラーム状態
| 状態 | 説明 |
|---|---|
| ALARM | メトリクスが閾値超過。アクション実行 |
| OK | メトリクスが正常。復帰アクション実行 |
| INSUFFICIENT_DATA | データポイント不足(新規アラーム作成直後など) |
初心者向けメモ: アラームを「つけっぱなし」にするとノイズが増え、やがて無視されます。「真に重要な条件」に絞り、Composite Alarms で複数条件を組み合わせて「本物の問題」のみを検出することが重要です。
ダッシュボード(Dashboards)
CloudWatch ダッシュボードは、メトリクス・アラーム・ログを視覚化・一元管理するカスタムビューです。
ダッシュボード機能
| 機能 | 説明 |
|---|---|
| 複数ウィジェット | グラフ・数値・アラーム・ログ・テキストを自由に配置 |
| テンプレート変数 | リージョン・環境・サービス名など動的にフィルタリング |
| カスタムメトリクス | Metric Math で複雑な式を表示 |
| クロスアカウント対応 | 複数 AWS アカウントのメトリクスを統合表示 |
| JSON 編集 | 構成を JSON でコード管理し Git 連携 |
| 自動更新 | リアルタイム or 1分・5分・10分・1時間の更新間隔 |
ダッシュボード構成例
{
"widgets": [
{
"type": "metric",
"properties": {
"metrics": [
["AWS/EC2", "CPUUtilization", {"stat": "Average"}],
["AWS/Lambda", "Errors", {"stat": "Sum"}]
],
"period": 300,
"stat": "Average",
"region": "ap-northeast-1",
"title": "System Health"
}
},
{
"type": "log",
"properties": {
"query": "fields @timestamp, @message | filter @message like /ERROR/",
"region": "ap-northeast-1",
"title": "Recent Errors"
}
}
]
}
CloudWatch Application Signals
Application Signals は、EKS・EC2 上のアプリケーションの APM(Application Performance Monitoring)機能です。
Application Signals が提供する機能
| 機能 | 説明 |
|---|---|
| 自動トレース収集 | OpenTelemetry ベースで自動計装。コード改変不要 |
| サービス依存関係マップ | マイクロサービス間の呼び出し関係を可視化 |
| SLO 定義と監視 | リクエスト成功率・レイテンシに基づく SLO を定義・監視 |
| エラー追跡 | エラースパン・スタックトレース・コンテキストを自動収集 |
| X-Ray 連携 | CloudWatch Logs とトレースを統合表示 |
Application Signals セットアップ
# EKS クラスタ向け ADOT コレクタ インストール
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
helm install adot open-telemetry/opentelemetry-collector \
--set config.exporters.logging.loglevel=debug
CloudWatch RUM
RUM(Real User Monitoring)は、JavaScript SDK を使用してブラウザ経由の実ユーザー体験を測定します。
RUM が測定する指標
| 指標 | 説明 |
|---|---|
| ページ読み込み時間 | DOM Content Loaded・First Contentful Paint |
| JavaScript エラー | 実ユーザーのブラウザで発生したエラー |
| HTTP リクエスト成功率 | fetch・XMLHttpRequest の成功・失敗 |
| ユーザーセッション | セッション ID・ユーザー ID・カスタム属性 |
| リソース読み込み時間 | CSS・JS・画像のロード時間 |
RUM JavaScript SDK 統合例
<script>
window.AWSRUM = window.AWSRUM || {};
window.AWSRUM.config = {
sessionSampleRate: 1.0,
identityPoolId: "ap-northeast-1:xxxxxxxx",
endpoint: "https://aws-rum-xxx.ap-northeast-1.amazonaws.com",
telemetries: ["performance", "errors", "http"],
pageTitleQueryParams: ["pageName"],
pageIdTemplate: "[a-z0-9/]+"
};
</script>
<script src="https://client.rum.us-east-1.amazonaws.com/aws-rum-web-client.js"></script>
CloudWatch Synthetics
Synthetics は、定期的にエンドポイント・GUI フロー・API を検査して可用性をプロアクティブに監視します。
Canary タイプ
| Canary タイプ | 説明 |
|---|---|
| API Canary | HTTP/HTTPS エンドポイントの応答時間・ステータスコード確認 |
| GUI Canary | Selenium スクリプトでブラウザ自動化。ログイン・フロー検証 |
| Step Functions Canary | Step Functions ワークフロー実行 |
| Scheduled API Canary | Lambda ベースの定期 API チェック |
Canary スクリプト例(JavaScript)
const synthetics = require('Synthetics');
const https = require('https');
const apiCanary = async function () {
const postData = JSON.stringify({
test: 'data'
});
const options = {
hostname: 'api.example.com',
path: '/api/health',
method: 'GET',
port: 443
};
return new Promise((resolve, reject) => {
const request = https.request(options, (response) => {
if (response.statusCode !== 200) {
reject(new Error(`Status code: ${response.statusCode}`));
}
resolve();
});
request.on('error', (error) => {
reject(error);
});
request.end();
});
};
exports.handler = async function(event, context) {
return await apiCanary();
};
Container Insights
Container Insights は、ECS・EKS のコンテナレベルメトリクスを自動収集します。
Container Insights が提供するメトリクス
| 対象 | メトリクス |
|---|---|
| クラスター | ノード数・デプロイ数・実行中タスク・CPU・メモリ使用率 |
| ノード | CPU・メモリ・ネットワーク入出力・ディスク使用率 |
| Pod / タスク | CPU・メモリ・ネットワーク(EKS) |
| サービス / Deployment | 実行レプリカ・希望レプリカ・メトリクス集計 |
Container Insights セットアップ(EKS)
# CloudWatch Container Insights ADOT コレクタをインストール
curl https://raw.githubusercontent.com/aws-observability/aws-otel-community/master/sample-configs/operator/local/config.yaml -o config.yaml
helm install adot-collector open-telemetry/opentelemetry-collector \
-f config.yaml
Lambda Insights
Lambda Insights は、Lambda 関数の拡張メトリクス(メモリ使用量・コールドスタート・CPU 時間)を収集します。
Lambda Insights が提供するメトリクス
| メトリクス | 説明 |
|---|---|
| Memory Usage | 実際のメモリ使用量(MB) |
| Max Memory Used | 実行ごとの最大メモリ使用量 |
| Cold Start Duration | 初回起動時の初期化時間 |
| CPU Time | CPU 使用時間(ms) |
| Duration | 関数全体の実行時間 |
Lambda Insights Lambda レイヤーの追加
# Terraform の例
resource "aws_lambda_layer_version" "lambda_insights" {
filename = "/opt/aws-lambda-insights-extension.zip"
layer_name = "aws-lambda-insights"
}
resource "aws_lambda_function" "my_function" {
# ...
layers = [aws_lambda_layer_version.lambda_insights.arn]
}
Database Insights
Database Insights は、RDS・Aurora・DynamoDB のパフォーマンスメトリクスを深層的に分析します。
RDS Database Insights の分析範囲
| 分析対象 | 説明 |
|---|---|
| スロークエリ | 実行時間の長いクエリを自動検出 |
| ロック・デッドロック | テーブルロック・行ロック・デッドロック統計 |
| ウェイトイベント | CPU・I/O・ロック待機の内訳 |
| ユーザーセッション | 接続数・アクティブセッション・実行中クエリ |
CloudWatch Internet Monitor
Internet Monitor は、CloudFront・ALB・NLB のトラフィックをユーザーの地理的位置ごとに分析します。
Internet Monitor が測定する指標
| 指標 | 説明 |
|---|---|
| 可用性(Availability) | ユーザー地域ごとのエンドポイント到達可能性(%) |
| レイテンシ(Latency) | ユーザー地域ごとのエンドツーエンド遅延(ms) |
| トラフィック分布 | 地理的地域・ASN・キャリア別のトラフィック割合 |
| インターネット経路障害 | BGP ハイジャック・国単位の切断検知 |
EventBridge との関係
CloudWatch アラームと EventBridge は密接に統合されています。
アラーム発火時の自動化フロー
CloudWatch Alarm (ALARM状態)
↓
EventBridge Rule マッチ
↓
複数のターゲット実行可能:
- Lambda 関数(自動修復スクリプト)
- SNS トピック(通知)
- SQS キュー(非同期処理)
- Step Functions(複雑なワークフロー)
- Systems Manager Automation(OpsCenter インシデント作成)
EventBridge ルール例(自動修復)
{
"Name": "AutoScaleOnHighCPU",
"EventPattern": {
"source": ["aws.cloudwatch"],
"detail-type": ["CloudWatch Alarm State Change"],
"detail": {
"alarmName": ["High CPU Alert"],
"state": {
"value": ["ALARM"]
}
}
},
"Targets": [
{
"Arn": "arn:aws:lambda:ap-northeast-1:123456789:function:AutoScale",
"RoleArn": "arn:aws:iam::123456789:role/EventBridgeRole"
}
]
}
主要ユースケース
1. インフラ監視(Infrastructure Monitoring)
EC2・RDS・ALB の健全性をダッシュボードで一元監視。
✅ CloudWatch で実装可能
EC2 CPU/Memory/Disk → CloudWatch Metrics
↓
メトリクス集計・アラーム設定
↓
ダッシュボード表示 + SNS 通知
2. ログ分析(Log Analysis)
アプリケーションログから ERROR・WARN を抽出し、根本原因を追跡。
Application Logs → CloudWatch Logs
↓
Logs Insights クエリ
↓
エラーレート・トップエラーメッセージ抽出
3. Lambda 監視
Lambda 関数のエラー率・Duration・同時実行数をリアルタイム監視。
Lambda Invocations → CloudWatch Metrics
↓
カスタムメトリクス(ビジネスメトリクス)送信
↓
Composite Alarms で複数条件を組み合わせ
4. コンテナ監視(ECS/EKS)
Pod・タスク・サービス単位の CPU・メモリ・ネットワークを監視。
ECS/EKS → Container Insights
↓
クラスタ・ノード・Pod ごとのメトリクス
↓
Application Signals で APM(トレース・SLO)
5. APM(Application Performance Monitoring)
マイクロサービス間の遅延・エラー・サービス依存関係を分析。
EKS/EC2 App → OpenTelemetry
↓
Application Signals (トレース・スパン)
↓
サービス依存関係マップ・SLO 監視
6. SLO(Service Level Objective)監視
可用性目標・レイテンシ目標を定義し、エラーバジェット消費速度を監視。
Application Signals SLO Definition
↓
リアルタイムで目標達成率・バジェット消費速度を計算
↓
バジェット枯渇前にアラート
7. ダッシュボード・可視化
複数サービス・複数リージョンのメトリクスを統一ダッシュボードで表示。
クロスアカウント CloudWatch Dashboards
↓
Metric Math で KPI 計算(成約率・売上・ユーザー数)
↓
経営層・開発チームで共有
8. 自動修復(Auto-Healing)
アラーム発火時に Lambda が自動的に修復アクション(再起動・Auto Scaling)を実行。
CloudWatch Alarm (threshold exceeded)
↓
EventBridge Rule
↓
Lambda 修復スクリプト実行
↓
リソース自動修復 or スケーリング
9. コスト監視
AWS リソースの利用量・コストをカスタムメトリクスで追跡。
API Gateway 呼び出し数・Lambda 実行時間 → カスタムメトリクス
↓
コスト計算(呼び出し数 × $0.0000002)
↓
しきい値超過時にアラート
10. 機械学習・異常検知
トレンド外れ値を自動検出し、予測的に対応。
過去 2 週間のメトリクス履歴
↓
CloudWatch Anomaly Detection
↓
ベースライン ± 2σ の範囲外を検出
他の類似ツールとの比較
CloudWatch vs Datadog
| 項目 | CloudWatch | Datadog |
|---|---|---|
| AWS 統合 | ✅ ネイティブ・無料 | ✅ API 統合(有料) |
| メトリクス保持期間 | 15 ヶ月 | カスタマイズ可能 |
| カスタムメトリクス価格 | `0.30/月 | `0.05/メトリクス/月(相対的に安い) |
| UI / UX | 基本的 | 洗練・高度な可視化 |
| 異常検知 | ML ベース(統合) | Advanced Analytics(有料) |
| トレース機能 | Application Signals | Datadog APM(有料) |
| マルチクラウド | AWS のみ | AWS・Azure・GCP 統一 |
| 学習曲線 | 易しい | 中程度 |
結論: AWS メインなら CloudWatch、マルチクラウド・高度な分析なら Datadog。
CloudWatch vs Grafana + Prometheus + Loki
| 項目 | CloudWatch | Grafana Stack |
|---|---|---|
| セットアップ複雑性 | 簡単(AWS マネージド) | 複雑(自管理) |
| AWS メトリクス | ✅ 自動 | API 統合が必要 |
| コスト(小規模) | 低い(AWS 無料枠 利用) | 低い(OSS) |
| コスト(大規模) | $0.30/メトリクス/月 | インフラ自体のコスト |
| ラベルの自由度 | 制限あり(ディメンション) | ✅ 無制限 |
| 長期保存スケーリング | Native CloudWatch or S3 | Mimir / Thanos |
| マルチテナント | ❌ 基本的 | ✅ Advanced(Cortex) |
| カスタマイズ性 | 低 | ✅ 高 |
結論: AWS ワークロード + 簡単セットアップなら CloudWatch。OSS・カスタマイズ重視なら Grafana Stack。
CloudWatch vs New Relic
| 項目 | CloudWatch | New Relic |
|---|---|---|
| APM 機能 | Application Signals | ✅ ネイティブ・高度 |
| ログ分析 | Logs Insights | ✅ NRQL(強力) |
| AWS 統合 | ✅ ネイティブ | API(有料追加) |
| トレース UI | 基本的 | ✅ 洗練 |
| AI Operations | 初期段階 | ✅ AIOps(成熟) |
| 自動計装 | OpenTelemetry | ✅ New Relic Agent |
| 学習曲線 | 易しい | 中程度 |
クライアントとエコシステム
AWS CLI
# メトリクス取得
aws cloudwatch get-metric-statistics \
--namespace AWS/EC2 \
--metric-name CPUUtilization \
--dimensions Name=InstanceId,Value=i-1234567 \
--start-time 2026-04-20T00:00:00Z \
--end-time 2026-04-26T23:59:59Z \
--period 3600 \
--statistics Average
boto3(Python SDK)
import boto3
cw = boto3.client('cloudwatch')
# カスタムメトリクス送信
cw.put_metric_data(
Namespace='MyApp',
MetricData=[
{
'MetricName': 'OrderCount',
'Value': 42,
'Unit': 'Count',
'Dimensions': [{'Name': 'Service', 'Value': 'OrderAPI'}]
}
]
)
# ダッシュボード作成
cw.put_dashboard(
DashboardName='MyDashboard',
DashboardBody='{"widgets": [...]}' # JSON 形式
)
AWS CDK(Infrastructure as Code)
from aws_cdk import (
aws_cloudwatch as cw,
aws_ec2 as ec2,
core
)
class CloudWatchStack(core.Stack):
def __init__(self, scope: core.Construct, id: str, **kwargs):
super().__init__(scope, id, **kwargs)
# CloudWatch ダッシュボード作成
dashboard = cw.Dashboard(self, "Dashboard",
dashboard_name="MyMonitoring"
)
# メトリクスウィジェット追加
dashboard.add_widgets(
cw.GraphWidget(
title="EC2 CPU",
left=[
cw.Metric(
namespace="AWS/EC2",
metric_name="CPUUtilization",
statistic="Average"
)
]
)
)
Terraform
resource "aws_cloudwatch_metric_alarm" "cpu_alarm" {
alarm_name = "high-cpu-alert"
comparison_operator = "GreaterThanThreshold"
evaluation_periods = 1
metric_name = "CPUUtilization"
namespace = "AWS/EC2"
period = 300
statistic = "Average"
threshold = 80
alarm_actions = [aws_sns_topic.alerts.arn]
dimensions = {
InstanceId = "i-1234567"
}
}
ADOT(AWS Distro for OpenTelemetry)
CloudWatch と OpenTelemetry の統合。
# otel-collector-config.yaml
receivers:
prometheus:
config:
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 15s
static_configs:
- targets: ['localhost:9090']
exporters:
awscloudwatch:
namespace: "MyApp"
region: "ap-northeast-1"
service:
pipelines:
metrics:
receivers: [prometheus]
exporters: [awscloudwatch]
ベストプラクティス
1. メトリクス戦略(What to Monitor)
✅ 監視すべき指標
- ビジネス KPI:注文数・売上・ユーザー数(カスタムメトリクス)
- SLO 関連:エラー率・レイテンシ・可用性
- リソース健全性:CPU・メモリ・ディスク・ネットワーク
- 依存関係健全性:DB 接続・キュー深さ・外部 API 応答
❌ 避けるべき過度な監視
- 過多なディメンション:カーディナリティ爆発でコスト増加
- すべてのアプリケーション変数:重要度の低い詳細ログは Logs へ
- 超短時間粒度:1 秒間隔は必要性を明確にしてから
2. アラーム設計
✅ 実践的なアラーム
# 誤検知を減らす Composite Alarm
(CPU > 80% AND Memory > 85% AND for 5 minutes) → Alert
❌ アンチパターン
# 単一条件のみ → 誤検知が多い
CPU > 50% → Alert(本番環境では頻繁に超える)
3. ログ設計
✅ 実践的なログ構造
{
"timestamp": "2026-04-26T10:30:00Z",
"level": "ERROR",
"service": "OrderAPI",
"request_id": "req-12345",
"error_code": "PAYMENT_FAILED",
"user_id": "user-789",
"duration_ms": 1234,
"error_message": "Payment gateway timeout"
}
❌ アンチパターン
- plain text log: “Something went wrong” ← 検索・分析が困難
4. ダッシュボード設計
✅ 効果的なダッシュボード
【トップレベルダッシュボード】
├─ System Health(全体像)
│ ├─ Availability (%)
│ ├─ Error Rate (%)
│ └─ P99 Latency (ms)
├─ Business KPI
│ ├─ Orders/min
│ ├─ Revenue/hour
│ └─ User Activity
└─ Resource Utilization
├─ CPU / Memory / Disk
└─ Network I/O
❌ アンチパターン
- 【雑然としたダッシュボード】
- → 100+ メトリクスが無秩序に並ぶ → 使い物にならない
5. コスト最適化
✅ コスト削減テクニック
| テクニック | 効果 |
|---|---|
| ログ保持期間の設定 | 無期限→ 30 日で約 90% 削減 |
| ログフィルタリング | DEBUG→ERROR のみで 70% 削減 |
| メトリクス集計 | 1 秒→ 60 秒粒度で 98% 削減 |
| カスタムメトリクス削減 | 不要メトリクス削除 |
6. セキュリティ
✅ セキュリティベストプラクティス
- CloudWatch Logs への IAM ポリシー制限
- 機密データ(パスワード・トークン)をログに含めない
- KMS 暗号化でログを保護
- CloudTrail で API アクセスを監査
トラブルシューティング
ログが見えない
| 原因 | 解決方法 |
|---|---|
| ロググループ作成されていない | CloudWatch Logs コンソールで手動作成 or 自動作成設定 |
| IAM 権限不足 | logs:CreateLogGroup, logs:CreateLogStream, logs:PutLogEvents を付与 |
| CloudWatch Agent が停止 | systemctl status amazon-cloudwatch-agent で確認・再起動 |
メトリクスが報告されない
| 原因 | 解決方法 |
|---|---|
| 詳細監視未設定(EC2) | aws ec2 monitor-instances --instance-ids i-xxx で有効化 |
| IAM 権限不足 | cloudwatch:PutMetricData を付与 |
| API スロットル | メトリクス送信間隔を延長 |
アラームが発火しない
| 原因 | 解決方法 |
|---|---|
| アラーム作成後すぐ | INSUFFICIENT_DATA 状態で 1-2 分待つ |
| SNS トピック未設定 | アラームアクション設定で SNS ARN を指定 |
| メトリクス自体がない | メトリクス存在確認(CloudWatch コンソール) |
コスト最適化
CloudWatch 料金体系
| 課金項目 | 価格 | 削減策 |
|---|---|---|
| 標準メトリクス | 無料 | AWS サービスのデフォルトメトリクス活用 |
| カスタムメトリクス | $0.30/メトリクス/月 | 不要メトリクス削除・集約 |
| ダッシュボード | $3.00/ダッシュボード/月 | 必要最小限に絞る |
| アラーム | $0.10/アラーム/月 | Composite Alarms で複合条件に統約 |
| ログ取り込み | $0.50/GB | フィルタリング・サンプリング |
| ログ保存 | $0.03/GB/月 | 保持期間 30-90 日に設定 |
| Logs Insights | $0.005/GB スキャン | 定期実行クエリを CloudWatch Insights Queries へ |
| API 呼び出し | $0.01/1,000 リクエスト | SDK バッチ処理 |
コスト削減例
【変更前】
- カスタムメトリクス 100 個 × $0.30 = $30/月
- ログ保持期間:無期限で月 5GB 増加 = $0.03 × 60GB = $1.80/月
- 合計:約 $50/月
【変更後】
- カスタムメトリクス 30 個(重要度の高いもののみ)× $0.30 = $9/月
- ログ保持期間:30 日に短縮。月 5GB × 0.3 倍 = 1.5GB = $0.045/月
- 合計:約 $10/月
削減効果:80%
学習リソース
公式ドキュメント
- AWS CloudWatch User Guide
- CloudWatch Logs Insights Query Syntax
- CloudWatch Application Signals
- AWS Observability Best Practices
学習順序
-
Week 1-2:基礎
- CloudWatch Metrics・Logs・Alarms の概念
- EC2・Lambda メトリクス自動収集を体験
-
Week 3-4:実装
- カスタムメトリクス送信(boto3)
- Logs Insights クエリ構築
- ダッシュボード作成
-
Week 5-6:発展
- Application Signals で APM 構築
- Composite Alarms で複合監視
- CloudFormation / Terraform で IaC 化
-
Week 7+:運用
- コスト最適化
- セキュリティ強化
- 他ツール(Grafana・Datadog)統合
実装チェックリスト
Phase 1:基本セットアップ
- [ ] CloudWatch コンソールアクセス確認
- [ ] EC2 インスタンス詳細監視有効化
- [ ] Lambda Insights Lambda レイヤー追加
- [ ] RDS 拡張監視有効化
Phase 2:ログ・アラーム
- [ ] CloudWatch Logs エージェント EC2 へ導入
- [ ] Lambda 関数から logs:PutLogEvents 実行確認
- [ ] 最初のアラーム(高 CPU)作成
- [ ] SNS トピック・メール通知設定
Phase 3:カスタムメトリクス
- [ ] ビジネス KPI(注文数・売上)カスタムメトリクス定義
- [ ] SDK / API でカスタムメトリクス送信実装
- [ ] カスタムメトリクスアラーム作成
Phase 4:ダッシュボード・可視化
- [ ] Metric Math を使用した KPI 計算
- [ ] カスタムダッシュボード作成(JSON 編集)
- [ ] テンプレート変数(環境・リージョン)設定
Phase 5:発展機能
- [ ] Application Signals セットアップ(EKS/EC2)
- [ ] RUM JavaScript SDK Web アプリに統合
- [ ] Synthetics Canary で可用性監視
- [ ] Internet Monitor 設定
Phase 6:統合・自動化
- [ ] EventBridge ルール作成(アラーム→Lambda 修復)
- [ ] Terraform / CloudFormation で インフラ as Code 化
- [ ] Grafana 統合(CloudWatch データソース設定)
Phase 7:運用・最適化
- [ ] ログ保持期間最適化(コスト削減)
- [ ] アラーム誤検知削減(Composite Alarms 活用)
- [ ] IAM ポリシー最小権限化
- [ ] 定期的なダッシュボードレビュー・改善
まとめ
初心者向けメモ: CloudWatch は「AWS の標準オブザーバビリティプラットフォーム」です。メトリクス・ログ・アラーム・ダッシュボード・APM(Application Signals)・RUM・Synthetics を統合し、AWS リソースとアプリケーションの健全性を包括的に監視できます。
CloudWatch を使うべき 3 つの理由
- AWS ネイティブ統合:EC2・Lambda・RDS など 200+ サービスのメトリクスを自動収集。追加エージェント・設定なし。
- 段階的な導入:基本的なメトリクス・ダッシュボードからスタートして、Application Signals・Synthetics などの発展機能へ進化可能。
- AWS サービスとの深い連携:EventBridge・Lambda・SNS・Systems Manager と統合し、自動修復・ワークフロー自動化が実現可能。
学習ロードマップ
Week 1-2 Week 3-4 Week 5-6 Week 7+
┌─────────┬──────────┬─────────────┬──────────────┐
│ 基礎 │ 実装 │ 発展機能 │ 運用・最適化 │
│ ・概念 │ ・メト │ ・Composite │ ・コスト │
│ ・初期 │ クス │ Alarms │ ・セキュ │
│ セット │ ・Logs │ ・App Sig │ リティ │
│ アップ │ Insights │ ・Synthetics│ ・統合 │
└─────────┴──────────┴─────────────┴──────────────┘
次のステップ
- 単一 AWS リソース監視→ CloudWatch Metrics・Logs で開始
- 複数リージョン・アカウント→ CloudWatch クロスアカウントダッシュボード
- マイクロサービス・EKS→ Application Signals + Container Insights
- 外部ツール統合→ Grafana・Datadog CloudWatch データソース設定
参考文献
公式リソース
- AWS CloudWatch Documentation
- CloudWatch Metrics
- CloudWatch Logs Insights Query Syntax
- CloudWatch Application Signals
- CloudWatch Application Signals - SLO Capabilities(2026年3月)
- CloudWatch RUM
- CloudWatch Synthetics
- CloudWatch Container Insights
- CloudWatch Internet Monitor
- AWS Observability Best Practices
- AWS Well-Architected Framework - Operational Excellence Pillar
標準化・オブザーバビリティ
- OpenTelemetry Documentation(ベンダー中立的なトレース・メトリクス・ログ標準)
- AWS Distro for OpenTelemetry (ADOT)(AWS による OpenTelemetry 実装)
- Prometheus Documentation(メトリクス集約・時系列 DB)
可視化・ダッシュボード
- Grafana Documentation - CloudWatch Plugin
- AWS CloudWatch Grafana Integration
- AWS Managed Grafana CloudWatch Integration
関連トピック
- AWS X-Ray(分散トレース)
- EventBridge(イベント駆動自動化)
- Systems Manager(インシデント管理・自動化)
最終更新:2026-04-26 バージョン:2.1(2026年3月SLO機能、Grafana統合追加)