参考ドキュメント
本記事では、以下のドキュメントに記載していることを噛み砕いて、画面付きで記載します。
- コマンドラインを使用した CloudWatch エージェントのインストール - Amazon CloudWatch
- ウィザードを使用して CloudWatch エージェント設定ファイルを作成する - Amazon CloudWatch
対象読者
EC2 の Windows Server 2022 でメモリ使用率を CloudWatch のメトリクスに出して、確認したい方。なるべく簡単に、 GUI でセットアップしたい方。
前提
[ネットワーク構成] EC2 が CloudWatch のサービスエンドポイントと通信できることを確認します。
EC2 が インターネットゲートウェイ、NAT ゲートウェイ、または VPC エンドポイントを利用して、以下のエンドポイントに通信できることを確認します。
CloudWatch のメトリクス送信は定常的に行うため、VPC エンドポイントの設置がオススメです。
- monitoring.<リージョン>.amazonaws.com
- 東京リージョンの例:monitoring.ap-northeast-1.amazonaws.com
参考 1:Amazon CloudWatch エンドポイントとクォータ - AWS 全般のリファレンス
参考 2:インターフェイス VPC エンドポイントでの CloudWatch および CloudWatch Synthetics の使用 - Amazon CloudWatch
[IAM 権限] EC2 のインスタンスプロファイルで利用する IAM Role に CloudWatchAgentServer ポリシーをアタッチします。
EC2 のインスタンスプロファイルで利用する IAM Role に CloudWatchAgentServer ポリシーをアタッチします。
手順
CloudWatch Agent を Windows Server 2022 にインストールします。
Edge を起動し、以下の URL からダウンロードします。
ターミナル(Powershell)で、ダウンロードフォルダ(Downloads)に移動します。
以下のコマンドを実行します。
cd Downloads msiexec /i amazon-cloudwatch-agent.msi
インストーラが「完了」などは表示せず、消える形でインストールが終わります。
私がやったときには、以下の状態でインストーラが消えました。
インストーラが消え、インストールが終わると、サービス一覧で「AmazonCloudWatchAgent」が「停止」状態になります。
CloudWatch Agent の設定ファイルを作成します。
ターミナル(Powershell)で、以下のコマンドを実行します。
cd "C:\Program Files\Amazon\AmazonCloudWatchAgent" .\amazon-cloudwatch-agent-config-wizard.exe
質問に答えて行きます。 基本はデフォルトで OK です。気になる箇所や、変更する箇所は下に画像付きで記載します。
メモリのみ取得したいので、デフォルトの Basic で大丈夫です。
参考:ウィザードを使用して CloudWatch エージェント設定ファイルを作成する - Amazon CloudWatch
メモリのみ取得するので、ログ系と X-Ray トレースの取得はしないように、 2 を選択します。
SSM のパラメータストアに config を置いてもいいものの、一旦はローカルに置くため 2 を選択します。(SSM のパラメータストアに配置するには EC2 に SSM パラメータストアへの IAM 権限が必要です。)
以下の場所に config.json ができます。
- C:\Program Files\Amazon\AmazonCloudWatchAgent
中身は以下のようになりました。(メモリのみなので StatsD は不要だったかもと思いつつ・・まあいいかと。🐱)
metrics_collection_interval
が 60 なので、60 秒間隔でメモリの使用率を取得します。この config.json を書き換えて、10 秒、30 秒、1 秒に変更することもできます。
{ "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 }, "statsd": { "metrics_aggregation_interval": 60, "metrics_collection_interval": 10, "service_address": ":8125" } } } }
CloudWatch Agent を 起動します。
最後尾の「file:」の後に config.json のパスを指定して、以下の起動コマンドを実行します。
& "C:\Program Files\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-ctl.ps1" -a fetch-config -m ec2 -s -c file:"C:\Program Files\Amazon\AmazonCloudWatchAgent\config.json"
なお、config.json を書き換えた場合にも本コマンドで再起動可能です。
起動できました。 失敗時の切り分け用に、起動時のバリデーションログや、エージェントログが以下に存在します。
- C:\ProgramData\Amazon\AmazonCloudWatchAgent\Logs\
CloudWatch に メモリのメトリクスが出ていることを確認する
CloudWatch のサービス画面で「すべてのメトリクス」 に CWAgent という表示が出ています。
config.json に記載した dimensions (append 含む) 毎にメトリクスが見れます。
CloudWatch Agent を入れたインスタンスについて、 60 秒ごとにメモリの使用率が取得できています。
10:56
10:57
メモリの使用率に関する補足
「メモリの使用率」は Windows OS の「パフォーマンスカウンター」にあるMemory: Memory % Committed Bytes In Use
というカウンターの値になります。
タスクマネージャーに表示するメモリ使用率のようです。
参考:
ページ ファイルの概要 - Windows Client | Microsoft Learn
\Memory\% Committed Bytes In Use カウンターは、\Memory\Committed Bytes と \Memory\Commit Limit 値の比率です。
アラームの作成
チェックを入れた状態で「アラームの作成」ボタンを押すと、アラームを作成可能です。詳細は割愛します。
CloudWatch Agent の利用する CPU / メモリ
ドキュメントには記載がないものの、リソース使用量はそんなに多くなさそうです。
Agent を使ってログを CloudWatch Logs に送ったりすると、多くなるかもしれません。
まとめ
Windows Server 2022 で メモリ使用率を CloudWatch メトリクスに出してみました。
余談
正月から既に 100 km くらいランニングしていました。
今年は沢山走ろうと思います。山を・・
山本 哲也 (記事一覧)
カスタマーサクセス部のエンジニア。2024 Japan AWS Top Engineers に選んでもらいました。
今年の目標は Advanced Networking – Specialty と Machine Learning - Specialty を取得することです。
山を走るのが趣味です。今年の目標は 100 km と 100 mile を完走することです。 100 km は Gran Trail みなかみで完走しました。残すは OSJ koumi 100 で 100 mile 走ります。実際には 175 km らしいです。「草 100 km / mile」 もたまに企画します。
基本的にのんびりした性格です。座右の銘は「いつか着く」