テレメトリ（telemetry）としてのsFlow/NetFlow

#テレメトリ（telemetry）としてのsFlow/NetFlow

テレメトリは、遠隔測定法を意味します。
遠隔測定法は、観測対象から離れた地点から様々な観測を行い、そのデータを取得する技術である。観測地点に常駐することが物理的・経済的あるいは安全上困難な場合や、観測対象が移動する場合に使用される。テレメトリー あるいはテレメタリング ということもある。 装置そのものは、テレメータ と呼ばれる。（Wikipedia）

###昨今のテレメトリ
トラフィック分析においては、sFlowが作成された当時もテレメトリと言っていたし、古くはRMON/RMON2もそう言われていました。
要するに管理マネージャから見た遠隔ポイントの分析です。

昨今、脚光を浴びているテレメトリは、単純に遠隔ポイントの分析という事ではなく、標準的なネットワーク管理プロトコルであるSNMPの弱点を補う分析となります。

SNMPは、SNMPマネージャーからSNMPエージェントに対してSNMPリクエストを発行するSNMPポーリングを行いSNMP情報を収集（レスポンス）します。
流れとしては、
・SNMPマネージャーで対象機器の収集項目を設定（転送バイト数、転送フレーム数、CPU使用率など）
・SNMPエージェントに対して収集項目のMIB-OIDが記載されたSNMP Get Request(UDP DestinationPort:161)を発行
・SNMPエージェントが、SNMPリクエストを受信
・必要情報を収集しSNMP Get Responceとして成形し、SNMPマネージャーに返送する
となります。
このリクエスト＆レスポンスの作業を５分等の間隔で収集対象ごと（ルータ、スイッチ、それらのインターフェースなど）にやり取りします。
問題点としては、
・監視対象（機器やインターフェースや取得対象情報）が多くなってきているので大量のリクエストが必要
・大量のリクエストに返答するための処理負荷
・リクエストからレスポンス完結までに時間がかかる
　５分以上かかるケースもあるので、粒度が粗くなる（５分間隔以内の１分程度の粒度での分析が難しい）
・リクエスト＆レスポンスデータともに大きくなるのでネットワーク帯域やスループットに影響を与える
が上げられます。
これらの負荷軽減を行うために考えられているのが昨今のテレメトリです。
SNMPマネージャーからのリクエストに対してレスポンスするのではなく、
定期的なタイミングで必要情報をSNMPマネージャーからのリクエストなして、機器側から定期的に送付する仕組みです。

#####昨今のテレメトリ（telemetry）としてsFlow/NetFlowを考えると、まさにテレメトリ

###sFlowでは

サンプリングベースのテクノロジー
・スイッチやネットワークのパフォーマンスへの影響が少ない
・ハイスピードネットワーク内のトラフィックをモニタリングする事を目的として
新たに考案されたテクノロジー
米国InMon社によって公開 ： Open Standard – IETF RFC3176(sFlow V4)
ネットワーク機器埋め込み型として設計されたモニタリング・テクノロジー
・ルータスイッチ内に実装されスイッチのASICにて処理
・全てのスイッチ・ポートをモニター
スイッチのsFlowエージェントがsFlowを生成し、sFlowマネージャーへ即座に送信
・MIBやキャッシュ上で保持・カウントしない

データとしては、２つの要素に分けられて、
ひとつが、
トラフィックフローで、これは、流れるトラフィックパケットを特定の割合でサンプリングし成形して送出
もうひとつが、
SNMPカウンターサンプルで、SNMPの値を機器内で収集して成形して定期的なタイミングで送出
となります。

送出の仕組みとしては、以下のようなイメージです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705452/2e8c3701-b4b7-9853-547f-d9e14c8d8920.png)

スイッチ・ルータを通過するパケットをサンプリングして、sFlow情報として成形してマネージャーに送出します。送出タイミングは、サンプリング＋成型後即座。これがフローサンプルです。
SNMPカウンター情報に関しては、スイッチ・ルータのsFlowエージェントが、30秒等の定期的なタイミングで収集成形してマネージャーに送出します。送出タイミングは、定期的。これがSNMPカウンターサンプルです。

送出される情報の例は以下になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705452/949288b7-768a-4cce-5385-424956a8e61a.png)

###NetFlowでは
NetFlowは、Ciscoが開発した技術
キャッシュ・ベースのテクノロジー（キャッシュ上でフローをカウント）
L3以上のトラフィックの分析が可能
NetFlowは、フローとして集計された情報として送られる（マネジャー側でフロー情報化する必要がない）
以下の図の内容を、フローとして、統計値（フレーム数・バイト数）を
NetFlowキャッシュ内でカウント

以下のようなNetFlowキャッシュ内で保持・カウントしている情報を、特定のタイミング（条件）でエクスポート
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705452/c05a384e-9e03-31fb-96c9-eb3e49b2e504.png)
フローをエクスポートするタイミング
・インアクティブ・タイマー（デフォルト：１５秒）
－該当のフローセットのセッションが１５秒間インアクティブ（無音）の時、エクスポート
－コマンド ” ip flow-cache timeout inactive 15 “で設定
・アクティブ・タイマー（デフォルト：３０分）
－該当のフローセットのセッションが継続している場合、３０分経過時点で、エクスポート
－コマンド ” ip flow-cache timeout active 30 “で設定
・TCPコネクションのRSTやFINフラグの検出
・NetFlowキャッシュがフル
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705452/1443c63c-d280-5958-e6b5-ea7648cf4046.png)
このようにNetFlowでは、トラフィック情報をNetFlowキャッシュ内で保持・カウントし、そのトラフィックフロー情報（sFlowのフローサンプル相当）を上記「フローをエクスポートするタイミング」でエクスポートしてマネージャーに送出する
ただし、SNMP値に関しては、sFlowのようにSNMPカウンターサンプル相当の情報を送出しないので、従来通りマネージャー側からのSNMPによるリクエスト＆レスポンスによる収集が必要になる。フロー情報だけでもSNMP相当のトラフィック量の情報は把握できると考えます。

#####このようにネットワーク機器やネットワーク帯域の負荷を軽減し、かつ、詳細粒度で把握できるテレメトリ（telemetry）としての分析が、sFlow/NetFlowを利用することで可能になります。