EC2 の next.js サーバを CloudWatch !!!

EC2のNext.jsサーバーをCloudWatchで監視する方法

1. 設定方法

Step 1: すでにEC2インスタンスに付いているロールを探して、そのロールに追加でアタッチします。

1. ロールに移動して「許可を追加」ボタンをクリックします。
2 .「CloudWatchAgentServerPolicy」を検索して追加します。

Step 2: CloudWatch Agentのインストール(Amazon Linux 2 / AL2023)

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

Step 3: 設定ファイルの作成

Wizard を用いて設定する場合

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

Step 3: 設定ファイルの作成

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/

Step 4: Agentの起動

# 設定を適用して起動
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

● AWSコンソール、CloudWatchの画面から確認する。

CloudWatch > すべてのメトリクス

にアクセスして

カスタム名前空間に「CWAgent」があれば成功です。


2. 推奨メトリクス

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プロセス監視も追加する場合

PM2のメトリクスをCloudWatchに送るには、pm2-cloudwatch などのモジュールか、カスタムメトリクススクリプトを使う方法があります。ただしこれはエージェントとは別の仕組みになります。必要であれば別途説明します。


まとめ

  1. IAMロール(CloudWatchAgentServerPolicy)をEC2にアタッチ
  2. amazon-cloudwatch-agent をインストール・設定
  3. メモリ・CPU・ディスク・ネットワーク・ログを収集
  4. CloudWatch Alarms でメモリ80%超えなどにアラートを設定

EC2のデフォルトではメモリとディスクは取得できないため、Agentの導入が必須です。

添付ファイル1
02.png ( 34.0 KBytes ) ダウンロード
添付ファイル2
01.png ( 99.9 KBytes ) ダウンロード
No.2739
04/22 16:47

edit

添付ファイル