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使用率アラームの作成 ​

  1. CloudWatchコンソール > すべてのアラーム > アラームの作成
  2. メトリクスの選択: EC2 > インスタンス別 > CPUUtilization を選択
  3. 条件の指定:
    • 閾値の種類: 「静的」
    • 条件: 「以上」 80 %
  4. アクションの設定:
    • SNSトピックの選択(または作成)
    • Eメールアドレスを指定して通知を受け取る
  5. 名前と説明: わかりやすい名前(例: 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定義の例:

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を保存しておけば、いつでも同じダッシュボードを復元・複製できます。


次のステップ