生産環境向けネットワーク遅延の長期監視スクリプト

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

タグ: shell-scripting network-diagnostics bash-automation linux-sysadmin ping-util

5月24日 17:42 投稿