CloudWatch Agent 完全ガイド ​

EC2インスタンスを立ち上げただけでは、メモリ使用率やディスク空き容量が見えないことに驚いた経験はありませんか? これら「OS内部」の情報をCloudWatchに送信するために必要なのが、CloudWatch Agent です。

この記事では、Agentのインストールから、設定ウィザードを使ったjson作成、さらにプロセス監視などの高度な設定までを解説します。

なぜ CloudWatch Agent が必要なのか? ​

AWSの標準モニタリングは、ハイパーバイザー(物理ホスト側) から見える情報しか取得できません。

取得元取得できるメトリクス取得できないメトリクス
ハイパーバイザー
(標準)
CPU使用率, ネットワークIN/OUT, ディスクR/W回数, ステータスチェックメモリ使用率, ディスク使用率 (%), スワップ使用率, プロセス数
OS内部
(Agent導入)
すべて取得可能-

運用監視において「ディスクがいっぱいでログが書けない」「メモリリークでプロセスが落ちた」は致命的です。本番環境ではAgentの導入は必須と言えます。

インストール方法 ​

大きく分けて2つの方法があります。

1. Systems Manager (SSM) を使う方法(推奨) ​

多数のサーバーに一括でインストール・設定する場合に便利です。

  • 前提: EC2にIAMロール AmazonSSMManagedInstanceCore がアタッチされていること。
  • 手順: SSM Run Command から AWS-ConfigureAWSPackage を実行し、パッケージ名に AmazonCloudWatchAgent を指定します。

2. コマンドラインでインストールする方法 ​

1台だけ手動で構築する場合などは、コマンドで直接インストールします。

Amazon Linux 2023 / 2 の場合:

bash
sudo yum install amazon-cloudwatch-agent

Ubuntu の場合:

bash
wget https://amazoncloudwatch-agent.s3.amazonaws.com/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb
sudo dpkg -i -E ./amazon-cloudwatch-agent.deb

設定ウィザードの使い方 ​

Agentの設定ファイル (config.json) は非常に複雑なため、手書きはお勧めしません。 付属の対話式ウィザードを使うのがベストプラクティスです。

bash
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard

実行すると、以下のような質問が続きます。

  1. OS: Linux / Windows
  2. EC2 or On-Premises: EC2
  3. StatsD Daemon: 不要なら No
  4. Collectd: 不要なら No
  5. Metrics config:
    • CPU, Memory, Swap, Disk などを監視するか? -> Yes
    • 監視間隔は? -> 60s (標準)
  6. Log config:
    • ログファイルを送信するか? -> Yes
    • ログファイルのパスは? -> /var/log/nginx/access.log など

完了すると config.json が生成されます。最後にこの設定を使ってAgentを起動します。

bash
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json

主要なメトリクス設定 ​

ウィザードで生成される設定のなかで、特に重要な項目を紹介します。

メモリ監視 (mem) ​

json
"mem": {
    "measurement": [
        "mem_used_percent"
    ],
    "metrics_collection_interval": 60
}

mem_used_percent が最も一般的です。

ディスク監視 (disk) ​

json
"disk": {
    "measurement": [
        "used_percent"
    ],
    "resources": [
        "/"
    ],
    "ignore_file_system_types": [
        "sysfs", "devtmpfs"
    ]
}

ルートパーティション / の used_percent を監視します。

高度な機能: プロセス監視 (procstat) ​

「Webサーバーのプロセス (httpd や nginx) が生きているか?」を監視したい場合、procstat プラグインを使用します。

設定例: nginx プロセスの監視 ​

json
"metrics": {
    "metrics_collected": {
        "procstat": [
            {
                "exe": "nginx",
                "measurement": [
                    "pid_count"
                ]
            }
        ]
    }
}
  • exe: 実行ファイル名でマッチング (nginx)
  • pattern: コマンドライン引数も含めた正規表現でマッチング (java -jar app.jar など)
  • measurement: pid_count (プロセス数) を監視し、0になったらアラーム と設定するのが鉄板です。

ログ収集設定 ​

アプリケーションログをCloudWatch Logsに転送する設定です。

json
"logs": {
    "logs_collected": {
        "files": {
            "collect_list": [
                {
                    "file_path": "/var/log/app/error.log",
                    "log_group_name": "/aws/ec2/app-server",
                    "log_stream_name": "{instance_id}",
                    "timestamp_format": "%Y-%m-%d %H:%M:%S"
                }
            ]
        }
    }
}
  • log_group_name: サーバー群で共通の名前にする。
  • log_stream_name: インスタンスID ({instance_id}) を使うと、どのサーバーのログか判別しやすくなります。

まとめ ​

CloudWatch Agentは、AWSでの監視における「ラストワンマイル」を埋める重要なツールです。 まずは基本のメモリ・ディスク監視から始め、必要に応じてプロセス監視やログ収集を追加していくことをお勧めします。