初めに
こんにちは、山田です。
今回はWindowsサービスを監視するスクリプトを作成したので記載していきます。
スクリプト
早速ですが今回作成したスクリプトは以下になります。
# 配列を定義
$arr = "サービス名","サービス名"…
# AWSインスタンスメタデータ取得
Write-Output "Fetching instance ID..."
$instanceid = Invoke-RestMethod -Uri http://169.254.169.254/latest/meta-data/instance-id
Write-Output "Instance ID: $instanceid"
# 配列の要素数だけループ
for ($i = 0; $i -lt $arr.Count; $i++){
# サービス稼働確認
Write-Output "Checking service status for: $($arr[$i])"
$serviceStatus = Get-Service -Name $arr[$i] -ErrorAction SilentlyContinue
if ($serviceStatus -ne $null -and $serviceStatus.Status -eq 'Running') {
$Processes = 1
} else {
$Processes = 0
}
Write-Output "Processes=$Processes"
#Putコマンドを利用し、CloudWatchに送信
Write-Output "Sending metric to CloudWatch..."
try {
& "C:\Program Files\Amazon\AWSCLIV2\aws.exe" cloudwatch put-metric-data --metric-name $arr[$i] --namespace "CWAgent" --region ap-northeast-1 --value $Processes --unit "Count" --dimensions "InstanceId=$instanceid"
Write-Output "Metric sent successfully."
} catch {
Write-Output "Failed to send metric: $_"
}
}
処理内容
今回作成したスクリプトの処理内容を以下に記載します。
このスクリプトは、特定のWindowsサービスが稼働しているかどうかを確認し、その結果をAWS CloudWatchにメトリクスとして送信するものです。以下に各部分の詳細な説明を記載します。
-
配列の定義:
$arr
という配列に、確認したいWindowsサービスの名前を列挙します。 -
AWSインスタンスメタデータの取得:
Invoke-RestMethod
を使用して、現在のEC2インスタンスのIDを取得します。このIDは後のステップでCloudWatchにメトリクスを送信する際に使用されます。 -
配列の要素数だけループ:配列
$arr
の各要素(サービス名)に対して以下の処理を行います。-
サービス稼働確認:
Get-Service
コマンドを使用して、指定した名前のWindowsサービスのステータスを取得します。サービスが存在し、そのステータスが'Running'であれば、$Processes
に1を設定します。それ以外の場合は、$Processes
に0を設定します。 -
CloudWatchにメトリクスを送信:AWS CLIの
put-metric-data
コマンドを使用して、サービスの稼働状態($Processes
の値)をCloudWatchに送信します。メトリクスの名前はサービス名と同じにし、インスタンスIDを次元として指定します。
-
このスクリプトを実行すると、指定したWindowsサービスが稼働しているかどうかの情報がCloudWatchに送信されます。これにより、CloudWatchのダッシュボードやアラームを使用して、サービスの稼働状態を監視することが可能になります。