CloudWatch の監視設計(メトリクス階層・アラーム・ログ分析の使い分け)

一言まとめ

メトリクスは「ハイパーバイザーから見える標準」「OS 内部のカスタム(エージェント必須)」「サービス間の X-Ray」の 3 階層。アラームは評価期間とメトリクスの性質(静的か周期的か)で設計し、ログ分析は Logs Insights / Metrics Insights / Athena を期間とデータ種別で使い分ける。

作成 · 更新 · #aws#cloudwatch#monitoring#soa-c03
目次 10 sections
  1. 01 メトリクスの 3 階層とエージェント要否
  2. エージェントの一斉展開
  3. Lambda と EC2 のログ収集の違い
  4. 02 解像度と評価期間
  5. 「5 分以内にスケールアウト」の評価期間
  6. 03 しきい値の選び方: 静的か異常検出か
  7. 04 複合アラーム(Composite Alarm)
  8. 05 メトリクスフィルター(既存ログの数値でアラーム)
  9. 06 ログとメトリクスの分析ツール
  10. Metrics Insights と Metric Math の関係
  11. Metrics Insights のコスト構造
  12. 07 パフォーマンス改善の定番
  13. 08 周辺の観測系サービス
  14. 09 関連
  15. 10 更新履歴

調査時点: 2026-07。料金は当時の値。

Amazon CloudWatch は、AWS リソースやアプリケーションのメトリクス・ログを収集し、可視化とアラーム通知を行う監視サービス。

メトリクスの 3 階層とエージェント要否#

階層取得対象導入要件例
標準メトリクスハイパーバイザー側から見える外部負荷なし(自動)CPU 使用率、ネットワーク、EBS I/O、ステータスチェック
カスタムメトリクス / ログOS 内部CloudWatch Agent(統合エージェント)を OS 内に導入メモリ使用率(mem_used_percent)、ディスク使用率(disk_used_percent)、アプリのログファイル
分散トレースサービス間の呼び出し経路と遅延アプリに SDK 組み込み、または X-Ray デーモンマイクロサービスのボトルネック、サービスマップ

メモリとディスクは外側から物理的に見えない。標準メトリクスだけで監視する選択肢は成立しない。CloudWatch Agent はログとメトリクスを扱い、トレースは扱わない(トレースは X-Ray)。

エージェントの一斉展開#

  • 必要な IAM: EC2 のインスタンスプロファイルに CloudWatchAgentServerPolicy と AmazonSSMManagedInstanceCore
  • 設定 JSON を SSM Parameter Store に一元保存し、Run Command(AmazonCloudWatch-ManageAgent)で全台に配信・起動する。1 台ずつログインして配置する運用は選ばない
  • 詳細は Systems Manager の運用自動化

Lambda と EC2 のログ収集の違い#

  • Lambda はエージェントレス。標準出力に書くだけで実行環境が /aws/lambda/<関数名> へ配送する。ただし実行ロールに AWSLambdaBasicExecutionRole(logs:PutLogEvents など)が要る
  • EC2 は OS 内部がブラックボックスなのでエージェントが要る

解像度と評価期間#

種別間隔課金
標準モニタリング5 分無料
詳細モニタリング1 分有料
高解像度カスタムメトリクス最短 1 秒有料
ステータスチェック1 分無料

EC2 の機能名は「詳細モニタリング」。「拡張モニタリング(Enhanced Monitoring)」は RDS の機能で、EC2 には存在しない。

「5 分以内にスケールアウト」の評価期間#

詳細モニタリングを 1 分にしただけでは達成できない。アラームの「評価期間」との組み合わせで決まる。

  • 期間 1 分 × 評価 5 回中 5 回 → トリガーまで最短 5 分。要件違反になりうる
  • 期間 1 分 × 評価 3 回中 3 回 → 3 分でトリガー。5 分以内に余裕で開始できる

統計は Trim(トリム平均)や Percentile で外れ値を除いて評価できる。Web のレイテンシ計測など、少数の外れ値に引きずられたくない指標に向く。

しきい値の選び方: 静的か異常検出か#

メトリクスの性質アラームの種類理由
平坦・常に一定静的しきい値(例: CPU 80% 以上)明確な限界値がある
昼夜・曜日で周期的に上下Anomaly Detection(異常検出)機械学習で予測バンド(期待範囲)を自動生成し、バンド外れで鳴る。手動のしきい値調整が不要

周期的なメトリクスに固定しきい値を当てると誤報の元になる。

複合アラーム(Composite Alarm)#

