CloudWatchでWindowsサーバのポートを監視する


この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

概要

CloudWatchは様々なメトリクスを監視することができますが、サーバのポート状態を直接監視することはできなさそうです。今回はスクリプトよりポート状態を取得して、CloudWatchへ送信します。

前提

●CLIはインストール済み
●IAM権限:cloudwatch:PutMetricData

作業ステップ

ポート監視用スクリプト作成

下記のようにWindowsバッチファイルを作成します。

@echo off

set PORT_COUNT_ESTABLISHED=0
set PORT_COUNT_LISTENING=0
set PORT_COUNT=0

rem get 3389 port in ESTABLISHED
netstat -an | find "3389" | find "ESTABLISHED" /c>%CD%\temp.txt
set /p PORT_COUNT_ESTABLISHED=<%CD%\temp.txt

rem get 3389 port in LISTENING
netstat -an | find "3389" | find "LISTENING" /c>%CD%\temp.txt
set /p PORT_COUNT_LISTENING=<%CD%\temp.txt

rem get 3389 port at work
set /a PORT_COUNT=%PORT_COUNT_ESTABLISHED%+%PORT_COUNT_LISTENING%

rem send metrics to cloudwatch
aws cloudwatch put-metric-data ^
    --metric-name "PortCount" ^
    --namespace "port_monitor" ^
    --dimensions "InstanceId=i-xxxxxxxxxxx, Hostname=cpi-host01" ^
    --value %PORT_COUNT% ^
    --unit "Count" ^
    --region ap-northeast-1

exit

タスクスケジューラ設定

Windowsサーバにログインして、タスクスケジューラを起動します。
※起動方法:Run "taskschd.msc"
file

右側の「Create Task」を選択して、タスクを作成します。
"Run whether user is logged on or not"をチェックしたら、バッチがバックグラウンド処理になります。
file

トリガーを新規します。
こちらの設定は1分毎にバッチを実行する、停止するまでは30分と設定します。
file

バッチ実行のみの操作を新規します。
file

他の設定はデフォルトのままで、タスクを作成します。
"Run whether user is logged on or not"を選択する場合、管理員のパスワードが必要です。
file

監視結果確認

AWSマネジメントコンソールから、CloudWatchサービスのメトリクスを確認します。
file

メトリクスを利用して、アラームなとの作成は省略します。

最後に

Linuxはcrontab + bashの組み合わせてポート監視が可能です。次回はLinuxサーバの監視方法を検証しましょう。

Last modified: 2022-08-04

Author