カテゴリー
AWS Cloud Watch EC2 System Manager(SSM)

AWS SystemManagerを使用したCloudWatch AgentによるEC2の監視

今回のゴール

EC2のデフォルトのCloudWatchの設定では、CPU負荷・ネットワークトラフィック等のハイパーバイザーから取得できる内容のみとなります。
OSでしか取得できない情報を取得するにはCloudWatch Agentをインストールします。

今回は複数のEC2インスタンスにエージェントをインストールすることを想定しています。

CloudWatchAgentの設定をSSMのパラメータストアーに保存して、SSM経由で設定できるようにしますので、SSMのパラメータストアーに書き込みできる管理者用のIAMロールも作成します。

この管理者用のロールは設定するEC2インスタンスにのみアタッチしてください。(書き込みする時のみアタッチするのがよいです。)

IAMロールの作成

CloudWatch エージェントをインストールするEC2用のIAMロールの作成

インスタンスから情報を読み取り、CloudWatch に書き込むアクセス許可を付与するロールを作成します。

このロールはCloudWatchエージェントをインストールする全てのEC2インスタンスにアタッチします。

※今回は省略しますが、SSMのrunコマンドの出力をS3に保存するには、該当のS3に書き込み権限(PutObject)のポリシーをロールにアタッチしてください。

IAMメニューよりロールの作成ボタンをクリックします。

EC2を選択します。

“CloudWatchAgentServerPolicy”と

“AmazonSSMManagedInstanceCore”にチェックをつけます。

[ロール名]:CloudWatchAgentServerRole(任意)

パラメータストアに書き込む管理者用のIAMロールの作成

“CloudWatchAgentAdminPolicy”と

“AmazonSSMManagedInstanceCore”にチェックをつけます。

[ロール名]:CloudWatchAgentAdminRole(任意)

CloudWatchAgentのインストール

1台のEC2インスタンスにCloudWatchAgentをインストールして、設定ファイルを作成します。
その設定ファイルをSSMパラメータストアに保存します。

管理者用のIAMロールのアタッチ

SSMパラメータストアに保存しますので、EC2インスタンスに管理者用のIAMロールを割り当てます。

EC2サービスより、インスタンスを選択して、右クリックより「セキュリティー」ー「IAMロールの変更」をクリックし、先ほど登録したロール(CloudWatchAgentServerRole、CloudWatchAgentAdminRole)を選択します。

CloudWatch Agentのインストール

SystemManagerページの「Run Command」-「Run Command」をクリックします。

【コマンドドキュメント】:AWS-ConfigureAWSPackage

【コマンドのパラメータ】
[Name]:AmazonCloudWatchAgent

【ターゲット】
“インスタンスを手動で選択する”を選択してEC2インスタンスを選択します。
※IAMロールをアタッチしてから、ターゲットにEC2インスタンスが表示されるまでに暫く時間がかかりました。表示されない時はしばらく時間をおいてください。

【出力オプション】
“リストからバケット名を選択します”を選択してバケット名を指定します。

※すでに書きましたが、SSMのrunコマンドの出力をS3に保存するには、該当のS3に書き込み権限(PutObject)が必要です。

処理が正常に完了しました。

CloudWatchAgentの設定ファイルを作成してパラメータストアに保存

SSHでEC2に接続して設定パラメータを作成します。下記実行すると対話形式で設定ファイルを作成できます。

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

StatsDデーモンを使用しないので2を選択しました。

Do you want to turn on StatsD daemon?
1. yes
2. no
default choice: [1]:
2

CollectD使用しないので2を選択
※使用する場合はあらかじめlinuxにインストールしないとSSMで設定時にエラーとなります。

Do you want to monitor metrics from CollectD?
1. yes
2. no
default choice: [1]:
2

“2. Standard”を選択しました。

Which default metrics config do you want?
1. Basic
2. Standard
3. Advanced
4. None
default choice: [1]:
2

[Log file path]:/var/log/messages

Log file path:
/var/log/messages

“2. no”を選択しました。

Do you want to specify any additional log files to monitor?
1. yes
2. no
default choice: [1]:
2

下記のメッセージが表示されると設定ファイルは作成完了です。
引き続きパラメータストアの設定に進みます。

Please check the above content of the config.
The config file is also located at /opt/aws/amazon-cloudwatch-agent/bin/config.json.
Edit it manually if needed.

SSMパラメータストアに保存するか聞いてきますので、デフォルトの1(yes)を選択します。

Do you want to store the config in the SSM parameter store?
1. yes
2. no
default choice: [1]:

パラメータストアの名前はデフォルトのままとしました。

What parameter store name do you want to use to store your config? (Use 'AmazonCloudWatch-' prefix if you use our managed AWS policy)
default choice: [AmazonCloudWatch-linux]

以降、全てデフォルトで進めました。

作成が終了すると、SSMのパラメータストアに「AmazonCloudWatch-linux」という名前で設定パラメータがSSMデータストアに保存されます。

管理者用のIAMロールのデタッチ

SSMのパラメータストアに保存は終わりましたので、管理者用のIAMロールをCloudWatchAgent使用する用のIAMロール(CloudWatchAgentServerRole)に変更します。

CloudWatch Agentの設定

SSMのRun Commandを実行してCloudWatchAgentの設定をEC2インスタンスに適用します。

SystemManagerページの 、[Run Command]-[Run Command]を選択します。

[コマンドドキュメント]:AmazonCloudWatch-ManageAgent

[Optional Configuration Location]:AmazonCloudWatch-linux

【ターゲット】
“インスタンスを手動で選択する”を選択してEC2インスタンスを選択します。

【出力オプション】
“リストからバケット名を選択します”を選択してバケット名を指定します。

完了しました。

確認

メトリクスが記録されるまで少し時間がかかります。

CloudWatchサービスの[メトリクス]-[CWAgent]に下記の4つのディメンションが作成されております。

  • ImageId,InstanceId,InstanceType,device,fstype,path(Disk)
  • ImageId,InstanceId,InstanceType,cpu(CPU)
  • ImageId,InstanceId,InstanceType,name(Disk I/O)
  • ImageId,InstanceId,InstanceType(Memory)

ImageId,InstanceId,InstanceTypeを選択してmem_userd_percentを選択してメモリの使用率が表示された事を確認できました。