文:ジュピターテクノロジー よしひろ
単一スレッドの試験では、ソフトウェアを十分に評価したとは言い切れません。実環境で1台のルーターからのみNetFlowを受信するといったケースもあるでしょうが、メーカーが言っていることを鵜呑みにせず、手元で何パターンか試験してリリースしたいところです。今回の検証イメージは図1のようになっております。単純にサーバー、クライアント構成ですね。サーバー側のフローコレクターにはNetVizura NetFlow Analyzer(NetVizura NFA)をインストールしております。
そして、マルチスレッドのNetFlowシミュレーターの実現ステップは以下の通りです。
図1 検証図
そして、マルチスレッドのNetFlowシミュレーターの実現ステップは以下の通りです。
マルチスレッドNetFlowシミュレーターの実現ステップ:
- tcpreplayのインストール
- NetFlowパケットのキャプチャ
- parallelのインストール
- tcpreplayの実行
- サーバー(フローコレクター)側での受信確認
1. tcpreplayのインストール
tcpreplayは、tcpdump/Wiresharkで保存したパケットを再送出来るソフトウェアです。しかも速度を調整する、付属のtcpreplay-editでパケットを編集して再送といったことも出来る素晴らしいソフトウェアです。このソフトウェアを使って、キャプチャしたNetFlowをフローコレクターに再送してあげれば性能測定に利用できるといったコンセプトが本ブログ記事です。tcpreplayをUbuntu18.04.3 LTSにインストールするには、以下のコマンドを実行するだけです。
Successful packetsをみると5,006パケットとなっていますのでFlow Tool Bundleから受信したパケットを全て送信していることを確認出来ます。また、実行時間が200.20秒かかっているので1秒あたり25パケット投げています。こちらは、tcpreplay-editの-pオプション(packets/sec)を25と設定している為です。前述の記載通りNetFlow Genratorで収集したパケットは、1パケットあたり2flows含んでいます。従ってこのシミュレーター1スレッドあたり、50fpsのNetFlowをNetVizura NetFlow Analyzerに送信していることになります。今回、tcpreplay-editのオプション"--jobs 1"で実行していますので、50fps * 1 = 50fps となっていれば正しくフローの送受信が行われたということになります。ただし、単発で投げると上記の通り3分ほどで終了してしまいます。NetVizura NFAのグラフは直近5分間のデータを丸めて表示しますので少なくとも10分間以上投げ続けると奇麗な50fpsのグラフが表示されるはずです。それでは、tcpreplay-editのオプション-l(ループ数)を指定して再度実行してみましょう。
上記の通り、-lオプションで10回ループさせていますので、総送信パケット数は5,006 * 10 = 50,060となっております。また、時間も30分を超えていますね。それでは、NetVizura NetFlow Analyzerのfpsを表示出来る画面を見てみましょう。
上図の通り、最大50fpsに到達しています。シミュレーターが送信したfpsとサーバー側で受信したfpsが一致したことになります。
最後に20スレッドで-pオプション(packets/sec)を13を指定して試験してみましょう。到達予想fpsは、20 * 13 * 2 = 520fpsとなります。13packet/secですと、5,006/13=約385秒です。30分以上実行したいので、1800秒/385秒=約4.7。-lオプションは5を指定すればよさそうです。では、実際に実行してみましょう。
計算通り、520fpsに到達しておりますね。また、しっかりとマルチスレッドで受信出来ているかはNetVizura NetFlow AnalyzerのNetFlowモジュール→Exportersタブで確認することが出来ます。
192.168.11.1~192.168.11.20のエクスポータからフローを受信しているようにちゃんと見えています。本検証で、送信側と受信側のfpsカウントの同期がとれたことになり、かつ並列実行でのフローコレクターの試験が出来たことになります。
弊社では、フローコレクターNetVizura NetFlow Analyzerを販売しております。
主な特長としては、
92.168.81.121 port 2055
$ sudo apt-get install tcpreplay
2. NetFlowパケットのキャプチャ
ルーター実機から実際にNetFlowを設定し送信・キャプチャするでも良いですが、実機環境がない方もいらっしゃると思います。そういった方は、solarwinds社のFlow Tool Bundleを利用してください。Flow Tool BundleのNetFlow Generatorから25fpsのNetFlowをキャプチャしたもの(ファイル名:SW_25fps_10012flows_5006packets.pcap, パケット数5006, flow数10,012のキャプチャファイル)を今回利用します。※NetFlow Generatorからキャプチャしたパケットは、1パケットに2flows含まれています。よって、送信したパケット数の倍がflow数となります。なおFlow Tool Bundleについては、本記事では説明を省きますが、別記事にて紹介したいと思います。
3. parallelのインストール
Gnu parallelはシェル上で並列実行を実現するソフトウェアです。今回は本ソフトウェアを利用して並列実行を実現します。Ubuntu18.04.3 LTSへのインストール手順は、以下のコマンドを実行するだけです。
$ sudo apt-get install parallel
4. tcpreplayの実行
NetVizura NFA側でのグラフ表示を分割し、送信したNetFlowに抜けがないかを判別する為に送信元IPアドレス編集して送信しました。その為、tcpreplay-editを利用しています。
実行コマンドは以下の通りです。※1スレッドの例となります
$ date ; time seq 1 1 | sudo parallel --jobs 1 'sudo tcpreplay-edit --srcipmap=0.0.0.0/0:192.168.44.{}/32 --dstipmap=0.0.0.0/0:192.168.91.128/32 -i ens3 -p 25 ./SW_25fps_10012flows_5006packets.pcap'
Tue Nov 12 17:11:35 JST 2019
[sudo] password for demo:
Academic tradition requires you to cite works you base your article on.
When using programs that use GNU Parallel to process data for publication
please cite:
O. Tange (2011): GNU Parallel - The Command-Line Power Tool,
;login: The USENIX Magazine, February 2011:42-47.
This helps funding further development; AND IT WON'T COST YOU A CENT.
If you pay 10000 EUR you should feel free to use GNU Parallel without citing.
To silence this citation notice: run 'parallel --citation'.
Actual: 5006 packets (811124 bytes) sent in 200.20 seconds
Rated: 4051.5 Bps, 0.032 Mbps, 25.00 pps
Flows: 1 flows, 0.00 fps, 5006 flow packets, 0 non-flow
Statistics for network device: ens3
Successful packets: 5006
Failed packets: 0
Truncated packets: 0
Retried packets (ENOBUFS): 0
Retried packets (EAGAIN): 0
real 3m23.612s
user 3m20.300s
sys 0m0.142s
Tue Nov 12 17:11:35 JST 2019
[sudo] password for demo:
Academic tradition requires you to cite works you base your article on.
When using programs that use GNU Parallel to process data for publication
please cite:
O. Tange (2011): GNU Parallel - The Command-Line Power Tool,
;login: The USENIX Magazine, February 2011:42-47.
This helps funding further development; AND IT WON'T COST YOU A CENT.
If you pay 10000 EUR you should feel free to use GNU Parallel without citing.
To silence this citation notice: run 'parallel --citation'.
Actual: 5006 packets (811124 bytes) sent in 200.20 seconds
Rated: 4051.5 Bps, 0.032 Mbps, 25.00 pps
Flows: 1 flows, 0.00 fps, 5006 flow packets, 0 non-flow
Statistics for network device: ens3
Successful packets: 5006
Failed packets: 0
Truncated packets: 0
Retried packets (ENOBUFS): 0
Retried packets (EAGAIN): 0
real 3m23.612s
user 3m20.300s
sys 0m0.142s
Successful packetsをみると5,006パケットとなっていますのでFlow Tool Bundleから受信したパケットを全て送信していることを確認出来ます。また、実行時間が200.20秒かかっているので1秒あたり25パケット投げています。こちらは、tcpreplay-editの-pオプション(packets/sec)を25と設定している為です。前述の記載通りNetFlow Genratorで収集したパケットは、1パケットあたり2flows含んでいます。従ってこのシミュレーター1スレッドあたり、50fpsのNetFlowをNetVizura NetFlow Analyzerに送信していることになります。今回、tcpreplay-editのオプション"--jobs 1"で実行していますので、50fps * 1 = 50fps となっていれば正しくフローの送受信が行われたということになります。ただし、単発で投げると上記の通り3分ほどで終了してしまいます。NetVizura NFAのグラフは直近5分間のデータを丸めて表示しますので少なくとも10分間以上投げ続けると奇麗な50fpsのグラフが表示されるはずです。それでは、tcpreplay-editのオプション-l(ループ数)を指定して再度実行してみましょう。
$ date ; time seq 1 1 | sudo parallel --jobs 1 'sudo tcpreplay-edit -l 10 --srcipmap=0.0.0.0/0:192.168.44.{}/32 --dstipmap=0.0.0.0/0:192.168.91.128/32 -i ens3 -p 25 ./SW_25fps_10012flows_5006packets.pcap'
Tue Nov 12 18:12:35 JST 2019
[sudo] password for demo:
Academic tradition requires you to cite works you base your article on.
When using programs that use GNU Parallel to process data for publication
please cite:
O. Tange (2011): GNU Parallel - The Command-Line Power Tool,
;login: The USENIX Magazine, February 2011:42-47.
This helps funding further development; AND IT WON'T COST YOU A CENT.
If you pay 10000 EUR you should feel free to use GNU Parallel without citing.
To silence this citation notice: run 'parallel --citation'.
Actual: 50060 packets (8111240 bytes) sent in 2002.36 seconds
Rated: 4050.8 Bps, 0.032 Mbps, 25.00 pps
Flows: 1 flows, 0.00 fps, 500600 flow packets, 0 non-flow
Statistics for network device: ens3
Successful packets: 50060
Failed packets: 0
Truncated packets: 0
Retried packets (ENOBUFS): 0
Retried packets (EAGAIN): 0
Tue Nov 12 17:29:45 JST 2019
real 33m23.055s
user 33m22.198s
sys 0m0.335s
Tue Nov 12 18:12:35 JST 2019
[sudo] password for demo:
Academic tradition requires you to cite works you base your article on.
When using programs that use GNU Parallel to process data for publication
please cite:
O. Tange (2011): GNU Parallel - The Command-Line Power Tool,
;login: The USENIX Magazine, February 2011:42-47.
This helps funding further development; AND IT WON'T COST YOU A CENT.
If you pay 10000 EUR you should feel free to use GNU Parallel without citing.
To silence this citation notice: run 'parallel --citation'.
Actual: 50060 packets (8111240 bytes) sent in 2002.36 seconds
Rated: 4050.8 Bps, 0.032 Mbps, 25.00 pps
Flows: 1 flows, 0.00 fps, 500600 flow packets, 0 non-flow
Statistics for network device: ens3
Successful packets: 50060
Failed packets: 0
Truncated packets: 0
Retried packets (ENOBUFS): 0
Retried packets (EAGAIN): 0
real 33m23.055s
user 33m22.198s
sys 0m0.335s
上記の通り、-lオプションで10回ループさせていますので、総送信パケット数は5,006 * 10 = 50,060となっております。また、時間も30分を超えていますね。それでは、NetVizura NetFlow Analyzerのfpsを表示出来る画面を見てみましょう。
5. サーバー(フローコレクター)側での受信確認
最後に20スレッドで-pオプション(packets/sec)を13を指定して試験してみましょう。到達予想fpsは、20 * 13 * 2 = 520fpsとなります。13packet/secですと、5,006/13=約385秒です。30分以上実行したいので、1800秒/385秒=約4.7。-lオプションは5を指定すればよさそうです。では、実際に実行してみましょう。
$ date ; time seq 1 20 | sudo parallel --jobs 20 'sudo tcpreplay-edit -l 5 --srcipmap=0.0.0.0/0:192.168.11.{}/32 --dstipmap=0.0.0.0/0:192.168.91.128/32 -i ens3 -p 13 ./SW_25fps_10012flows_5006packets.pcap'
Actual: 25030 packets (4055620 bytes) sent in 1925.31 seconds
Rated: 2106.4 Bps, 0.016 Mbps, 13.00 pps
Flows: 1 flows, 0.00 fps, 125150 flow packets, 0 non-flow
Statistics for network device: ens3
Successful packets: 25030
Failed packets: 0
Truncated packets: 0
Retried packets (ENOBUFS): 0
Retried packets (EAGAIN): 0
Actual: 25030 packets (4055620 bytes) sent in 1925.32 seconds
Rated: 2106.4 Bps, 0.016 Mbps, 13.00 pps
Flows: 1 flows, 0.00 fps, 125150 flow packets, 0 non-flow
Statistics for network device: ens3
Successful packets: 25030
Failed packets: 0
Truncated packets: 0
Retried packets (ENOBUFS): 0
Retried packets (EAGAIN): 0
Actual: 25030 packets (4055620 bytes) sent in 1925.30 seconds
Rated: 2106.4 Bps, 0.016 Mbps, 13.00 pps
Flows: 1 flows, 0.00 fps, 125150 flow packets, 0 non-flow
Statistics for network device: ens3
・
・
(続く)
Actual: 25030 packets (4055620 bytes) sent in 1925.31 seconds
Rated: 2106.4 Bps, 0.016 Mbps, 13.00 pps
Flows: 1 flows, 0.00 fps, 125150 flow packets, 0 non-flow
Statistics for network device: ens3
Successful packets: 25030
Failed packets: 0
Truncated packets: 0
Retried packets (ENOBUFS): 0
Retried packets (EAGAIN): 0
Actual: 25030 packets (4055620 bytes) sent in 1925.32 seconds
Rated: 2106.4 Bps, 0.016 Mbps, 13.00 pps
Flows: 1 flows, 0.00 fps, 125150 flow packets, 0 non-flow
Statistics for network device: ens3
Successful packets: 25030
Failed packets: 0
Truncated packets: 0
Retried packets (ENOBUFS): 0
Retried packets (EAGAIN): 0
Actual: 25030 packets (4055620 bytes) sent in 1925.30 seconds
Rated: 2106.4 Bps, 0.016 Mbps, 13.00 pps
Flows: 1 flows, 0.00 fps, 125150 flow packets, 0 non-flow
Statistics for network device: ens3
・
・
(続く)
計算通り、520fpsに到達しておりますね。また、しっかりとマルチスレッドで受信出来ているかはNetVizura NetFlow AnalyzerのNetFlowモジュール→Exportersタブで確認することが出来ます。
192.168.11.1~192.168.11.20のエクスポータからフローを受信しているようにちゃんと見えています。本検証で、送信側と受信側のfpsカウントの同期がとれたことになり、かつ並列実行でのフローコレクターの試験が出来たことになります。
弊社では、フローコレクターNetVizura NetFlow Analyzerを販売しております。
主な特長としては、
- 軽量で低スペックサーバーでも動作
- サブスクリプションによる柔軟なライセンス契約
- 特定トラフィック・特定ユーザーの監視に適している
- ネットワークが遅い!の調査に使えるお手軽フローコレクター
92.168.81.121 port 2055