大量のデータのtcpdumpを実行する必要があります。実際には、混合モードのままになっている2つのインターフェースから、大量のトラフィックを確認できます。
まとめると
現在、私はこのようにtcpdumpを使用しています:
ifconfig ethX promisc
ifconfig ethX promisc
tcpdump -n -C 1000 -z /data/compress.sh -i any -w /data/livedump/capture.pcap $FILTER
$FILTER
にはsrc/dstフィルターが含まれているため、-i any
を使用できます。これは、2つのインターフェイスがあり、2つではなく1つのスレッドでダンプを実行したいためです。
compress.sh
は、tarを別のCPUコアに割り当て、データを圧縮し、適切なファイル名を付けて、アーカイブの場所に移動します。
2つのインターフェースを指定できないため、フィルターを使用してany
インターフェースからダンプすることを選択しました。
現在、私はハウスキーピングをしていませんが、ディスクの監視を計画しており、100Gになったら、最も古いファイルのワイプを開始します。これで問題ありません。
ドロップされたパケットが表示されます。これは、数時間実行され、約250ギガのpcapファイルを収集したダンプからのものです。
430083369 packets captured
430115470 packets received by filter
32057 packets dropped by kernel <-- This is my concern
非常に多くのパケットがドロップされるのをどのように回避できますか?
実際に役立つ/proc/sys/net/core/rmem_max
と/proc/sys/net/core/rmem_default
の値を変更しました-実際には、破棄されたパケットの約半分だけが処理されました。
gulp も確認しました-gulpの問題は、1つのプロセスで複数のインターフェースをサポートしておらず、インターフェースにIPアドレスがないと怒るということです。残念ながら、それは私の場合、取引ブレーカーです。
次の問題は、交通がパイプを通って流れるときに、自動回転を実行できないことです。 1つの巨大な10 TBファイルを取得することはあまり効率的ではなく、10TB +のマシンがありませんRAMそれでWiresharkを実行できるので、それはありません。
何か提案はありますか?たぶん、私のトラフィックダンプを完全に行うより良い方法かもしれません。
一緒に暮らすことになっている解決策を見つけてしまいました。ドロップされたパッケージは.0047%から.00013%に減少しました-最初はそれほど多くはないように見えますが、数百万のパケットについて話していると、かなり多くなります。
解決策はいくつかのもので構成されていました。 1つは、マイケルハンプトンによって提案されたようにリングバッファーサイズを変更することでした。
また、ramfsを作成してライブダンプを行い、ramfsからディスクにダンプを移動するように圧縮スクリプトを書き直しました。これはほんの少しの量を減少させましたが、注目に値するほど十分です-ディスクのすべてのテストとベンチマークはディスクがボトルネックであってはならないことを示していますが。ここではアクセス時間が非常に重要だと思います。
ハイパースレッディングを無効にすると、思ったよりも多くのことができます。
tcpdumpは着信データをリングバッファーに格納します。 tcpdumpがその内容を処理する前にバッファーがオーバーフローすると、パケットが失われます。
デフォルトのリングバッファサイズはおそらく2048です (2MiB)。
バッファサイズを増やすには、-B
オプション:
tcpdump -B 4096 ...
より高速なディスクストレージを使用してみてください。