2020年9月30日水曜日

NetFlowプローブnProbeでサンプリング設定

先日打ち合わせを行ったお客様から、nProbeのプロキシモードでサンプリングを実装できないか?といったお問い合わせを頂きましたので、サンプリング設定方法をご紹介したいと思います。

文:ジュピターテクノロジー よしひろ

/etc/nprobe/nprobe.confに以下のオプションを付加することによって、サンプリングを実現します。

##--sample-rate|-S <pkt rate>:<flow collection rate>:<flow export rate>
--sample-rate=1:1:100


セパレータはコロン(:)で、それぞれ対応するモードと役割が異なります。

<pkt rate>は、-iオプションを使ったProbeモードで有効な値です。

入力パケットのサンプリングレートを管理します。

例えば、100とした場合100パケットに1つのパケットのみを処理し、他のパケットは破棄します。


<flow collection rate>は、Collectorモードで動作します(オプション--collector-port有効時)。

このオプションは、実際にはサンプリングはせずにIN_BYTES(入力バイト)の掛け算式に使われ入力バイトを増やします。

例えば、フローのIN_BYTESが250でflow collection rateが100の場合、2,500バイトとして計上されます。


<flow export rate>は、nProbeがコレクターにエクスポートするレートを設定します。

-n|--collectorオプションを指定した場合に有効なオプションです。

例えば100を設定した場合、コレクターが100フロー受信したら1フローのみコレクターに送信します。


<flow export rate>を実際に検証しました。

検証環境は、以下の通りです。

図1 サンプリング検証環境

以前こちらの記事でご紹介した、Soalrwinds社のNetFlow Generatorから100fps(flow per second)でNetFlowをエクスポートし、nProbeが1/100にサンプリング、つまり1fpsとなれば正しくnProbeがサンプリングしてくれていることが分かります。

実際に図1のWiresharkで受信したパケットが以下の図2となります。

図2 サンプリング後のNetFlow

nProbeのIPアドレスから、15秒おきに15flowsのFlowSetが送信されておりました。
つまり、15flows/15second = 1fpsとなります。

今回の打ち合わせでサンプリングが話題となった経緯は、既存で利用している製品がサンプリングで高負荷環境に対応しているといったお話からでした。

サンプリングはかけないことが望ましいです。しかし、性能要件を明らかに上回る環境での利用時には、本機能が役に立つと思います。

本記事で扱っているntop社のnProbe, ntopng製品にご興味のある方は、以下のリンクから弊社までお問い合わせください!