sflowもFluentd+Elastic Searchに入れて可視化してみた
以前にNetflowについて書いたのですが、sflowもelastcsearchに入れたいなと思って色々調べてみました。ちなみに前回からkibanaのバージョンをあげましてkibana 4はこんな画面になってます。検証用のデータですが気持ち的にIPアドレスは隠しました。
ホワイトを基調のデザインに一新されており個人的には好感が持てるデザインになっています。機能的にはグラフオプションが強化されて実現できることが多くなっています。
- kibana 4になり、対応するElastic Searchのバージョンも1.4以降に変更になっているため注意が必要です
調査フェーズ
logstashを使ってElastic Searchへ入れるパターン
まず、調べてたところlogstashで以下のような方法があるようなので少し調査。
https://github.com/NETWAYS/sflow
Tiny sflow collector and parser script based on eventmachine. It listens for sflow v5 samples, parses them and sends it to logstash.
インストール自体は楽そうですが、issuesのやりとりやflow sourceを都度設定ファイルやhostsに書かなければいけない(っぽい)点とsnmpがなぜか絡んでくるのがどうしてもすっきりせずパスしました。
(できれば設定はtd-agent.confで統一したいという思いもありすいません)
sflowをnetflowに変換してあれこれするパターン
世の中には便利なものがあるもので、今回sflowtool
を使うことにしました。結局、NETWAYS/sflowのissueでもsflowtoolをwrapperとして使用する方法について記載がありました。
sflowtoolは名前の通りsflowを扱うためのツールなのですが、任意のポートで受信し他のコレクタに渡したりcsvで吐き出したり、pcap形式に落としたり、あと今回重要なnetflowに対応したコレクタにフローを飛ばすことも可能です。
ということで、sflowtool -> fluentd -> elastic searchの流れでデータを注入することにしました。
sflowtoolインストール
最新版はgithubにあります。Versionは3.28でした。
git clone https://github.com/kplimack/sflowtool.git cd sflowtool/
cloneしたら、configure / make / make installしてください。
パスが通っていれば$ sflowtool
で起動します。
参考)以下のログが出た人へ
v6 socket() creation failed, Address family not supported by protocol
デフォルトでlisten on both IPv4 and IPv6 socketsなので、ipv6をdisableにしている人は-4
オプションを使ってください。
sflowを受信してみる
起動して受信すると以下の項目が値と共に出力されます。
startDatagram datagramSourceIP datagramSize unixSecondsUTC datagramVersion agentSubId agent packetSequenceNo sysUpTime samplesInPacket startSample ---------------------- sampleType_tag sampleType sampleSequenceNo sourceId meanSkipCount samplePool dropEvents inputPort outputPort flowBlock_tag flowSampleType headerProtocol sampledPacketSize strippedBytes headerLen dstMAC srcMAC decodedVLAN decodedPriority IPSize ip.tot_len srcIP dstIP IPProtocol IPTOS IPTTL TCPSrcPort TCPDstPort TCPFlags endSample ---------------------- endDatagram =================================
NetFlowに飛ばしたいのであれば以下のオプションを使います。
To forward Cisco NetFlow v5 records to UDP port 9991 on host collector.mysite.com, the options would be: % ./sflowtool -p 6343 -c collector.mysite.com -d 9991
Fluentd(td-agent)で受けてstdoutに出るようtagをdebugにしてみました。一回sflowtoolが受信するのでhostが127.0.0.1になってしまうのが残念です。ただ、本来のNetflowへ変換という意味ではVersion 5へしっかりと変換してくれました。
2015-09-02 23:23:10 +0900 debug.netflow: {"version":"5","flow_seq_num":"19","engine_type":"0","engine_id":"0","sampling_algorithm":"0","sampling_interval":"0","flow_records":"1","ipv4_src_addr":"1.1.4.1","ipv4_dst_addr":"1.1.7.1","ipv4_next_hop":"0.0.0.0","input_snmp":"1026","output_snmp":"1026","in_pkts":"32768","in_bytes":"1507328","first_switched":"2015-09-02T23:23:10.000Z","last_switched":"2015-09-02T23:23:10.000Z","l4_src_port":"52193","l4_dst_port":"80","tcp_flags":"16","protocol":"6","src_tos":"0","src_as":"0","dst_as":"0","src_mask":"0","dst_mask":"0","host":"127.0.0.1"}
ここからのElastic Searchへの挿入は前回と同様です。
その他
- Elastic Search pluginで
@timestamp
と_source
は挿入されるのでkibanaから見ると前回と同じ仕様です - sflowtoolが増えましたが、既存のFluentdの設計を踏襲できるのでシンプルで分かりやすいと思っています
シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。
サーバ/インフラエンジニア養成読本 ログ収集~可視化編 [現場主導のデータ分析環境を構築!] (Software Design plus)
- 作者: 鈴木健太,吉田健太郎,大谷純,道井俊介
- 出版社/メーカー: 技術評論社
- 発売日: 2014/08/08
- メディア: 大型本
- この商品を含むブログ (1件) を見る
高速スケーラブル検索エンジン ElasticSearch Server (アスキー書籍)
- 作者: Rafal Kuc (lにストローク符号、cにアクサン・テギュ付く),Marek Rogozinski (nにアクサン・テギュ付く)
- 出版社/メーカー: KADOKAWA / アスキー・メディアワークス
- 発売日: 2014/03/25
- メディア: Kindle版
- この商品を含むブログ (3件) を見る