Windows Server 2022 で メモリ使用率を CloudWatch メトリクスに出してみる。

記事タイトルとURLをコピーする

参考ドキュメント

本記事では、以下のドキュメントに記載していることを噛み砕いて、画面付きで記載します。

対象読者

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」 もたまに企画します。

基本的にのんびりした性格です。座右の銘は「いつか着く」