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


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


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

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

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

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


使用する環境

・EC2インスタンス(WindowsServer2012R2)



---------------------------------------------------------

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

---------------------------------------------------------

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

 ・SSM Agent 最新版 ダウンロード
 ・SSM Agett リリースノート

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


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

1.ログインして直接インストール
2.自動更新(かっこいい)
3.SSM を使ってアップデート(おすすめ)

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

SSM を使ってアップデートの実行方法(流れ)

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

※赤囲いを選択





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

  C:\Users\Administrator\AppData\Local\Temp















---------------------------------------------------------

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"
                }
            }
 ------

"Flows":」に「ssm-agent-workingset」を追加し、送信先を「CloudWatch」に指定します。

 ------
        "Flows": {
            "Flows": 
            [
                "(ssm-agent-workingset,ApplicationEventLog,SystemEventLog),CloudWatch",
                "PerformanceCounter,CloudWatch"
            ]
        }
 ------

---------------------------------------------------------

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 の場合のみ発生するとのこと。

ルーティング情報がうまく更新されないことが原因なようで次のコマンドで解消されるようです。(実験環境ではうまくいきました)

> Import-Module $env:ProgramData\Amazon\EC2-Windows\Launch\Module\Ec2Launch.psm1
 Add-Routes


おわり



このブログの人気の投稿

【AWS】IAMFullAccessを付与せずIAM Roleの作成とアタッチを行う方法

【AWS】EBSボリューム自動取得/削除 を Lambda で実行 (世代管理も)

【GCP】Compute EngineでVPNサーバーを立てるときの注意点