AWS EC2 の状態監視をしようと思ったとき、CPU 使用率なんかはインスタンスのコンソールでデフォルトで見れるようになっていますが、 メモリ監視はデフォルトでは取れない(EC2標準メトリクスにメモリはない)ので、ひと手間必要です。
この記事では、AWS Cloud Watch Agent を使うことで、EC2 インスタンスのメモリ使用率をモニターできるようにする手順を解説します。
対象:LinuxのEC2(Amazon Linux/Ubuntuなど)
ゴール:
mem_used_percent
を CloudWatch に送り、90%超でSNS通知するアラームを作る
概要
-
IAMロールを作って EC2 にアタッチ(
CloudWatchAgentServerPolicy
) - CloudWatch Agent をインストール
-
設定ファイルで
mem_used_percent
を送信 - Agent を起動
0. 前提確認
- EC2 に管理者権限で入れること(SSH or Session Manager)
1. IAMロールを作成してインスタンスに付与
AWS コンソールから
-
IAM → ロール → ロールを作成
- 信頼されたエンティティ:AWS サービス
- ユースケース:EC2
-
許可ポリシー
CloudWatchAgentServerPolicy
- ロール名(例):
cwagent-ec2-role
-
EC2 → インスタンス → 対象インスタンス → Actions → Security → Modify IAM role
-
cwagent-ec2-role
を選択して更新
-
以下は EC2 の対象インスタンスでの作業になります。
2. CloudWatch Agent をインストール
Amazon Linux 2
sudo yum install -y amazon-cloudwatch-agent
Amazon Linux 2023
sudo dnf install -y amazon-cloudwatch-agent
Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y amazon-cloudwatch-agent
3. 設定ファイルの作成(mem_used_percent
を送る設定)
sudo mkdir -p /opt/aws/amazon-cloudwatch-agent/etc
sudo tee /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json >/dev/null <<'JSON'
{
"agent": {
"metrics_collection_interval": 60,
"logfile": "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log"
},
"metrics": {
"append_dimensions": {
"InstanceId": "${aws:InstanceId}"
},
"metrics_collected": {
"mem": {
"measurement": ["mem_used_percent"],
"metrics_collection_interval": 60
}
}
}
}
JSON
4. Agent を起動して送信開始
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl \
-a fetch-config -m ec2 \
-c file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json -s
- ログは
/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log
二出力されます。
CloudWatch コンソール → Metrics → CWAgent → InstanceId dimension に mem_used_percent
が出ていればOKです。
簡単ですが、以上になります。