初めに
CloudWatchでディスク使用率とメモリ使用率を収集しアラーム設定する要件がありました。
標準では収集できずカスタムメトリクスとして収集される項目になります。
カスタムメトリクスはCloudWatchAgentをEC2にインストールすることで収集されます。
本手順で出来る事
・EC2のディスク空き容量率、メモリ使用率(コミット済み)がカスタムメトリクスとしてCloudWatchで収集できる。
本手順で触れない事
・EC2やVPC、サブネットなどのリソース作成
・CloudWatchアラーム、SNSトピックの作成
・EC2をSystemsManagerのマネージドノードにするための設定
環境
対象EC2のサブネット:Private
OS:WindowsServer 2インスタンス(EC2-a、EC2-c)
パラメーターストア名:AmazonCloudWatch-windows
収集するカスタムメトリクス
LogicalDisk⇒"% Free Space"(ディスク空き容量率)
Memory⇒"% Committed Bytes In Use"(メモリ使用率(コミット済))
前提、備考など
・EC2のディスク使用率、メモリ使用率、コアごとのCPU使用率を収集するためにはEC2へCloudWatch Agentをインストールする必要がある。
・CloudWatch AgentのインストールはCLIかSystemsManager(SSM)のRunCommandにより可能。ここではRunCommandによる手法を記載する。
・RunCommandを使用するためにEC2をマネージドノードにする必要がある。マネージドノードにする手順は以下を参照。
※PrivateSubnetのインスタンスをマネージドノードにする場合、NAT GWかVPCエンドポイントの設定を行いEC2からSSMサービスにアクセス出来るようにする必要がある。
・CloudWatch Agentの設定ファイルの保存先は2種類ある。
①インスタンスのローカルディスク上⇒インスタンスごとに設定ファイルを配置しエージェントの起動時に設定ファイルのパスを指定する必要がある。
②SSMのパラメーターストア⇒エージェントの起動時にパラメータストアのARNを指定するか、RunCommandでパラメーターストアを指定し起動することができる。
RunCommandでインスタンス上の所定ディレクトリに設定ファイルが自動作成されるため、設定ファイルの手動配置は不要。
[設定ファイルが作成されるディレクトリ]
Windows:C:\ProgramData\Amazon\AmazonCloudWatchAgent\Configs
Linux:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d
・カスタムメトリクスで取集できるのは、Windowsの場合パフォーマンスモニタで確認できる項目が主となる。
手順概要
1.CloudWatch Agentによるメトリクス収集を許可するため、必要なIAMポリシーを付与したIAMロールをEC2へ割り当て
2.RunCommandによるCloudWatch Agentのインストール
3.CloudWatch Agentの設定ウィザードを起動し、パラメーターストアへのパラメータ登録
4.RunCommandによるCloudWatch Agentの起動
5.CloudWatchでカスタムメトリクスの確認
1.CloudWatch Agentによるメトリクス収集を許可するため、必要なIAMポリシーを付与したIAMロールをEC2へ割り当て
[CloudWatchAgentServerPolicy]ポリシー・・・CloudWatchへのメトリクス送信が許可される
[CloudWatchAgentAdminPolicy]ポリシー・・・EC2からパラメータストアへの書き込みが許可される
2.RunCommandによるCloudWatch Agentのインストール
SystemsManager⇒RunCommand⇒[Run Command]ボタンをクリック
コマンドドキュメント:AWS-ConfigureAWSPackage
ドキュメントのバージョン:デフォルト
Action:Install
Installation Type:Uninstall and reinstall
Name:AmazonCloudWatchAgent
ersion:空白
Additional Arguments:空白
ターゲット:エージェントをインストールしたいEC2を任意の方法で指定
その他項目:デフォルト
※実行結果が失敗の場合、NAT GWもしくはVPCエンドポイントが適切に設定されているか確認
3.CloudWatch Agentの設定ウィザードを起動し、パラメーターストアへのパラメータ登録
EC2へ接続し以下のCloudWatch Agent設定ウィザードを実行
C:\Program Files\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-config-wizard.exe
※今回の手順ではパラメータストアへの設定登録のためにウィザードを使用する為、すべてのEC2で実行する必要はなく1台のEC2で実行する。
================================================================
= Welcome to the Amazon CloudWatch Agent Configuration Manager =
= =
= CloudWatch Agent allows you to collect metrics and logs from =
= your host and send them to CloudWatch. Additional CloudWatch =
= charges may apply. =
================================================================
On which OS are you planning to use the agent?
1. linux
2. windows
3. darwin
default choice: [2]:2
OS選択
Trying to fetch the default region based on ec2 metadata...
Are you using EC2 or On-Premises hosts?
1. EC2
2. On-Premises
default choice: [1]:1
EC2かオンプレか
Do you want to turn on StatsD daemon?
1. yes
2. no
default choice: [1]:2
StatsDを有効にするかどうか。有効にするとアプリケーションからメトリクスが収集できる。
StatsDはOSSのレポーティングツール
Do you have any existing CloudWatch Log Agent configuration file to import for migration?
1. yes
2. no
default choice: [2]:2
CloudWatch Agentの設定ファイル(JSON)をインポートするかどうか。
今回はパラメータストアを利用する為JSONはインポートしない。
Do you want to monitor any host metrics? e.g. CPU, memory, etc.
1. yes
2. no
default choice: [1]:1
CPUやメモリなどのメトリクスを監視するかどうか。
Do you want to monitor cpu metrics per core?
1. yes
2. no
default choice: [1]:2
CPUコアごとの使用率を収集するかどうか。
Do you want to add ec2 dimensions (ImageId, InstanceId, InstanceType, AutoScalingGroupName) into all of your metrics if the info is available?
1. yes
2. no
default choice: [1]:1
メトリクスのディメンションとしてImageID、InstanceId、InstanceType、AutoScalingGroupNameを追加するかどうか。
Do you want to aggregate ec2 dimensions (InstanceId)?
1. yes
2. no
default choice: [1]:1
メトリクスをInstanceIDで集約するかどうか。
Would you like to collect your metrics at high resolution (sub-minute resolution)? This enables sub-minute resolution for all metrics, but you can customize for specific metrics in the output json file.
1. 1s
2. 10s
3. 30s
4. 60s
default choice: [4]:4
メトリクスの収集間隔について。
Which default metrics config do you want?
1. Basic
2. Standard
3. Advanced
4. None
default choice: [1]:1
メトリクスの収集レベルについて。
Current config as follows:
{
"metrics": {
"aggregation_dimensions": [
[
"InstanceId"
]
],
"append_dimensions": {
"AutoScalingGroupName": "${aws:AutoScalingGroupName}",
"ImageId": "${aws:ImageId}",
"InstanceId": "${aws:InstanceId}",
"InstanceType": "${aws:InstanceType}"
},
"metrics_collected": {
"LogicalDisk": {
"measurement": [
"% Free Space"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"Memory": {
"measurement": [
"% Committed Bytes In Use"
],
"metrics_collection_interval": 60
}
}
}
}
Are you satisfied with the above config? Note: it can be manually customized after the wizard completes to add additional items.
1. yes
2. no
default choice: [1]:1
設定内容の確認。JSON形式で表示される。
Do you want to monitor any customized log files?
1. yes
2. no
default choice: [1]:2
個別のログファイルを追加でメトリクスとして監視するかどうか。今回は不要。
Do you want to monitor any Windows event log?
1. yes
2. no
default choice: [1]:2
WindowsEventLogを監視するかどうか。今回は不要。
Saved config file to config.json successfully.
Current config as follows:
{
"metrics": {
"aggregation_dimensions": [
[
"InstanceId"
]
],
"append_dimensions": {
"AutoScalingGroupName": "${aws:AutoScalingGroupName}",
"ImageId": "${aws:ImageId}",
"InstanceId": "${aws:InstanceId}",
"InstanceType": "${aws:InstanceType}"
},
"metrics_collected": {
"LogicalDisk": {
"measurement": [
"% Free Space"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"Memory": {
"measurement": [
"% Committed Bytes In Use"
],
"metrics_collection_interval": 60
}
}
}
}
Please check the above content of the config.
The config file is also located at config.json.
Edit it manually if needed.
Do you want to store the config in the SSM parameter store?
1. yes
2. no
default choice: [1]:1
SSMパラメーターストアに設定内容を保存するかどうか。
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-Windows]AmazonCloudWatch-Windows
Trying to fetch the default region based on ec2 metadata...
Which region do you want to store the config in the parameter store?
default choice: [ap-northeast-1]ap-northeast-1
Which AWS credential should be used to send json config to parameter store?
1. xxxxxxxxxxxxxxxx(From SDK)
2. Other
default choice: [1]:1
パラメータストアに保存する際のクレデンシャルを指定。基本的にはデフォルトでOK。
Please press Enter to exit...
完了
3.RunCommandによるCloudWatch Agentの起動
SystemsManager⇒RunCommand⇒[Run Command]ボタンをクリック
コマンドドキュメント:AmazonCloudWatch-ManageAgent
ドキュメントのバージョン:デフォルト
Action:Configure
Mode:EC2
Optional Configuration Source:ssm
Optional Configuration Location:AmazonCloudWatch-Windows(エージェント設定で作成したパラメータストア名)
Optional Open Telemetry Collector Configuration Source:ssm
Optional Restart:yes
ターゲット:エージェントを起動したいEC2を任意の方法で指定
その他項目:デフォルト
⇒実行をクリック
※実行結果が失敗の場合、パラメータストアの記述に誤りがないか確認
※Actionについて
Configure:CloudWatchAgentの設定ファイルを、指定したパラメータストアの内容で上書きし設定ファイルを元に起動用のtomlファイルを作成
Configure(append):既存のCloudWatchAgentの設定ファイルに、指定したパラメータストアの内容を追記(重複確認やマージ機能はない)し、設定ファイルを元に起動用のtomlを再作成
Configure(remove):既存のCloudWatchAgentの設定ファイルを削除し、デフォルトの設定ファイルを作成する。デフォルトの設定ファイルを元に起動用のtomlファイルを再作成
Start:Configureで作成された起動用のtomlでCloudWatchAgentを実行
Status:CloudWatchAgentのステータスを表示
Stop:CloudWatchAgentを停止
4.CloudWatchでカスタムメトリクスの確認
CloudWatch⇒すべてのメトリクス⇒CWAgent
カスタムメトリクスの収集が開始されていることを確認
参考