1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Amazon Linux 2023にCloudWatch Agentを導入してDocker上にあるNginxログを可視化し、アラーム作成をする方法

1
Posted at

環境

  • 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のファイルにログ出力設定を追記

Nginxのファイル
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
docker-compose.yaml
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」
image.png
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に送信し、アラーム通知まで一貫して設定できました

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?