knqyf263's blog

自分のためのメモとして残しておくためのブログ。

Open vSwitchでsFlow設定

今回はOpen vSwitchでsFlowを取得するための設定を行いたいと思います。 設定方法はOpen vSwitchの公式サイトを参考にしました( sFlow | Open vSwitch)。 というかそのままのことをやってみただけです。 自分の解釈なので間違ってたらすみません。。 sFlowの説明を以下に引用します。

sFlowは、LANスイッチやルーターなどを流れるトラフィックをモニターして、トラフィックに関する情報を送信するsFlowエージェントと、トラフィック情報を受信して解析するsFlowコレクタで構成します。sFlowエージェントは、主にLANスイッチに内蔵する形で実装されています。
引用元:ネットワーク管理者のためのトラフィック管理入門 - 第1章 sFlowとは:ITpro

今回はsFlowエージェントがOpen vSwitchで、sFlowコレクタは別にサーバを用意した環境を想定しています。 僕が用意した環境は以下のようになっています。

環境

sFlowエージェント
Open vSwitch:1.4.2
インタフェース:ovsbr0
IPアドレス:192.168.122.1

sFlowコレクタ
OS:Ubuntu 13.10
IPアドレス:192.168.122.22

sFlowエージェントの設定

sFlowの設定作成

今回はsFlowエージェントであるOpen vSwitchの設定をします。 本環境では以下の様な設定となります。

COLLECTOR_IP=192.168.122.22
COLLECTOR_PORT=6343
AGENT_IP=ovsbr0
HEADER_BYTES=128
SAMPLING_N=64
POLLING_SECS=10

COLLECTOR_IPはコレクタのIPアドレスで、192.168.122.22、COLLECTOR_PORTはコレクタに送る際の送信先ポート番号で、6343番としています。 6343番はsFlowのデフォルトポートです。 AGENT_IPはエージェントがsFlowのパケットを送信する際の送信元のIPアドレスで、今回はovsbr0としたので192.168.122.1から送信されます。
上記の値を以下のコマンドに代入します。

# ovs-vsctl — –id=@sflow create sflow agent=${AGENT_IP}  
target=\”${COLLECTOR_IP}:${COLLECTOR_PORT}\”  
header=${HEADER_BYTES} sampling=${SAMPLING_N} 
polling=${POLLING_SECS} — set bridge br0 sflow=@sflow

僕の環境では以下のようになります。

# ovs-vsctl -- --id=@s create sFlow agent=ovsbr0   
target=\"192.168.122.22:6343\" header=128  
sampling=64 polling=10 -- set Bridge ovsbr0 sflow=@s

sFlowの設定確認

sFlowの設定が正しく入っているかを確認します。

# ovs-vsctl list sflow
_uuid               : 4854f279-eadf-4257-ba1d-b1e862e5f9a2
agent               : "ovsbr0"
external_ids        : {}
header              : 128
polling             : 10
sampling            : 64
targets             : ["192.168.122.22:6343"]

次に、正しくパケットが流れているかを確認します。

# tcpdump -ni ovsbr0 udp port 6343
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode  
listening on ovsbr0, link-type EN10MB (Ethernet), capture size 65535 bytes  
19:22:30.269169 IP 192.168.122.1.46682 > 192.168.122.22.6343: sFlowv5, IPv4 agent 192.168.122.1, agent-id 2, length 260  
19:22:35.269066 IP 192.168.122.1.46682 > 192.168.122.22.6343: sFlowv5, IPv4 agent 192.168.122.1, agent-id 1, length 144  
19:22:37.269026 IP 192.168.122.1.46682 > 192.168.122.22.6343: sFlowv5, IPv4 agent 192.168.122.1, agent-id 1, length 144  

sFlowエージェントのIPアドレス192.168.122.1からsFlowコレクタのIPアドレス192.168.122.22のポート番号の6343番に対してUDPパケットが送信されているのが確認できる。

sFlowの設定削除

sFlowの設定を削除したくなった場合、以下のコマンドで削除することができる。

$ ovs-vsctl remove bridge ovsbr0 sflow $SFLOWUUID 

$SFLOWUUIDは、上の設定確認で表示されている_uuidなので、今回は

$ ovs-vsctl remove bridge ovsbr0 sflow 4854f279-eadf-4257-ba1d-b1e862e5f9a2

で削除できる。
また、sFlowの設定全てを削除する場合は、removeでなくclearを使っても良い。

$ ovs-vsctl clear Bridge ovsbr0 sflow

sFlowコレクタの設定は次回以降にします。