AWSカスタムメトリクスでWindowsパフォーマンスモニタカウンタを追加する方法

AWSのCloudWatch(クラウドウォッチ)でEC2のリソース状態を見たいのですが、
実は、メモリとかは標準ではクラウドウォッチできません。

メモリもクラウドウォッチしたい!

という人には、カスタムメトリクスという、カスタム的にクラウドウォッチに追加する方法があります。
その方法を紹介します。

環境・前提条件

  • Windows Server 2016 EC2

で試しました。
RunCommandが使用でき、CloudWatchとも通信できる必要があるため、EC2はインターネットに通信できる環境が必要ですが、
EC2がインターネットと通信できない環境の場合は、RunCommandやCloudWatchと通信できるようEndPointを準備しましょう。

RunCommand(ランコマンド)でWindows EC2に一括カスタムメトリクス登録出来る!

AWSのマニュアルを見ますと、意外と難しそうに思えますが、要はカスタムメトリクスは

  • Windows EC2内のAWS SSMエージェントが、CloudWatchに定期的にデータを送る

ことで実現できています。
そのために、SSMエージェントに初期設定をする必要が、この方法はいろいろあるのですが、
複数台のWindows EC2に一括初期設定がRun Commandでは出来るのでお勧めです。

1、Run Command でコマンド実行。

image

EC2ダッシュボード画面の左メニューから、SYSTEMS MANAGER SERVICES(SSM)の「コマンドの実行」を選び「コマンドを実行」をクリックします。

初めてRun commandを実行する場合は、上記のような画面になります。

2、コマンドのドキュメントはAWS-ConfigureCloudWatch

image

コマンドのドキュメントは「AWS-ConfigureCloudWatch」を選択します。

RunCommandはSSMからいろんなジョブが実行でき便利そうですね。
例えば、Windows EC2内のPowerShellコマンドも実行できますので、AWS LambdaからEC2 OS内のコマンドをRun Command経由で実行することもできますね。

3、ターゲットの選択でコマンド実行するインスタンスの選択

image

ターゲットの選択より、Run commandを実行するインスタンスを選択します。
「インスタンスの手動選択」も出来ますし、「タグの指定」も出来ます。

Run Commandは一回こっきりのコマンド発行で、RunningしているEC2しか実行できません。
そのため、インスタンスの選択ではRunning中のEC2しか表示されませんし、「タグを指定」して実行でも、Running中のEC2でしか実行されません。
もしも、Running中なのにインスタンスの選択リストに表示されない場合は、そのEC2がSSM(インターネット経由もしくはEndpoint経由)と通信できていないと思われます。

4、Propertiesにカスタムメトリクスjsonを投入

image

Propertiesにカスタムメトリクスのjsonを投入します。
このjson内に、

  • Windowsパフォーマンスモニタのカウンターや
  • 収集する周期タイミング

を書き込みます。
カスタムメトリクスのサンプルjsonが以下です。

{
     "IsEnabled": true,
     "EngineConfiguration": {
        "PollInterval": "00:05:00",
         "Components": [
             {
                 "Id": "PerformanceCounterMemoryUtilization",
                 "FullName": "AWS.EC2.Windows.CloudWatch.PerformanceCounterComponent.PerformanceCounterInputComponent,AWS.EC2.Windows.CloudWatch",
                 "Parameters": {
                     "CategoryName": "Memory",
                     "CounterName": "% Committed Bytes In Use",

                     "InstanceName": "",
                     "MetricName": "MemoryUtilization",
                     "Unit": "Percent",
                     "DimensionName": "InstanceId",
                     "DimensionValue": "{instance_id}"
                 }
             },
             {
                 "Id": "PerformanceCounterDiskSpaceUtilizationC",
                 "FullName": "AWS.EC2.Windows.CloudWatch.PerformanceCounterComponent.PerformanceCounterInputComponent,AWS.EC2.Windows.CloudWatch",
                 "Parameters": {
                     "CategoryName": "LogicalDisk",
                     "CounterName": "% Free Space",

                     "InstanceName": "C:",
                     "MetricName": "FreeSpace",
                     "Unit": "Percent",
                     "DimensionName": "InstanceId",
                     "DimensionValue": "{instance_id}"
                 }
             },
             {
                 "Id": "PerformanceCounterTerminalServices",
                 "FullName": "AWS.EC2.Windows.CloudWatch.PerformanceCounterComponent.PerformanceCounterInputComponent,AWS.EC2.Windows.CloudWatch",
                 "Parameters": {
                     "CategoryName": "Terminal Services",
                     "CounterName": "Total Sessions",

                     "InstanceName": "",
                     "MetricName": "Total Sessions",
                     "Unit": "Percent",
                     "DimensionName": "InstanceId",
                     "DimensionValue": "{instance_id}"
                 }
             },
             {
                 "Id": "CloudWatch",
                 "FullName": "AWS.EC2.Windows.CloudWatch.CloudWatch.CloudWatchOutputComponent,AWS.EC2.Windows.CloudWatch",
                 "Parameters": {
                     "AccessKey": "",
                     "SecretKey": "",
                     "Region": "ap-northeast-1",
                     "NameSpace": "Windows/Default"
                 }
             }
         ],
         "Flows": {
             "Flows": [
                 "(PerformanceCounterMemoryUtilization,PerformanceCounterDiskSpaceUtilizationC,PerformanceCounterTerminalServices),CloudWatch"
             ]
         }
     }
}

最後に「Run」ボタンを押し実行します。
このカスタムメトリクスの初期設定を変更したい時は、再びRunCommandを実行すればOKです!

5カスタムメトリクスが登録されたか確認方法

image

カスタムメトリクスが登録されたか確認する方法は、

  • EC2内の「C:\Program Files\Amazon\SSM\Plugins\awsCloudWatch\AWS.EC2.Windows.CloudWatch.json」ファイルにRunCommandで実行したカスタムメトリクスjsonが含まれているか?
  • CloudWatchのメトリクスに「Windows/Default」というメトリクス内に追加したカスタムメトリクスがあること

で、確認ができます。
まあ、後者が成功して初めてカスタムメトリクスですね!

日本語のパフォーマンスモニタのカウンタはカスタムメトリクスに非対応

nihonngo

ちなみに、今のところ上記のような日本語のパフォーマンスモニタのカウンターは
カスタムメトリクスでは非対応とのことでした(AWSサポートに確認したところ)

そもそも、なんでこの接続ブローカーのカウンターだけは日本語なんですかね、、、謎

参考:Amazon CloudWatch へのログ、イベント、パフォーマンスカウンターの送信 - Amazon Elastic Compute Cloud

CloudWatch のインスタンスを設定する - Amazon Elastic Compute Cloud

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です