なんでもできるが故に奥の深い SSM を理解できないマルオです
SSM Agent から CloudWatch へ WindowsServer のパフォーマンスカウンターの情報を送信してモニタリングする事があります。その都度ログインしてタスクマネージャーを確認するのも大変です。
デフォルトのメトリクスで用が足りれば問題ないのですが、特定のプロセスの情報が欲しかったりする場合、カスタムメトリクスを設定しなければなりません。
今回は AWS で提供されているテンプレートドキュメントを使用して特定のプロセスをモニタリングしてみます。
使用する環境
・EC2インスタンス(WindowsServer2012R2)
SSM Agent はデフォルトでインストールされていますが、念のために新しいバージョンをインストールします。頻繁に更新されているようなので、気づくとバージョンアップしています。
SSM Agent 最新版 ダウンロード
SSM Agent リリースノート
また、SSM を使用するためには実行用ロール「AmazonEC2RoleforSSM」を対象インスタンスに付与する必用があります。
新しいバージョンをインストールするにはいくつかの方法がありそうです。
1.ログインして直接インストール
2.自動更新(かっこいい)
3.SSM を使ってアップデート(おすすめ)
・EC2 コンソールからコマンドを実行する > 例: SSM エージェントの更新
ここでは 3.の方法でバージョンアップしてみます。
※赤囲いを選択
アップデートが成功すると「エージェントのバージョン」が変わります。
また、SSM エージェントのインストールログは以下のフォルダにあるので直接確認することも出来ます。
C:UsersAdministratorAppDataLocalTemp
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"
}
}
}
作成したドキュメントを SSM で実行します。
SSM 実行方法(流れ)
「Properties」に作成したを貼り付ける。
成功すると CloudWatch カスタムメトリクスが新しく追加されます。
無事特定のプロセスを CloudWatch に送信することができました。これを応用すると パフォーマンスカウンター で取得できる項目を CloudWatch で見ることが可能になります。
ハマったことを1つ。
SSM Agent には特定の条件で発生する不具合があるようで、条件に当てはまったインスタンスは SSM Agent が起動できません。(手動起動してもすぐ落ちる)
これは WindowsServer2016 の場合のみ発生するとのこと。
ルーティング情報がうまく更新されないことが原因なようで次のコマンドで解消されるようです。(実験環境ではうまくいきました)
C:\Import-Module $env:ProgramDataAmazonEC2-WindowsLaunchModuleEc2Launch.psm1
C:\Add-Routes