フロー解析のプロトコルといえば、NetFlowかSflowか、というステレオタイプの下で、自分の場合はsflowのほうを扱う機会がほとんどであり、全面的にsflowtoolというCLIのお世話になってます。最近githubの最新版で-Lオプションってのが追加されていて、フローを行志向で出力する際に、コマンドラインで指定した任意の項目を指定できるというようになってます。
前は-lオプションという固定項目の出力を利用して、もしそれに含まれない項目を参照したい場合は、その場で見たい項目が出力されるようにedit/buildしていたのが、項目名を覚えてしまえばこっちのほうが便利なのでよく使い始めています。
これの説明でだいたい足りるのですがどうも1文字レベル間違えたり他と混合して思い出せなかったりとするのでヘッダレベルとIPレベルの項目だけ備忘の表として書いておきます。
コマンドは、
sflowtool -L localtime,agent,inputPort,srcIP,srcIP6
みたいに使えます。
項目名が仕様と合致しないときもサイレントです。*1
- Lオプションの設計思想として、L3L4のプロトコル別できっちり分けたと見受け、一律集約した列でだすようなことはできないです。(つまり例えばsrc-ip列としてIPv4/IPv6を混在することができない)
(packet/sample-header)
| 項目名 | 説明 |
|---|---|
| datagramSourceIP | - |
| localtime | サンプルレコードを受信した時点のローカル時刻(サンプルの発生時刻であることを期待) |
| pcapTimestamp | pcapファイルから読み込んだ場合のpcapが示すそのレコード時刻 |
| agent | exporterのid |
| packetSequenceNo | - |
| sysUpTime | - |
| samplesInPacket | - |
| sampleSequenceNo | - |
| meanSkipCount | sampling-rateのこと |
| samplePool | - |
| dropEvents | - |
| inputPort | IN側のifindex |
| outputPort | OUT側のifindex |
IPv4/IPv6(L3/L4)
| 項目名 | 説明 |
|---|---|
| sampledPacketSize | - |
| IPSize | - |
| srcIP | IPv4の場合 |
| dstIP | IPv4の場合 |
| srcIP6 | IPv6の場合 |
| dstIP6 | IPv6の場合 |
| IPProtocol | - |
| IPTOS | IPv4の場合 |
| priority | IPv6の場合 |
| ICMPType | IPProtocol=1の場合 |
| ICMPCode | IPProtocol=1の場合 |
| TCPSrcPort | IPProtocol=6の場合 |
| TCPDstPort | IPProtocol=6の場合 |
| TCPFlags | IPProtocol=6の場合 |
| UDPSrcPort | IPProtocol=17の場合 |
| UDPDstPort | IPProtocol=17の場合 |
| UDPbytes*2 | IPProtocol=17の場合 |
この他、sflowtool.cから拾っていけば興味深い項目も出力できそうなのですが、対応できてる環境はレアな感じに思います。VLANとかに着目したい環境はすこしあるのかもですね。*3