はじめに
な~んかネットワークが遅いなぁと感じる時ってありますよね。アクセスできない訳ではないけど、時間帯によって遅い、宛先によって遅い、経路の途中で遅延している気がする、といったようなスッキリしないケース。
pingかけ続けて調査する手もありますが、遅延している時の時刻と紐づけができずイラっとします。
会社環境はWindowsというケースも多いと思いますので、
・Windows環境で、
・複数の宛先IPに対して、
・指定した間隔でpingのレスポンス(Min、Max、Ave)を計測し、
・時刻と共にCSV形式で出力する。
というバッチ(.bat)を作りました。
バッチ
以下の変数を適当に変更して下さい。
・INTERVAL : ping実行間隔 [秒] : 60の倍数をお勧めします。
・MAXCOUNT : 繰り返し回数 [回]
・PINGCOUNT : ping実行時のパケット送信回数 [回](ping -n オプション)
・PINGCOUNT : pingのタイムアウト [ms](ping -w オプション)
・IPLIST : ping送信先IPアドレス一覧(スペース区切り)
また、pingのパケット送信回数と宛先IP数を掛けた値がping実行間隔より小さくなるよう調整して下さい。
PINGCOUNT * IPLISTのIP数 < INTERVAL
ping送信1回あたりのレスポンスが最大1秒(PINGTIMEOUT=1000)と想定して1つの宛先IPあたり、PINGCOUNT回数分の時間を要すると仮定しています。
これがINTERVALの値を超えるとpingの実行間隔がINTERVALで指定した間隔より長くなります。
@echo off
rem ###############################################################
rem 以下のパラメータを設定
rem ###############################################################
rem ※ INTERVALは60の倍数(1分単位)を設定。
rem ※ おおよその実行時間[秒] : INTERVAL * MAXCOUNT
rem ※ 「PINGCOUNT * IPLISTのIP数 < INTERVAL」となるよう調整。
rem ※ (ping送信1回あたりのレスポンスが1秒と想定。)
rem ###############################################################
rem INTERVAL : ping実行間隔 [秒]
set INTERVAL=60
rem MAXCOUNT : 繰り返し回数 [回]
set MAXCOUNT=5
rem PINGCOUNT : ping実行時のパケット送信回数 [回]
set PINGCOUNT=3
rem PINGCOUNT : pingのタイムアウト [ms]
set PINGTIMEOUT=1000
rem IPLIST : ping送信先IPアドレス一覧(スペース区切り)
rem 設定例 : IPLIST=192.0.2.1 198.51.100.1 203.0.113.1
set IPLIST=192.168.1.1 192.168.2.2 192.168.3.3
rem ###############################################################
rem 文字コード変更
chcp 437 > NUL
setlocal enabledelayedexpansion
echo date/time,IP,Min,Max,Ave
for /l %%g in (1, 1, %MAXCOUNT% ) do (
for %%h in (%IPLIST%) do (
for /f "usebackq tokens=3,6,9 delims= " %%i in (`ping -n %PINGCOUNT% -w %PINGTIMEOUT% %%h ^| find "Minimum"`) do (
set MINRES=%%i
set MAXRES=%%j
set AVERES=%%k
echo !date! !time:~,8!,%%h,!MINRES:ms,=,!!MAXRES:ms,=,!!AVERES:ms=!
)
)
timeout /nobreak %INTERVAL% > nul
)
出力結果
そのまま実行すると標準出力に以下のように
時刻, 宛先IP, Min[ms], Max[ms], Ave[ms]
のCSV形式で出力されますので、
C:\>pingResToCsv.bat
date/time,IP,Min,Max,Ave
2021/01/30 16:08:46,192.0.2.1,2,5,3
2021/01/30 16:08:51,198.51.100.1,2,11,5
2021/01/30 16:08:57,203.0.113.1,22,24,22
2021/01/30 16:09:47,192.0.2.1,2,3,2
2021/01/30 16:09:52,198.51.100.1,2,4,3
2021/01/30 16:09:59,203.0.113.1,24,28,26
:
「pingResToCsv.bat > output.csv」のようにcsvファイルにリダイレクトし、それをExcelでグラフ化するといった使い方ができます。
参考
######・【Windowsバッチ】コマンド実行結果を環境変数に代入する方法 - @RagWork
######・ Windowsのバッチファイル中で日付をファイル名に使用する - @IT
######・ 文字列を置換する方法 - バヤシタ