fpingで最速で全サーバの疎通を確認する方法

fpingは並列で複数ホストにPingチェックを行ってくれるため、チェックしたいサーバ全台をループで回してpingを送るよりも高速に実行できる。
ただfpingのオプションを適切にすることでさらに高速に実行できるし、fpingと組み合わせるコマンドの工夫でさらに高速に実行できる。

オプション無し

まずはオプションを指定せずに一番遅い方法を見てみる。

all_listに書かれている100台のうち、30台が疎通が取れない状態であるとする。疎通のとれる70台をalive_listに書き出したい。aliveであるものだけを出力するオプション-aのみを指定し、速度にかかわるオプションは何もない状態で実行すると10秒かかった。

オプション有り

オプションについて

fpingの速度にかかわるオプションは以下の3種類ある。

  • -i n The minimum amount of time (in milliseconds) between sending a ping packet to any target (default is 25).
  • -r n Retry limit (default 3). This is the number of times an attempt at pinging a target will be made, not including the first try.
  • -t n Initial target timeout in milliseconds (default 500). In the default mode, this is the amount of time that fping waits for a response to its first request. Successive timeouts are multiplied by the backoff factor.

-iが各サーバへpingを送る間隔、-rが初回を除いて最大何回リトライするか、-tがタイムアウト値となる。
ネットワークがあふれる可能性があるので、以下の範囲の値はrootユーザでなければ実行できない。

これらのオプションを使って、高速化していく。

-iオプション

最小の1に設定して実行する。rootユーザで実行するか、fpingにsudoをつけて実行する。

-rオプション

最小の1に設定して実行する。

-tオプション

-iオプションと-rオプションは間隔やリトライ回数なので、安定した環境であれば最小値の1を指定しても通常であれば正しく値をとれるが、-tオプションはタイムアウト値なので1ではなく20くらいにしておく。

-i, -r, -tオプション組み合わせ

3つのオプションをすべて指定して実行する。

オプションを指定しなかったときは10秒かかっていたものが2.6秒まで早くなった。

xargsの並列実行

fpingと組み合わせるコマンドの機能を使って高速化を図ってみる。xargsの-Pオプションを使って並列実行する。fpingの並列実行数を指定することはできないのに対し、xargsの並列実行数は指定できるし、0を設定すれば可能な限りのプロセス数で並列実行してくれる。

xargsで並列実行しているので、出力順がバラバラになってしまう。最後にsortを加えて出力を整えた。実行時間は10秒から4秒に縮まった。

fpingの-tオプションを合わせてみる。

1秒未満で実行できるようになった。高速化としては十二分なので、-t以外のオプションをつける必要はもうないだろう。xargsとの組み合わせとして、-iオプション単体、-rオプション単体でも実行してみたが-tオプションほどは効果がでなかった。

結論としては、xargs -P0 -I%fping -t20の組み合わせが最速かつ簡単な記述となった。

-Linux
-,