サーバーの応答時間監視バッチファイルver2

 サーバーの応答時間を監視するバッチファイルについてこちらで記事にしましたが、回線が混雑するとパケット損失も生じるため、これも監視できるように作り直しました。
 パケット損失が発生すると、損失したパケットの再送信を行うことになるため遅延が生じます。前回作成したバッチファイルではパケット損失は無視していたので、応答時間には大きな問題はないけどたまにパケット損失が生じる場合には遅延を監視することができませんでした。


【できること】

  •    前回のverに加えてパケット損失%を監視し、快適さを判断。(初期設定は5分周期)
        ー「すごく快適」、「快適」、「普通」、「厳しい」、「もうむりぽ」の5段階評価
                   損失がある場合は「普通」または「厳しい」の判定になります。
  •    パケット損失による判断のしきい値は設定で変更できる。

【使い方】

前回とおなじ


【バッチファイル】

下記をコピペしてもOKですが、バッチファイル自体も置いときます。設定は【使い方】を参照して変更してください。
 サーバー監視ver2.bat


↓↓↓↓↓↓ここからコピー↓↓↓↓↓↓
@echo off
title サーバー監視

:回線速度bpsではなく、応答時間およびパケット損失で判断する。
:pingを確認するだけなのでFF14などのゲーム以外でも使用可能

:***********************設定**************************

:ワールドがあるサーバのIPアドレス(デフォルト:gaia鯖)
set WORLD=124.150.157.157

:1周期あたりの時間はループ待ち時間とping回数の合計
:ループの待ち時間(デフォルト:200秒)
set WAITTIME=200

:1ループで実行するpingの回数(デフォルト:100回)
set PINGTIMES=100

:応答時間しきい値設定(ms)
set EXCELLENT=10
set GOOD=20
set NORMAL=50
set BAD=100

:損失しきい値設定(%)
set BADL=10

:ログ作成の有無(0は作成しない。1は作成する)ログの保存場所はこのファイルと同じ場所
set LOGGING=0

:FINE値より悪化(厳しい)で警告音を鳴らす。(0は鳴らさない。1は鳴らす。)
set BEEP=0
:回線が死んでいる場合は設定によらず警告音がなります。

:一時ファイルの保存場所
set TEMPDIR=c:\temp

:*****************************************************

mkdir %TEMPDIR% > NUL 2>&1
set /A SKIP=%PINGTIMES%+6
set /A SKIPL=%PINGTIMES%+4
set MINPING=0
set MAXPING=0
set AVERAGEPING=0
set LOSSPING=0
if not %LOGGING%==0 (
if not %LOGGING%==1 (
echo ログ作成の設定が不正です。
pause
exit /B
)
)
if not %BEEP%==0 (
if not %BEEP%==1 (
echo ビープ音の設定が不正です。
pause
exit /B
)
)

:ログファイルと画面の初期化
if %LOGGING%==1 (
if not exist ping_daily.txt (echo 日付,時間,最小ms,最大ms,平均ms,損失%% > ping_daily.txt)
)
echo ************サーバー監視************
echo  時間        平均    損失    状態
echo ------------------------------------


:以下無勉ループ
:loop
ping -n %PINGTIMES% %WORLD% > %TEMPDIR%\\pinglog.txt
@if errorlevel 1 GOTO NG
@if errorlevel 0 GOTO OK

:NG
echo 回線が死にました。。。
rundll32 user32.dll,MessageBeep
timeout %WAITTIME% > NUL
goto loop

:OK
for /F "eol=; skip=%SKIP% tokens=3,6,9 delims=m " %%i in (%TEMPDIR%\\pinglog.txt) do (
set /a MINPING=%%i
set /a MAXPING=%%j
set /a AVERAGEPING=%%k
)
for /F "eol=; skip=%SKIPL% tokens=8 " %%i in (%TEMPDIR%\\pinglog.txt) do (
set /a LOSSPING=%%i
)
set /a LOSSPING=100*%LOSSPING%/%PINGTIMES%

if %LOGGING%==1 (
echo %DATE%,%time:~0,2%:%time:~3,2%:%time:~6,2%,%MINPING%,%MAXPING%,%AVERAGEPING%,%LOSSPING% >> ping_daily.txt
)

:損失があれば普通以下の判定
if not %LOSSPING%==0 (
if %LOSSPING% lss %BADL% echo %time:~0,2%:%time:~3,2%:%time:~6,2%    %AVERAGEPING%ms    %LOSSPING%%%    普通です。
if %LOSSPING% geq %BADL% (
echo %time:~0,2%:%time:~3,2%:%time:~6,2%    %AVERAGEPING%ms    %LOSSPING%%%    厳しいです。
if %BEEP%==1 rundll32 user32.dll,MessageBeep
)
)

:損失がなければ応答時間で判定
if %LOSSPING%==0 (
if %AVERAGEPING% lss %EXCELLENT% echo %time:~0,2%:%time:~3,2%:%time:~6,2%    %AVERAGEPING%ms    %LOSSPING%%%    とても快適です。
if %AVERAGEPING% geq %EXCELLENT% if %AVERAGEPING% lss %GOOD% echo %time:~0,2%:%time:~3,2%:%time:~6,2%    %AVERAGEPING%ms    %LOSSPING%%%    快適です。
if %AVERAGEPING% geq %GOOD% if %AVERAGEPING% lss %NORMAL% echo %time:~0,2%:%time:~3,2%:%time:~6,2%     %AVERAGEPING%ms    %LOSSPING%%%    普通です。

if %AVERAGEPING% geq %NORMAL% if %AVERAGEPING% lss %BAD% (
echo %time:~0,2%:%time:~3,2%:%time:~6,2%     %AVERAGEPING%ms    %LOSSPING%%%    厳しいです。
if %BEEP%==1 rundll32 user32.dll,MessageBeep
)
if %AVERAGEPING% geq %BAD% (
echo %time:~0,2%:%time:~3,2%:%time:~6,2%    %AVERAGEPING%ms    %LOSSPING%%%    もうむりぽ。
if %BEEP%==1 rundll32 user32.dll,MessageBeep
)
)

timeout %WAITTIME% > NUL
goto loop

↑↑↑↑↑↑ここまでコピー↑↑↑↑↑↑


0 件のコメント:

コメントを投稿