Help us understand the problem. What is going on with this article?

AWS CLIを利用した、サービス監視について(Windows)

概要

 AWS CLIを利用したWindowsサービス監視について記載します。
 CloudWatch Agentでは、プロセス監視が可能ですが、サービス監視を行う事が出来ません。
 そこで、Windowsのコマンドでサービスの起動状態を確認し
 結果をCloudWatchに出力するといった内容となります。※
 ※出力=put の意味となります。

事前設定

 本内容では、下記項目が必要となるので先事前に準備をお願いします。
 ①CloudWatch メトリクス 出力用 IAMユーザ作成 ※1
 ②AWS CLIインストール,初期設定(IAMユーザ設定含む) ※1
 ※1 上記内容は、AWSに公式手順がある為参照してください。

設定内容

 今回の設定内容については、2フェーズに分け作業を実施します。
 ★設定フェーズ
  ①監視サービス名確認作業
  ②監視サービス確認用バッチファイル作成

サービス名確認作業

 まず、初めにサービス名の確認を行います。
 Windowsのサービスより、対象のサービス一覧を確認して下さい。※2
 対象のサービスをダブルクリックし、プロパティ情報を表示してください。
 表示完了後、【サービス名】を確認してください。今回サービス名に記載されていないようを利用します。
 ※本例では、Task Schedulerのサービス確認を実施しています。
 ※2 ファイル名を指定して実行【services.msc】を起動する事により表示されます。
image.png

サービス確認用バッチファイル作成

 次にバッチファイルを作成します。
 まず、メモ帳を開き下記内容を入力してください。
 一部内容は、可変となるため入力をお願いします。

win_service.bat
@echo off

rem AWSインスタンスメタデータ取得
rem 取得後、【instanceid】に代入
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

rem サービス稼働確認(errorlevel の結果により、Processesの値を変更)
sc query 【###確認したサービス名を入力###】 | findstr STATE | findstr RUNNING >null
if %errorlevel% == 0 (
echo errorlevel=%errorlevel%
set Processes=1
) else (
echo errorlevel=%errorlevel%
set Processes=0
)
echo Processes=%Processes%

#Putコマンドを利用し、CloudWatchに送信
aws cloudwatch put-metric-data --metric-name "【###メトリクス名###】" --namespace "【###ネームスペース名###】" --region 【###リージョン名###】 --value %Processes%  --unit "Count" --dimensions "InstanceId=%incetanceid%"

★スクリプト説明
 本スクリプトは、sc queryの結果を確認し正であれば、Processes変数に1を代入
 誤であれば0を代入します。その後、CloudWatchにProcessesの値が送信されます。
 ※稼働しているサービスのみ表示されるので、STOP等の場合は表示されない。すなわち誤となります。

後は、タスクスケジューラで繰り返しスクリプトを起動させれば完了です。

結果

今回は、例として下記設定で実施しました。
★本例での設定

設定内容
 監視サービス名 "schedule"
 metric-name "schedule"
 namespace "Windows"

★出力結果(CloudWatch内の出力結果です。)
image.png

CloudWatch 内にカスタムメトリクスが作成されています。
後は、本スクリプトを定期間隔で実行すれば完了となります。
※タスクスケジューラによる定期間隔設定方法については、batファイル定期実行方法についてに記載しています。

以上が、今回の内容となります。

参考URL

 下記内容を参考にし本スクリプトを作成しております。

 ・CloudWatch メトリクス 出力用IAMユーザ作成方法
  (https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/create-iam-roles-for-cloudwatch-agent.html)

 ・Windows AWS CLIインストール
  https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-windows.html

 ・sc queryコマンド説明資料
  https://win.just4fun.biz/?%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88/%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E4%B8%80%E8%A6%A7%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%E3%83%BBsc%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away