1. ロールに移動して「許可を追加」ボタンをクリックします。
2 .「CloudWatchAgentServerPolicy」を検索して追加します。
sudo yum install -y amazon-cloudwatch-agent
↑ エラーが出る時はこちらのコマンドでインストールできます:
wget https://s3.amazonaws.com/amazoncloudwatch-agent/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm
sudo rpm -U ./amazon-cloudwatch-agent.rpm
Wizard を用いて設定する場合
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
Wizardを使わなくても、こちらにJSONを作成して、そこからTOMLファイルに変換することができます。
sudo vi /opt/aws/amazon-cloudwatch-agent/bin/custom.json
/opt/aws/amazon-cloudwatch-agent/bin/custom.json
{
"agent": {
"metrics_collection_interval": 60,
"run_as_user": "root"
},
"metrics": {
"namespace": "CWAgent",
"metrics_collected": {
"mem": {
"measurement": [
"mem_used_percent",
"mem_used",
"mem_available"
],
"metrics_collection_interval": 60
},
"swap": {
"measurement": [
"swap_used_percent",
"swap_used"
],
"metrics_collection_interval": 60
},
"cpu": {
"totalcpu": true,
"measurement": [
"cpu_usage_idle",
"cpu_usage_user",
"cpu_usage_system",
"cpu_usage_iowait"
],
"metrics_collection_interval": 60
},
"disk": {
"measurement": [
"used_percent",
"inodes_free"
],
"resources": ["/"],
"metrics_collection_interval": 300
},
"diskio": {
"measurement": [
"io_time",
"read_bytes",
"write_bytes"
],
"resources": ["*"],
"metrics_collection_interval": 60
},
"netstat": {
"measurement": [
"tcp_established",
"tcp_time_wait"
],
"metrics_collection_interval": 60
}
}
},
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "/var/log/nextjs/app.log",
"log_group_name": "/ec2/nextjs/app",
"log_stream_name": "{instance_id}",
"timezone": "Asia/Tokyo"
},
{
"file_path": "/var/log/nextjs/error.log",
"log_group_name": "/ec2/nextjs/error",
"log_stream_name": "{instance_id}",
"timezone": "Asia/Tokyo"
}
]
}
}
}
}
ログパスはPM2の出力先に合わせて変更してください(例:
~/.pm2/logs/)
# 設定を適用して起動
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/custom.json
# 自動起動を有効化
sudo systemctl enable amazon-cloudwatch-agent
sudo systemctl start amazon-cloudwatch-agent
# 動作確認
sudo systemctl status amazon-cloudwatch-agent
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a status
CloudWatch > すべてのメトリクス
にアクセスして
カスタム名前空間に「CWAgent」があれば成功です。
Next.js(Node.js)サーバーの観点で優先度が高いものを整理します。
| カテゴリ | メトリクス | 理由 |
|---|---|---|
| メモリ | mem_used_percent | Node.jsはメモリリークが起きやすい。最優先 |
| メモリ | mem_available | スワップ発生前に検知するため |
| CPU | cpu_usage_iowait | I/O待ちが多い場合はDBやディスクがボトルネック |
| CPU | cpu_usage_user | アプリ処理の負荷把握 |
| ディスク | used_percent | ログ肥大化によるディスクフル対策 |
| ディスク | inodes_free | 小ファイル大量生成時のinode枯渇対策 |
| ネット | tcp_established | 同時接続数の目安 |
| ネット | tcp_time_wait | TIME_WAIT過多はコネクション管理の問題サイン |
mem_used_percent > 80% → Warning
mem_used_percent > 90% → Critical(OOM Killerが動き始める水域)
disk used_percent > 85% → Warning
cpu_usage_iowait > 30% → Warning(継続5分以上)
PM2のメトリクスをCloudWatchに送るには、pm2-cloudwatch などのモジュールか、カスタムメトリクススクリプトを使う方法があります。ただしこれはエージェントとは別の仕組みになります。必要であれば別途説明します。
amazon-cloudwatch-agent をインストール・設定EC2のデフォルトではメモリとディスクは取得できないため、Agentの導入が必須です。