EC2でメモリ使用率が取れない?CloudWatch Agent設定手順【AL2023】

AWS

EC2インスタンスの監視を設定した際、CloudWatchのメトリクス一覧にメモリ使用率が表示されず困っていませんか。標準のCloudWatchメトリクスでは、OS内部の情報であるメモリやディスクの使用率は取得できません。サーバーがメモリ不足で停止するトラブルを防ぐには、CloudWatch Agentの導入が必要です。この記事では、Amazon Linux 2023を対象に、最小構成のJSONファイルを使ってメモリとディスクの使用率を監視し、アラームでメール通知を受け取るまでの最短手順を解説します。

なぜEC2の標準メトリクスではメモリ使用率が取れないのか

筆者が過去に運用していたWordPressサイトで、アクセス集中に伴いサーバーが前触れなく突然停止したことがあります。原因を調査したところ、CloudWatchのCPU使用率は低いままであったにもかかわらず、メモリが完全に枯渇していたことが判明しました。

AWSの標準メトリクスはハイパーバイザー側からインスタンス外側を監視するため、CPUやネットワークトラフィックなどは取得できますが、OS内部のメモリやディスク使用率は把握できません。これらを監視するには、OS内部にエージェントを常駐させ、カスタムメトリクスとしてデータを送信する必要があります。

CPU使用率の監視とアラーム通知の設定方法については、こちらの記事を参照してください。

CloudWatch Agentの導入手順

CloudWatch Agentの導入は、IAMロールの準備からアラーム設定までの一連のステップを順番に進めます。全体像を事前に把握しておくと、設定作業の抜け漏れを防ぎやすくなります。

IAMロールを作成してEC2にアタッチする

インスタンスがCloudWatchへメトリクスを送信するためには、適切な権限を持つIAMロールが必要です。AWSマネージドポリシーである CloudWatchAgentServerPolicy を付与した専用のロールを作成し、対象のEC2インスタンスにアタッチしてください。

IAMロールの具体的な作成手順や権限付与の詳細は、こちらで解説しています。

エージェントをインストールする

IAMロールの設定が完了したら、SSH接続を利用してEC2インスタンスへログインします。

Amazon Linux 2023の環境では、以下のコマンドを実行することでCloudWatch Agentを手動インストールできます。

sudo dnf install amazon-cloudwatch-agent -y

なお、AWS Systems Manager(SSM)やマネジメントコンソールを活用して自動インストールを行う方法もありますが、今回は確実かつ軽量なコマンドラインでの導入手順を採用しています。

設定ファイル(JSON)を作成する

インストール後は、エージェントが何を監視しどこに送るかを定義するJSONファイルを作成します。今回は設定が複雑になりがちなウィザードを使わず、メモリとディスク使用率の取得に特化した最小構成のJSONファイルを用意しました。

以下の内容を /opt/aws/amazon-cloudwatch-agent/etc/cloudwatch-agent.json として保存してください。

{
"agent": {
    "metrics_collection_interval": 60,
    "run_as_user": "cwagent"
  },
  "metrics": {
    "metrics_collected": {
      "disk": {
        "measurement": [
          "disk_used_percent"
        ],
        "metrics_collection_interval": 60,
        "resources": [
          "/"
        ]
      },
      "memory": {
        "measurement": [
          "mem_used_percent"
        ],
        "metrics_collection_interval": 60
      }
    },
    "append_dimensions": {
      "InstanceId": "${aws:InstanceId}"
    }
  }
}

append_dimensions に InstanceId を指定することで、複数インスタンスを運用している場合でもメトリクスが混同せず識別可能になります。

エージェントを起動して状態を確認する

作成した設定ファイルを読み込ませて、CloudWatch 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/cloudwatch-agent.json -s

起動が完了したら、サービスが正しく稼働しているかステータスを確認します。

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a status

実行結果に “status”: “running” と表示されていれば、エージェントは正常に起動しています。”stopped” と表示された場合は、起動コマンドや設定ファイルを見直してください。

CloudWatchでメトリクスを確認し、アラームを設定する

エージェントの起動後数分が経過したら、AWSマネジメントコンソールからCloudWatchの画面を開きます。メトリクスの「すべてのメトリクス」から「CWAgent」という名前空間が出現していることを確認してください。

mem_used_percent や disk_used_percent の指標を選択し、メモリ使用率が80%を超えた段階で通知を行うようなアラームを作成します。通知先にはAmazon SNSを利用し、運用のメールアドレスを指定することで、障害発生時に自動でアラームメールを受け取ることが可能です。

メトリクスが表示されないときのチェックポイント

設定を一通り終えたにもかかわらず、CloudWatch上に名前空間やデータが現れない場合は、次の項目を順番に見直してみてください。

– 対象のEC2インスタンスに CloudWatchAgentServerPolicy がアタッチされたIAMロールが正しく適用されているか

– エージェントのステータス確認コマンドで、プロセスが確実に稼働中(active)になっているか

– 作成したJSONファイルの構文に、閉じカッコの抜けやカンマの誤りがないか

多くの場合は、IAM権限の不足かJSONファイルの記述ミスが原因となっています。

カスタムメトリクスの料金の注意点

CloudWatch Agentを通じて収集されるメモリやディスク使用率は、AWSのカスタムメトリクスとして扱われます。カスタムメトリクスは、メトリクス名とディメンションの組み合わせごとに1つと数えられ、その数に応じて課金されます。今回の設定なら、1台のEC2につきメモリとディスクの2つです。無料で使える数や単価は、公式の料金ページで確認してください。

InstanceIdなどのディメンションが付与されたメトリクスは、インスタンス数や監視項目が増えるにつれて月額コストに影響を与えることがあります。無駄なコストを発生させないための管理手法については、こちらの記事で解説しています。

まとめ

今回は、Amazon Linux 2023環境のEC2に対してCloudWatch Agentを最小構成で導入し、メモリおよびディスク使用率の監視とアラーム通知を実現する手順を解説しました。

標準メトリクスではカバーできないOS内部のリソース状態を正確に把握することで、サーバーの突然のダウンを防ぐ堅牢なインフラ環境を構築できます。今回紹介した最小限のJSON設定や起動コマンドを参考に、実際のサーバー監視へ取り入れてみてください。

AWSをさらに深く学びたい方には 以下の書籍がおすすめです。

「※本記事にはアフィリエイトリンクが含まれています」

AWSの基礎から実践まで体系的に 学べる一冊です。

コメント

タイトルとURLをコピーしました