今回のゴール
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を選択してメモリの使用率が表示された事を確認できました。