複数のアラームを ALARM(CPU) AND ALARM(SystemCheck) のように論理式(AND / OR / NOT)で結合し、通知を親アラーム 1 つに集約する。単発では誤報になる条件を AND にして「本当に異常なときだけ」通知する用途。

  • EventBridge はステートレスで、2 つのアラームの AND 状態を待つことはできない。AND は複合アラームの仕事
  • メンテナンス中に通知だけ止めたいときはアラームのアクション無効化。複合アラームとは別機能
  • 「アラームグループ」「通知のインテリジェント集約」という機能は存在しない

メトリクスフィルター(既存ログの数値でアラーム)#

すでに CloudWatch Logs にある JSON ログに対し、ロググループ側で { $.api_endpoint = "/checkout" } のようにフィルタし、メトリクス値に $.response_time_ms を指定すると、サーバー側を一切変更せずにカスタムメトリクス化できる。そのまま標準アラーム → SNS に繋げる。

切り分け:

  • すでに CloudWatch Logs にログがある → メトリクスフィルター
  • まだ EC2 内にしかない、メモリ・ディスクを新規に監視したい → CloudWatch Agent

リアルタイム検知はメトリクスフィルター、ストリームの目視は Live Tail。Logs Insights を 1 分おきに手動実行する方法はリアルタイム検知には使わない。

ログとメトリクスの分析ツール#

ツール対象言語向く場面
Logs Insightsログ本文(テキスト)専用構文(fields / filter / stats / bin)直近数時間〜数日の対話的トラブルシュート
Metrics Insightsメトリクス(数値)SQL(SELECT ... WHERE ... GROUP BY)「CPU 使用率トップ 10 インスタンス」のような動的な集計
Metric Mathメトリクス数式メトリクス間の計算(エラー数 ÷ 総数 × 100 のエラー率、キャッシュヒット率)
Athena(S3 エクスポート後)S3 上のログ標準 SQL数か月〜数年・テラバイト級の監査。S3 の安価な保管 + クエリごとの従量課金
Contributor Insightsログキー指定「誰が / 何が負荷の主か」のトップ N ランキングを常時可視化

Logs Insights の例:

fields @timestamp, @message
| filter @message like /ERROR/
| stats count() as errorCount by bin(1h)

Metrics Insights と Metric Math の関係#

上位互換ではなく補完関係。Metrics Insights は Auto Scaling で増減する対象へ動的に追従できるが、メトリクス間の計算はできない。Metric Math は四則演算が得意だが固定の対象しか扱えない。併用すると、Metrics Insights の集計結果を Metric Math の入力にして「増減するコンテナ群全体のエラー率」を動的にアラーム化できる。

Metrics Insights のコスト構造#

実行元課金
コンソールでの手動実行無料
API / 外部ツール(Grafana など)経由の GetMetricData従量(当時 1,000 メトリクスあたり 0.01 USD)
アラームに組み込み固定(当時 1 クエリあたり月 0.10 USD)

リアルタイム「トップ 10」ダッシュボードは、自動更新のたびに全メトリクスをスキャンして課金される。2,000 台を 1 分更新で常時表示すると月数百 USD 規模になる試算になった。回避策は、更新間隔を伸ばすか、EventBridge + Lambda で定期的に 1 回だけ集計して対象 ID を固定し、無料の通常ダッシュボードへ書き戻す構成。

パフォーマンス改善の定番#

サービス手段
S3DataSync、Transfer Acceleration(遠隔地転送)、マルチパートアップロード、ライフサイクル
EBSメトリクスに基づき gp2 → gp3 へ移行
EFSIA(低頻度アクセス)へのライフサイクル
RDSPerformance Insights の推奨、RDS Proxy による接続管理

Lambda の大量同時実行が RDS の接続上限を使い切る「Too many connections」は、RDS Proxy のコネクションプーリングで吸収する。アプリは接続先エンドポイントを Proxy に書き換えるだけでよい。

周辺の観測系サービス#

  • X-Ray: 分散トレース、サービスマップ、ボトルネック特定
  • Data Firehose: 大量ログのニアリアルタイム転送。S3 / OpenSearch / Splunk などへノーコードで配送
  • AWS Health Dashboard: AWS 全体の障害(Service health)と、自アカウント宛てのメンテナンス・リタイア通知(Your account health)

関連#

更新履歴#

  • 2026-07-18: 初版(ローカル調査ノート)
  • 2026-10-17: Wiki へ移植、概念ページとして再構成。冒頭に定義を追加

同じトピック — AWS