Amazon CloudWatch とは?メトリクス・ログ・アラームの基本を学ぼう
AWS 上でシステムを運用する際、リソースの状態を把握して異常を早期に検知することは欠かせないです。Amazon CloudWatch は AWS リソースやアプリケーションの監視・オブザーバビリティ(システムの内部状態を外部から観測・把握できる性質)を一元管理できるマネージドサービスです。本記事では CloudWatch の基本概念からメトリクス・ログ・アラームの仕組み、AWS CLI を使った基本操作まで説明します。
Amazon CloudWatch とは
CloudWatch は AWS が提供するフルマネージドな監視・オブザーバビリティサービスです。EC2 インスタンスや RDS、Lambda などの AWS リソースから自動的にメトリクスを収集し、ダッシュボードや通知、ログ管理など幅広い監視機能を提供します。
CloudWatch を活用することで、システムの状態をリアルタイムに把握し、問題が発生した際にアラームで通知を受け取ったり、ログを分析して原因を特定したりできます。
Amazon CloudWatch とは - Amazon CloudWatch
Amazon CloudWatch を使用して AWS リソースとアプリケーションをモニターリングすることで、パフォーマンスのメトリクスを収集し、追跡します。
主な機能
CloudWatch は大きく分けて 4 つの機能で構成されています。
| 機能 | 概要 |
|---|---|
| メトリクス | CPU 使用率やネットワーク転送量などのパフォーマンスデータを時系列で収集・表示する |
| ログ | アプリケーションや AWS サービスが出力するログを収集・保存・検索できる |
| アラーム | メトリクスが閾値を超えた際に通知や自動アクションを実行する |
| ダッシュボード | 複数のメトリクスやログを 1 つの画面にまとめて可視化する |
これらの機能を組み合わせることで、インフラとアプリケーション両方の観点から包括的な監視体制を構築できます。
メトリクス
メトリクスは CloudWatch の中核となる機能です。AWS サービスのパフォーマンスデータを時系列で保存し、グラフとして可視化します。
EC2 や RDS などの AWS サービスは標準メトリクスを自動で送信します。独自のアプリケーション固有のデータを送りたい場合は、カスタムメトリクスとして任意の値を CloudWatch に送信することもできます。
メトリクスは名前空間(Namespace)でグループ化されており、AWS サービスのメトリクスは AWS/EC2 や AWS/RDS のような名前空間に分類されます。各メトリクスはディメンション(Dimension)と呼ばれるキーと値のペアで識別されます。たとえば EC2 のメトリクスはインスタンス ID をディメンションとして持ちます。
| 項目 | 内容 |
|---|---|
| 解像度 | AWS サービスのデフォルトは 5 分間隔(詳細モニタリング有効時は 1 分間隔、高解像度メトリクスは 1 秒間隔) |
| 保存期間 | 解像度に応じて 3 時間〜15 ヶ月間保存される |
| 無料枠 | カスタムメトリクス 10 件、API リクエスト 100 万件/月まで無料 |
Amazon CloudWatch のメトリクス - Amazon CloudWatch
お使いのシステムのパフォーマンスに関するデータの表示、グラフ化、パブリッシュを行います。
CloudWatch Logs
CloudWatch Logs はアプリケーションや AWS サービスが出力するログを一元管理する機能です。
ログはロググループ(Log Group)という単位で管理され、その中に複数のログストリーム(Log Stream)が存在します。たとえば Lambda 関数では関数ごとにロググループが作成され、実行ごとにログストリームが追加されます。
ログの検索・分析には CloudWatch Logs Insights というクエリ機能を使います。SQL に近い構文でログをフィルタリングや集計できます。たとえばエラーログの件数を時系列で集計したり、特定のリクエスト ID を含むログを絞り込んだりすることができます。
Amazon CloudWatch Logs とは - Amazon CloudWatch Logs
CloudWatch Logs を使って Amazon Elastic Compute Cloud および AWS CloudTrailのログファイルをモニタリング、保存、アクセスするために知る必要が...
アラーム
アラームはメトリクスの値を継続的に監視し、設定した条件を満たしたときに通知やアクションを自動実行する機能です。
アラームを設定する際は「閾値(Threshold)」と「評価期間(Evaluation Period)」の 2 つが重要です。閾値はアラームが発火する境界値で、評価期間は何回連続して閾値を超えたらアラーム状態とみなすかを指定します。一時的なスパイクでは発報させたくない場合は評価期間を複数回に設定しましょう。
アラームには 3 つの状態があり、条件を満たすと OK から ALARM に遷移します。
| 状態 | 意味 |
|---|---|
| OK | メトリクスが設定した閾値の範囲内にある |
| ALARM | メトリクスが閾値を超えてアラーム条件を満たしている |
| INSUFFICIENT_DATA | データ不足でアラームの状態を判断できない |
アラーム状態になったとき、Amazon SNS トピックを通じてメールや Slack に通知を送ったり、EC2 インスタンスの停止・再起動などのアクションを実行したりできます。
Amazon CloudWatch でのアラームの使用 - Amazon CloudWatch
アラームの状態が変わったときに Amazon SNS メッセージを送信するか、アクションを実行する Amazon CloudWatch のアラームを作成します。
AWS CLI で CloudWatch を使ってみる
AWS CLI を使ってメトリクスの確認とアラームの作成・削除を体験してみましょう。
メトリクスを確認する
EC2 インスタンスの CPU 使用率メトリクスを一覧表示します。--namespace で対象の名前空間、--metric-name でメトリクス名を指定します。
❯ aws cloudwatch list-metrics \
--namespace AWS/EC2 \
--metric-name CPUUtilization
{
"Metrics": [
{
"Namespace": "AWS/EC2",
"MetricName": "CPUUtilization",
"Dimensions": [
{
"Name": "InstanceId",
"Value": "i-0a1b2c3d4e5f67890"
}
]
}
]
}
メトリクスの統計値を取得する
直近 1 時間の CPU 使用率の平均値を 5 分間隔で取得します。--start-time と --end-time で期間を、--period で集計間隔(秒)を指定します。
❯ aws cloudwatch get-metric-statistics \
--namespace AWS/EC2 \
--metric-name CPUUtilization \
--dimensions Name=InstanceId,Value=i-0a1b2c3d4e5f67890 \
--start-time 2026-04-25T01:30:00Z \
--end-time 2026-04-25T02:30:00Z \
--period 300 \
--statistics Average
{
"Label": "CPUUtilization",
"Datapoints": [
{
"Timestamp": "2026-04-25T11:00:00+09:00",
"Average": 0.2966666666666667,
"Unit": "Percent"
},
{
"Timestamp": "2026-04-25T10:55:00+09:00",
"Average": 0.2502405052421769,
"Unit": "Percent"
}
]
}
アラームを作成する
CPU 使用率が 80% を超えたときにアラーム状態になる設定をします。--alarm-actions に SNS トピックの ARN を指定することで通知を送ることができます。
❯ aws cloudwatch put-metric-alarm \
--alarm-name high-cpu-alarm \
--metric-name CPUUtilization \
--namespace AWS/EC2 \
--dimensions Name=InstanceId,Value=i-0a1b2c3d4e5f67890 \
--statistic Average \
--period 300 \
--evaluation-periods 2 \
--threshold 80 \
--comparison-operator GreaterThanOrEqualToThreshold \
--alarm-actions arn:aws:sns:ap-northeast-1:123456789012:exrecord-topic
アラームの状態を確認する
作成したアラームの現在の状態を確認します。StateValue が OK であればメトリクスは正常範囲内です。ALARM になっている場合は閾値を超えていることを意味します。
実行結果
❯ aws cloudwatch describe-alarms --alarm-names high-cpu-alarm
{
"MetricAlarms": [
{
"AlarmName": "high-cpu-alarm",
"AlarmArn": "arn:aws:cloudwatch:ap-northeast-1:123456789012:alarm:high-cpu-alarm",
"AlarmConfigurationUpdatedTimestamp": "2026-04-25T11:13:07.691000+09:00",
"ActionsEnabled": true,
"OKActions": [],
"AlarmActions": [
"arn:aws:sns:ap-northeast-1:123456789012:exrecord-topic"
],
"InsufficientDataActions": [],
"StateValue": "OK",
"StateReason": "Threshold Crossed: 2 datapoints [0.3124812407599757 (25/04/26 02:09:00), 0.3033163083601058 (25/04/26 02:04:00)] were not greater than or equal to the threshold (80.0).",
"StateReasonData": "{\"version\":\"1.0\",\"queryDate\":\"2026-04-25T02:14:13.262+0000\",\"startDate\":\"2026-04-25T02:04:00.000+0000\",\"statistic\":\"Average\",\"period\":300,\"recentDatapoints\":[0.3033163083601058,0.3124812407599757],\"threshold\":80.0,\"evaluatedDatapoints\":[{\"timestamp\":\"2026-04-25T02:09:00.000+0000\",\"sampleCount\":4.0,\"value\":0.3124812407599757}]}",
"StateUpdatedTimestamp": "2026-04-25T11:14:13.263000+09:00",
"MetricName": "CPUUtilization",
"Namespace": "AWS/EC2",
"Statistic": "Average",
"Dimensions": [
{
"Name": "InstanceId",
"Value": "i-0a1b2c3d4e5f67890"
}
],
"Period": 300,
"EvaluationPeriods": 2,
"Threshold": 80.0,
"ComparisonOperator": "GreaterThanOrEqualToThreshold",
"StateTransitionedTimestamp": "2026-04-25T11:14:13.263000+09:00"
}
],
"CompositeAlarms": []
}
アラームを削除する
不要になったアラームを削除します。アラームを削除してもメトリクスのデータ自体は残るため、データへの影響はないです。
❯ aws cloudwatch delete-alarms --alarm-names high-cpu-alarm
まとめ
- Amazon CloudWatch は AWS リソースとアプリケーションの監視・オブザーバビリティをまとめて扱えるマネージドサービス
- メトリクスで CPU やネットワークなどのパフォーマンスデータを時系列に収集・可視化できる
- CloudWatch Logs でアプリケーションや AWS サービスのログを一元管理でき、Logs Insights でクエリ分析も可能
- アラームでメトリクスの閾値を監視し、条件達成時に SNS 通知や EC2 操作などのアクションを自動実行できる