環境
- EC2
- OS: Amazon Linux 2023
- Docker起動済み
- Docker上にNginxのコンテナを配置済み
- EC2インスタンスは起動済みであること
手順1:EC2インスタンスにIAMロールをアタッチ
手順1:IAMロールの作成
IAMのロールのロールを作成をクリック
信頼されたエンティティを選択
| 設定項目 | 入力内容 |
|---|---|
| 信頼されたエンティティタイプ | AWSのサービス |
| サービスまたはユースケース | EC2 |
| ユースケース | EC2 |
入力が完了しましたら、次へをクリックします
許可を追加
| 設定項目 | 入力内容 |
|---|---|
| 許可ポリシー | CloudWatchAgentServerPolicy |
入力が完了しましたら、次へをクリックします
名前、確認、および作成
| 設定項目 | 入力内容 |
|---|---|
| ロール名 | sample-ec2-role |
| 説明 | Allows EC2 instances to call AWS services on your behalf. |
入力が完了しましたら、ロールを作成をクリックします
手順2:EC2のIAMロールを変更
EC2管理画面 → インスタンス選択 → 「アクション」→「セキュリティ」→「IAM ロールの変更」
| 設定項目 | 入力内容 |
|---|---|
| IAMロール | sample-ec2-role |
入力が完了しましたら、IAM ロールの更新をクリックします
手順2:CloudWatchAgentのインストール
CloudWatchAgentのインストール
sudo dnf install amazon-cloudwatch-agent
インストールできたか確認
$ dnf info amazon-cloudwatch-agent
Last metadata expiration check: 1 day, 17:24:20 ago on Fri May 16 09:28:58 2025.
Installed Packages
Name : amazon-cloudwatch-agent
Version : 1.300052.1
Release : 1.amzn2023
Architecture : x86_64
Size : 353 M
Source : amazon-cloudwatch-agent-1.300052.1-1.amzn2023.src.rpm
Repository : @System
From repo : amazonlinux
Summary : Amazon CloudWatch Agent
License : MIT
Description : This package provides daemon of Amazon CloudWatch Agent
手順3:Nginx、Dockerのファイルにログ出力設定を追記
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
nginx:
volumes:
- /var/log/sample-nginx:/var/log/nginx
入力が完了しましたら、Dockerを起動します
手順4:CloudWatchAgent設定ファイルを作成
/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.jsonに設定ファイルを作成します
{
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "/var/log/sample-nginx/access.log",
"log_group_name": "/ec2/sample-nginx/access",
"log_stream_name": "{instance_id}-{hostname}",
"timezone": "UTC"
},
{
"file_path": "/var/log/sample-nginx/error.log",
"log_group_name": "/ec2/sample-nginx/error",
"log_stream_name": "{instance_id}-{hostname}",
"timezone": "UTC"
}
]
}
}
},
"metrics": {
"metrics_collected": {
"mem": {
"measurement": [
"mem_used_percent"
],
"metrics_collection_interval": 60
},
"disk": {
"resources": [
"/"
],
"measurement": [
"disk_used_percent"
],
"metrics_collection_interval": 60
}
},
"append_dimensions": {
"InstanceId": "${aws:InstanceId}"
}
}
}
また、上記のファイルはCloudWatchAgentを実行しますと、ファイルが消えますので、複製しておくと便利です
cp /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent_cp.json
CloudWatchAgentを起動します
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
CloudWatch Logsで確認します
AWS マネジメントコンソール > CloudWatch > Logs > /ec2/sample-nginx/access、/ec2/sample-nginx/errorにログが出ていれば成功です。
手順5:CloudWatchの確認
CloudWatchの管理画面 → 「すべてのメトリクス」 → 「CWAgent」 → 「InstanceId」

Disk使用率やメモリ使用率などがメトリクス一覧に表示されます
設定作業は以上です
手順6:うまく動かない場合
agentが起動しないなどのトラブルが起きたときは、下記のログの確認をします。
/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log
手順7:ロググループの保持期間の修正
「ロググループの選択」 → 「アクション」 → 「保持設定を編集」 → 「1週間で保存」
手順8:アラーム設定
アラームのメトリクス
- 「Logs」 → 「ロググループメトリクス」 → 「/ec2/sample-nginx/accessのIncomingBytes」
- アクセス件数の急増を検知
- 5分間の合計が5000件以上の場合通知
- アプリケーション停止の可能性を検知
- 5分間の合計が0だった時が連続2回の場合通知
- アクセス件数の急増を検知
- 「Logs」 → 「ロググループメトリクス」 → 「/ec2/sample-nginx/accessのIncomingLogEvents」
- アクセス件数の急増を検知
- 5分間の合計が5000件以上の場合通知
- アプリケーション停止の可能性を検知
- 5分間の合計が0だった時が連続2回の場合通知
- アクセス件数の急増を検知
- 「Logs」 → 「ロググループメトリクス」 → 「/ec2/sample-nginx/errorのIncomingLogEvents」
- アクセス件数の急増を検知
- 5分間の合計が10件以上の場合通知
- アクセス件数の急増を検知
- 「CWAgent」 → 「InstanceId」 → 「mem_used_percent」
- メモリ使用率平均90%以上が3分間続いた場合通知
- 「CWAgent」 → 「InstanceId」 → 「disk_used_percent」
- CPU使用率平均80%以上が5分間続いた場合通知
2つのCloudWatchのアラームを作ります。
下記はそのうちの1つです。
メトリクスと条件の指定
メトリクス
| 設定項目 | 入力内容 |
|---|---|
| 名前空間 | CWAgent |
| メトリクス名 | mem_used_percent |
| 統計 | 平均値 |
| 期間 | 3分 |
条件
| 設定項目 | 入力内容 |
|---|---|
| しきい値の種類 | 静的 |
| mem_used_percent が次の時... | 以上 |
| ... よりも | 90 |
入力が完了しましたら、次へをクリックします
アクションの設定
通知
| 設定項目 | 入力内容 |
|---|---|
| アラーム状態トリガー | アラーム状態 |
| 次の SNS トピックに通知を送信 | 新しいトピックの作成 |
| 新規トピックの作成中... | alarm-sample |
| 通知を受け取る E メールエンドポイント … | メールアドレス |
入力が完了しましたら、トピックの作成、次へをクリックします
名前と説明を追加
名前と説明
| 設定項目 | 入力内容 |
|---|---|
| アラーム名 | sample-memory-usage-high-gt90 |
入力が完了しましたら、次へをクリックします
プレビューと作成
以上で問題がない場合、アラームの作成をクリックします
まとめ
Amazon Linux 2023上のEC2インスタンスでDockerコンテナのNginxログとシステムメトリクスをCloudWatchに送信し、アラーム通知まで一貫して設定できました