CloudWatch 実践: メトリクスとアラーム
入門編で基礎を学んだ後は、実際にシステムの状態を数字(メトリクス)で把握し、異常があったら通知(アラーム)する仕組みを作りましょう。
標準メトリクスとカスタムメトリクス
標準メトリクス
AWSリソース(EC2, RDS, S3など)は、何も設定しなくても自動的にCloudWatchへメトリクスを送信します。
- 間隔: 基本モニタリング(5分間隔)は無料、詳細モニタリング(1分間隔)は有料です。
- 代表例:
CPUUtilization(CPU使用率),StatusCheckFailed(死活監視)
カスタムメトリクス
アプリケーション独自の指標(例:ログインユーザー数、注文数、メモリ使用率※)などを監視したい場合は、カスタムメトリクスとして送信する必要があります。 ※EC2のメモリ使用率は標準では取れないため、CloudWatch Agentを入れてカスタムメトリクスとして取得するのが一般的です。
アラーム設定のベストプラクティス
やみくもにアラームを設定すると「通知疲れ(Alert Fatigue)」を引き起こし、本当に重要な通知が見逃されてしまいます。
1. 3つの重要・緊急度レベル
アラームは重要度に応じて分類することをお勧めします。
| レベル | 内容 | 通知先・アクション |
|---|---|---|
| Critical | サービス停止、ユーザー影響大 | 電話/PagerDuty 即時対応が必要 |
| Warning | パフォーマンス低下、リソース逼迫 | Slack/Teams 営業時間内に確認・対応 |
| Info | 定期ジョブ完了、オートスケール発動 | 記録のみ/低優先チャンネル 対応不要 |
2. 適切な閾値(しきい値)の設定
- 静的閾値: 「CPU 90%以上」のように固定値を設定。
- 異常検知 (Anomaly Detection): 過去の傾向から機械学習で「通常範囲」を予測し、そこから外れたら検知。日中のアクセス増減の波があるサービスなどに有効です。
実践手順: CPU使用率アラームの作成
- CloudWatchコンソール > すべてのアラーム > アラームの作成
- メトリクスの選択: EC2 > インスタンス別 >
CPUUtilizationを選択 - 条件の指定:
- 閾値の種類: 「静的」
- 条件: 「以上」
80%
- アクションの設定:
- SNSトピックの選択(または作成)
- Eメールアドレスを指定して通知を受け取る
- 名前と説明: わかりやすい名前(例:
Web-Server-CPU-High)をつける
高度なアラーム設定: 複合アラーム (Composite Alarms)
単一のメトリクスだけでなく、「CPU使用率が高い AND ディスクI/Oも高い」といった複数の条件を組み合わせたい場合があります。これが複合アラームです。
- 単純なアラーム: CPU > 90%
- 複合アラーム:
ALARM(CPU_High) AND ALARM(Disk_IO_High)
これにより、「バックアップ処理でCPUが上がっているだけ」なのか「本当にシステムが高負荷で応答不能」なのかを区別し、誤検知(ノイズ)を減らすことができます。
Metric Math: メトリクスの計算
CloudWatchには、既存のメトリクスを計算して新しい数値をグラフ化する「Metric Math」という機能があります。
よくある利用例: エラー率の計算 「エラー回数」だけを見ていても、アクセス数が10倍になればエラーも増えるかもしれません。重要なのは「割合(レート)」です。
e1 = 呼び出し回数 (Invocations)
e2 = エラー回数 (Errors)
Id = e2 / e1 * 100このように数式を設定することで、「エラー率(%)」という新しいグラフを作り、そこに対して「エラー率が5%を超えたらアラーム」といった設定が可能になります。
ダッシュボードで可視化する
アラームは「点」での監視ですが、ダッシュボードは「線(トレンド)」での監視に役立ちます。
良いダッシュボードの条件
- 上位に要約: 一番上に「今システムは健康か?」がひと目で分かるウィジェット(大きな数字やステータス)を置く。
- 関連情報の集約: WebサーバーのCPUと、関連するDBの接続数を近くに配置するなど、相関関係が見やすいレイアウトにする。
- テキストウィジェットの活用: グラフだけでなく、手順書へのリンクや連絡先をMarkdownで書いておく。
IaCとしてのダッシュボード (Dashboard as Code)
GUIで作るのも簡単ですが、本番環境で同じダッシュボードを何度も作るのは大変です。CloudWatch DashboardはJSON形式で定義できるため、TerraformやCloudFormationでコードとして管理することをお勧めします。
JSON定義の例:
{
"widgets": [
{
"type": "metric",
"x": 0,
"y": 0,
"width": 12,
"height": 6,
"properties": {
"metrics": [
[ "AWS/EC2", "CPUUtilization", "InstanceId", "i-1234567890abcdef0" ]
],
"period": 300,
"stat": "Average",
"region": "ap-northeast-1",
"title": "Web Server CPU"
}
}
]
}このようにJSONを保存しておけば、いつでも同じダッシュボードを復元・複製できます。
次のステップ
- 実践編: ログ管理と分析
システムの「中身」を知るためのログ管理について学びます。