ping コマンドによるネットワーク診断
本番環境では、ネットワークの安定性、特にレイテンシの変動がシステム信頼性に直結する重要な要素です。ネットワークの遅延状況を長期間にわたって記録し、分析するために、標準的な ping ユーティリティを活用できます。
主要なオプション
-i: パケット送信間のインターバル(秒)。デフォルトは 1 秒です。-c: 送信するパケットの総数。指定しない限り継続して実行されます。-s: 送信データのペイロードサイズ(バイト)。ヘッダーを含めた総サイズではなく、データ部分のサイズを指定します。
実行例
特定のホストに対して、2 秒間隔で 5 回、2KB のデータを送信して応答時間を計測する場合は以下の通りです。
$ ping -c 5 -i 2 -s 2048 192.168.10.50
PING 192.168.10.50 (192.168.10.50) 2048(2076) bytes of data.
2056 bytes from 192.168.10.50: icmp_seq=1 ttl=64 time=1.23 ms
2056 bytes from 192.168.10.50: icmp_seq=2 ttl=64 time=1.45 ms
2056 bytes from 192.168.10.50: icmp_seq=3 ttl=64 time=1.38 ms
--- 192.168.10.50 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 4005ms
rtt min/avg/max/mdev = 1.230/1.353/1.450/0.090 ms
タイムスタンプ付きログ記録スクリプト
単なる ping 結果だけでなく、ネットワーク障害や遅延が発生した正確な時刻を記録しておくことで、事後分析が容易になります。標準出力をパイプで処理し、各行にシステム時刻を付与してファイルに追記するスクリプトを作成します。
以下は Bash を使用した実装例です。ループ処理内で date コマンドを呼び出し、ping の出力行と結合してログファイルに保存します。
#!/bin/bash
TARGET_HOST="192.168.10.50"
LOG_FILE="network_latency.log"
PACKET_COUNT=50000
DATA_SIZE=2048
ping -c ${PACKET_COUNT} -i 1 -s ${DATA_SIZE} ${TARGET_HOST} | while read -r response_line; do
echo "$(date '+%Y-%m-%d %H:%M:%S') ${response_line}" >> ${LOG_FILE}
done
バックグラウンド実行とプロセス管理
監視スクリプトは長時間実行されるため、ターミナルセッションが切断されても停止しないよう、バックグラウンドで起動する必要があります。nohup コマンドを使用すると、ハングアップシグナルを無視してプロセスを継続できます。
$ nohup bash network_monitor.sh &
実行中のプロセスを確認するには、プロセスリストを grep でフィルタリングします。
$ ps aux | grep network_monitor
user 12345 0.0 0.1 12345 6789 pts/0 S 10:00 0:05 bash network_monitor.sh
監視を終了する場合は、確認したプロセス ID を使用して停止させます。
$ kill -9 12345