プライベートサブネット内のEC2インスタンスにAmazon CloudWatch Agentを導入し、Amazon CloudWatchで情報を取得する。

AWS

2024.12.6

Topics

この記事はNHN テコラス Advent Calendar 2024の6日目の記事です。

はじめに

こんにちは、eunseoです!

本記事では、AWS Session Managerを利用して、プライベートサブネット内にのEC2インスタンスにCloudwatch Agentをインストールし、そのログ及びメトリクスをAmazon CloudWatchで取得する方法について紹介します。

構成図

今回の構成図となります。
まず、プライベートサブネット内のEC2インスタンスからCloudWatchにログを送信するために、CloudWatch用のVPCエンドポイントを作成します。
次に、SSM(Systems Manager)を使用してEC2インスタンスに接続し、インスタンス内にCloudWatch Agentをインストールします。
これにより、ログはVPCエンドポイントを通じてCloudWatchに送信されることができます。

事前準備

・SSMでAmazon EC2にアクセスするまでの手順は以下の記事を参考してください。

関連記事
AWS Systems Manager Session Managerを利用してプライベートにあるAmazon EC2環境に接続する

・インスタンスに以下のポリシーをアタッチします。(IAMロール)
CloudWatchAgentServerPolicy または CloudWatchAgentAdminPolicy

また、上記の記事の内容だけだと、SSMに接続ができない場合もあるため、以下のエンドポイントも追加します。
com.amazonaws.ap-northeast-1.s3 (ゲートウェイのタイプ)

手順

大まかな手順としては以下の流れです。

  1. VPCエンドポイントを作成
  2. CloudWatch Agentをインストール
  3. CloudWatchで確認

1.Cloudwatch用のエンドポイントを作成

CloudWatch AgentがCloudWatchへアクセスするために、VPCエンドポイントを設定します。
以下は、CloudWatchへのアクセスおよびログ出力に必要なサービスです。

・com.amazonaws.ap-northeast-1.monitoring:Cloudwatchのエンドポイント
・com.amazonaws.ap-northeast-1.ec2:EC2のエンドポイント
・com.amazonaws.ap-northeast-1.logs:Cloudwatch Logsのエンドポイント

 

VPCエンドポイントを作成① – monitoring

1.VPCエンドポイント → 「エンドポイントを作成」をクリックします。

2.名前を入力し、「AWSのサービス」を選択します。

3.必要となるエンドポイントに対応するサービス名を検索し、選択します。

4.自分のVPCを選択し、DNS名を有効化します。

※DNS名を有効化ができない場合
自分のVPCに移動し、「VPCの設定を編集」で「DNS設定」が有効化になっていることを確認します。

5.対象のインスタンスがあるプライベートサブネットを選択します。

6.事前準備で作成したエンドポイント用のセキュリティグループを選択します。

7.「エンドポイントを作成」をクリックします。

VPCエンドポイントを作成② – ec2

VPCエンドポイントを作成③ – logs

「VPCエンドポイントを作成① – monitoring」手順を繰り返しします。

2.CloudWatch Agentインストール

1.SSMを利用して、サーバーへ接続します。

2.Cloudwatch Agentをインストールします。

# dnf install amazon-cloudwatch-agent

 

Amazon Linux 以外の場合は、wgetコマンドやcurlコマンドを使用して、以下のリンクからパッケージをダウンロードし、インストールします。
公式ドキュメントのダウンロードリンク

3.Collectdをインストールします。

# dnf install collectd

# systemctl start collectd
# systemctl enable collectd

4.Cloudwatch Agentを開始します。

# sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c ssm:AmazonCloudWatch-linux

# systemctl start amazon-cloudwatch-agent
# systemctl enable amazon-cloudwatch-agent

 

3.Cloudwatchの出力確認

  1. Amazon Cloudwatchにコンソールに移動します。
  2. 「メトリクス」の項目で「すべてのメトリクス」をクリックします。
  3. 「CWAgent」を選択し、InstanceIdで自分のインスタンス名を検索すれば、確認できます。

 

まとめ

本記事では、AWS Session Managerを利用して、プライベートサブネット内のEC2インスタンスからログをAmazon CloudWatchに出力する方法について紹介しました。

なお、プライベートサブネット内にのEC2インスタンスのログをAmazon S3に保存する方法については、以下の記事をご覧ください。

関連記事
AWS Systems Manager Session Managerの操作ログをAmazon S3に格納する

最後まで読んでいただきありがとうございます!

テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!

Recommends

こちらもおすすめ

Special Topics

注目記事はこちら