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

最終更新日付: 2019年5月1日

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

コメントを残す

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