【AWS】SSMを使用してWindowsServerの特定プロセスをCloudWatchで監視する

SSM を使用して特定のプロセスをモニタリングする

なんでもできるが故に奥の深い SSM を理解できないマルオです

SSM Agent から CloudWatch へ WindowsServer のパフォーマンスカウンターの情報を送信してモニタリングする事があります。その都度ログインしてタスクマネージャーを確認するのも大変です。

デフォルトのメトリクスで用が足りれば問題ないのですが、特定のプロセスの情報が欲しかったりする場合、カスタムメトリクスを設定しなければなりません。

今回は AWS で提供されているテンプレートドキュメントを使用して特定のプロセスをモニタリングしてみます。

使用する環境

・EC2インスタンス(WindowsServer2012R2)

1.SSM Agent 最新版のインストール

SSM Agent はデフォルトでインストールされていますが、念のために新しいバージョンをインストールします。頻繁に更新されているようなので、気づくとバージョンアップしています。

SSM Agent 最新版 ダウンロード

SSM Agent リリースノート

また、SSM を使用するためには実行用ロール「AmazonEC2RoleforSSM」を対象インスタンスに付与する必用があります。

Systems Manager のアクセス設定

新しいバージョンをインストールするにはいくつかの方法がありそうです。

1.ログインして直接インストール

2.自動更新(かっこいい)

 ・自動的に SSM エージェント を更新する

3.SSM を使ってアップデート(おすすめ)

 ・EC2 コンソールからコマンドを実行する > 例: SSM エージェントの更新

 

ここでは 3.の方法でバージョンアップしてみます。

 
SSM を使ってアップデートの実行方法(流れ)
  1. SSM「コマンドを実行」
  2. コマンドのドキュメント「AWS-UpdateSSMAgent」
  3. ターゲットの選択「インスタンス」
  4. 対象のインスタンスにチェック※SSM 実行用ロールを対象インスタンスに与えていないと表示されない
  5. 「Allow Downgrade」= False で最新版が選択

※赤囲いを選択

 
 

アップデートが成功すると「エージェントのバージョン」が変わります。
また、SSM エージェントのインストールログは以下のフォルダにあるので直接確認することも出来ます。

  C:UsersAdministratorAppDataLocalTemp

2.SSM ドキュメント 準備

SSM コマンドを実行する際に必用なドキュメント(設定)のテンプレートをダウンロードします。

サンプル設定ファイル

3.SSM ドキュメントの設定

プロセス名:amazon-ssm-agetnt.exe

対象プロセスの設定情報をテンプレートドキュメントに書き込みます。試しに次のプロセスをモニタリングしてみます。

取得したい値:WorkingSet (物理メモリ使用量)

 

タスクマネージャーでは上記のように表示されています。

パフォーマンスカウンターで見てみます

テンプレートドキュメントに次の行を追加します。

{
     "Id": "ssm-agent-workingset",
     "FullName": "AWS.EC2.Windows.CloudWatch.PerformanceCounterComponent.PerformanceCounterInputComponent,AWS.EC2.Windows.CloudWatch",
     "Parameters": {
         "CategoryName": "Process",
         "CounterName": "Working Set",
         "InstanceName": "amazon-ssm-agent",
         "MetricName": "amazon-ssm-agent",
         "Unit": "Bytes",
         "DimensionName": "InstanceId",
         "DimensionValue": "{instance_id}"
     }
},

※SSM のドキュメントは一箇所でも記述が間違っていると実行は成功しても CloudWatch へ送信されないので、うまくいかない時は記述箇所を疑ったほうが良さそうです。

カスタムメトリクスとして表示させるために次の2箇所を変更します。

「”Id”: “CloudWatch”」の「”Region”」を 対象インスタンスの存在する値に変更します。

※「”Windows/Default”」はカスタム名前空間に表示される名称です(任意に設定)。

 
 ——
            {
{
         "Id": "CloudWatch",
         "FullName": "AWS.EC2.Windows.CloudWatch.CloudWatch.CloudWatchOutputComponent,AWS.EC2.Windows.CloudWatch",
         "Parameters": 
            {
               "AccessKey": "",
               "SecretKey": "",
               "Region": "ap-northeast-1",
               "NameSpace": "Windows/Default"
            }
         }
}

4.SSM コマンド実行

作成したドキュメントを SSM で実行します。

SSM 実行方法(流れ)

  1. SSM「コマンドを実行」
  2. コマンドのドキュメント「AWS-ConfigureCloudWatch」
  3. ターゲットの選択「インスタンス」
  4. 対象のインスタンにチェック ※SSM 実行用ロールを対象インスタンスに与えていないと表示されない
  5. 「Properties」にドキュメントを貼り付け
  6. 実行「Run」
※赤囲いを選択

「Properties」に作成したを貼り付ける。

成功すると CloudWatch カスタムメトリクスが新しく追加されます。

終わりに

無事特定のプロセスを CloudWatch に送信することができました。これを応用すると パフォーマンスカウンター で取得できる項目を CloudWatch で見ることが可能になります。
ハマったことを1つ。
SSM Agent には特定の条件で発生する不具合があるようで、条件に当てはまったインスタンスは SSM Agent が起動できません。(手動起動してもすぐ落ちる)
これは WindowsServer2016 の場合のみ発生するとのこと。
ルーティング情報がうまく更新されないことが原因なようで次のコマンドで解消されるようです。(実験環境ではうまくいきました)

C:\Import-Module $env:ProgramDataAmazonEC2-WindowsLaunchModuleEc2Launch.psm1
C:\Add-Routes

タイトル

本文