2013/08/29

[Windows]監視スクリプトを書いてみた(4/5) ポート監視

ApacheやらMySQLのサービスが落ちてないかなどを監視するのを自分でチェックして異常があったら発報する仕組みが必要だと思ってました。
サードパーティに頼らず、WindowsOSの機能だけで作ってみたかったので、ほぼVBScriptだけでくみ上げてみました。

そんなマゾヒズム感全開なエントリがこちらです。

今回は第4回です。
  1. 処理フロー
  2. メール送信
  3. サービス監視
  4. ポート監視(今回)
  5. MySQLレプリケーション監視




.

内容

引数で指定したポートが待ち受け状態にあるかを確認します。
サービスにくわえてポートまで監視する必要性は薄いように思われるかもしれませんが、「サービスは開始されていてもポートが待ちうけ状態にない」ことはありえることです。
特にIISで稼動するWebサイトは複数のポートで配置することができ、サービスの稼動とサイトの稼動は別の制御になっています。
最近ApacheからIISに移行した私にとっては重要かもしれない監視になるのです。

使い方

前回のサービス監視とほぼ同じです。
下のVBScriptと第2回で紹介したsendMail.vbsを同じディレクトリに置き、さらにバッチファイルを置いて以下のように記述します。
Call watchPort.vbs 80
複数のポートを監視したい場合は以下のように記載します。
Call watchPort.vbs 80
Call watchPort.vbs 3306
Call watchPort.vbs 21

ポイント

今回使うコマンドは
NETSTAT -an|FIND "TCP"|FIND "0.0.0.0"
です。
これを分解すると、
NETSTAT -an
すべてのアクティブなTCP接続とコンピュータがリッスンしているTCPとUDPポートを表示します。ここから
FIND "TCP"
でプロトコルがTCPのものだけを拾い、さらに
FIND "0.0.0.0"
でコンピュータがリッスンしているものに絞り込みます。

この出力の中から完全一致の行を見つけるために正規表現で検索しています。
例えば80番ポートを検索する場合の正規表現パターンはこうなります。
"TCP\s*0.0.0.0:80\s.*LISTENING"
VBScriptで使える正規表現では特定のデリミタがなく、"で囲みます。



サービス監視よりも少し簡単ですね。

さて次回はMySQLのレプリケーション監視です。

.

0 件のコメント:

コメントを投稿