プライベートサブネット内の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をインストールします。


<h1>dnf install amazon-cloudwatch-agent</h1>

 

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

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


<h1>dnf install collectd</h1>

<h1>systemctl start collectd</h1>

<h1>systemctl enable collectd</h1>

4.Cloudwatch Agentを開始します。


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

<h1>systemctl start amazon-cloudwatch-agent</h1>

<h1>systemctl enable amazon-cloudwatch-agent</h1>

 

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に格納する

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

NHN テコラスの採用情報はこちら

X (Twitter) をフォローする

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

Recommends

こちらもおすすめ

X (Twitter) をフォローする

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

Special Topics

注目記事はこちら