web-dev-qa-db-ja.com

TCP srcまたはdstホストへの接続に関する統計を監視および収集します

2つのホスト(AとB)間で送信されたTCP/UDPパケットの統計を収集したいと思います。次の情報を取得するためにAとBにインストールするツールを探しています。

  • kb /秒
  • パケット/秒
  • これまでに送信された(累積)バイト
  • これまでに送信された(累積)パケット
  • スライディングウィンドウの平均

iptrafがありますが、コマンドラインから設定するのに苦労しています。 tcptrackはデータを集約しません...私は少し迷っています..:Dスクリプトを作成できますtcpdump:/

おそらく、私は非常に明白な何かを見逃しています...

更新:両方のサーバーがubuntu14.04を実行します。

更新2:tcpflowを試してみました(ログはかなり速く成長します)。collectIdを確認します

更新3:特定のIPまたはネットワークへのトラフィックを追跡する最も簡単な方法は、IPTABLESおよび IPTABLES collectD プラグインを使用することです。

4
Skarab

これは非常に興味深い質問です。
答えはネットワークの設定によって異なりますが、いくつかのケースについて説明します。
CollectDが答えの一部であると私は確信しています。

まず、メトリックを「毎秒」収集する必要があるため、 CollectDを構成 間隔値

ソリューション番号1-ServerAは特定のインターフェイスでServerBと排他的に通信していますか? (およびその逆)
CollectDを インターフェースプラグイン でインストールします。それはあなたが必要とするものの一部を「収集」します:

  • kb /秒
  • パケット/秒
  • これまでに送信された(累積)バイト
  • これまでに送信された(累積)パケット

CollectDメトリックをGraphiteなどの時系列データベースに転送します。
これらのメトリックを視覚化して、 移動平均関数を適用 できるようになります。それはあなたのニーズにマッチします:

  • スライディングウィンドウの平均


解決策N°2-ServerAはTCPおよび特定のポートでのみServerBと通信していますか?(およびその逆)
似ている。 CollectDを使用し、特定のTCPポートでのみトラフィックを監視します CollectDとTCPConnsプラグイン を使用します。また、 " スライディングウィンドウの平均 "

2
Martin Magakian

これを行う1つの方法は、tsharkを使用することです。

以下をせよ :

  1. Tshark/tcpdump/whateverを使用して、両側の関連するフィルターでトラフィックをキャプチャし、pcap形式のファイルを生成します。
  2. 終了したら、キャプチャファイルに対してtsharkオプション_-z_を実行します。

次に:

  • 1秒あたりのパケットレートとバイトレートを取得するには:

    _tshark -q -r myfile.cap -z io,stat,1_

これは次のようなものを生成します:

_=============================
| IO Statistics             |
|                           |
| Interval size: 1 secs     |
| Col 1: Frames and bytes   |
|---------------------------|
|          |1               |
| Interval | Frames | Bytes |
|---------------------------|
| 0 <> 1   |     29 |  2026 |
| 1 <> 2   |     35 |  2440 |
| 2 <> 3   |     35 |  2440 |
| 3 <> 4   |     43 |  2920 |
| 4 <> 5   |     93 |  5776 |
| 5 <> 5   |     77 | 25758 |
=============================
_
  • パケットとバイトの集約、および平均TCPウィンドウ:

    tshark -q -r myfile.cap -z io,stat,0,"AVG(tcp.window_size)tcp.window_size"

結果はこの種のものになります:

_==============================================
| IO Statistics                              |
|                                            |
| Interval size: 5.109 secs (dur)            |
| Col 1: Frames and bytes                    |
|     2: AVG(tcp.window_size)tcp.window_size |
|--------------------------------------------|
|                |1               |2      |  |
| Interval       | Frames | Bytes |  AVG  |  |
|-----------------------------------------|  |
| 0.000 <> 5.109 |    312 | 41360 | 41363 |  |
==============================================
_


TCPのウィンドウ平均サイズを方程式から外すと(トラフィックを検査するツールがないとこのメトリックは得られません)、標準の監視ツールを使用して、パケットレート/集約について必要なものをグラフ化できます。たとえば cacti を使用する任意のプロトコル。

編集:(賛成の)他の答えを与えられたスライディングウィンドウが何を意味するのかわからない。ある日付から始まる特定の期間のメトリックの平均を意味する場合(TCPウィンドウサイズではない))、tsharkコマンドを使用して日付フィルターをスローすることですべてを実行できます。

しかし、あなたは単にグローバルな監視ソリューションを求めているようです。 Cacti、collectd、zabbix、shinken、nagios(icingaなどを使用)は、ニーズに合わせて問題なく、必要に応じて特定のトラフィックをフィルタリングできるようにカスタマイズできる必要があります。

4
Xavier Lucas

両方のサーバーのポートミラーを作成し、2台のコンピューターからwiresharkを実行してデータを収集します。したがって、本番環境のサーバーには影響しません。

2
yagmoth555

1〜2時間のテストを実行するための私のソリューション:

  • 収集するtcpflow TCPフロー、結果ファイル名にタイムスタンプを含めるためにtcpflow -i eth0 -FTを使用します
  • report.xml(DFXML)を解析して、閉じた接続に関するレポートを作成します
  • キャプチャされたトラフィックを含むファイル名を解析し、サイズを記録して、測定中に進行中の接続についてレポートします
  • matplotlibを使用してグラフをプロットします

利点:

  • 何が起こっているかについての詳細なビュー

不利益:

  • キャプチャトラフィックのあるファイルは非常に速く成長します
1
Skarab