雲のメモ帳

猫とクラウドと旅行が好きなインフラエンジニアです。 日々の調べたことや興味が持ったことをこのブログにアウトプットします。

カスタムメトリクスを使ったプロセス監視(Windows編)

こんにちは。

以前カスタムメトリクスを使ってLinuxのプロセス監視を行うブログを書いたのですが、今回Windowsで同様のことをやってみたいと思います。 

  Linux編はこちら。 qiita.com

環境

  • WindowsServer2012R2 (ami-281ad849)
  • AWS CLI (ver 1.10.63)

目次

  1. IAMロール作成
  2. batファイル作成
  3. テスト

作業

1. IAMロール作成(AWSコンソール作業)

まず、インスタンスにアタッチするIAMロールを作成します。 ポリシーは PutMetoricDataのみ許可します。

IAMポリシー

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "cloudwatch:PutMetricData"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

上記ポリシーを持ったIAMロールを作成し、WIndowsServer起動時に、アタッチします。

2. batファイル作成(WindowsServer作業)

WIndowsServerを起動したら、プロセスの状態をCloudWatchにPutするバッチを作成します。 今回AWSCLIのインストール手順は割愛します。必要であればクラメソさんの記事を参照ください。

Windows Server への AWS CLIのインストール | Developers.IO

監視するプロセスは、特になんでもいいのですが、W32Time にしてみました。 スクリプト内容を記載していますので、コピー&ペーストでbatファイルを作成してください。

スクリプト概要

  • for分でメタデータより、incetanceidを変数(incetanceid)に格納
  • sc query コマンドで、プロセスの状態がRUNNINGかどうか確認
  • sc query コマンドの返り値を確認
  • 返り値が1(プロセスが起動中)ならば、変数(Processes)に1を格納
  • 返り値が0(プロセス起動中以外)ならば、変数(Processes)に0を格納
  • 格納した変数をもとに、CloudWatchにデータをPUT

スクリプト

@echo off

for /f "usebackq tokens=*" %%a in (`PowerShell.exe -Command invoke-restmethod -uri http://169.254.169.254/latest/meta-data/instance-id`) do @set incetanceid=%%a

sc query W32Time | findstr STATE | findstr RUNNING > null
if %errorlevel% == 0 (
set Processes=1
) else (
set Processes=0
)

aws cloudwatch put-metric-data --metric-name "W32Time" --namespace "System/Windows" --region ap-northeast-1 --value %Processes%  --unit "Count" --dimensions "InstanceId=%incetanceid%"

3. テスト

最後にスクリプトのテストをします。

  • W32Timeプロセスが起動している場合(1を返す)

f:id:ykoomaru:20160911124317p:plain

  • W32Timeプロセスが停止している場合(0を返す)

f:id:ykoomaru:20160911125647p:plain

あとは、タスクマネージャーにスクリプトを仕込んで定期実行すれば、プロセスの監視ができますね。

プロセスが停止している場合にアラートを上げる設定は、カスタムメトリクスの値をトリガーにCloudWatchの設定をしてください。

以上となります。 ご指摘事項がありましたら、ご連絡お願いします。

参考

http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/WindowsGuide/ec2-instance-metadata.html

【AWS】カスタムメトリクスを使ったプロセス監視(Linux編)【CloudWatch】 - Qiita

put-metric-data — AWS CLI 1.18.166 Command Reference