2015年1月30日金曜日

Arista-SWのsFlowをfluentdのNetflow-plaginで受信してみる

■目的
 fluentd+elasticsearch+kibanaの王道構成環境があるのだがelasticsearchの容量がいっぱいになってきたのでcuratorを使って容量削減する方法を調べていたらNetflowを受ける事ができるという記事を見かけたのでちょっと試してみた。
AristaSWではNetflowの機能は無く、代わりにsFlowの機能があるので今回はsFlowで試してみる。

■参考にさせて頂いたサイト
http://komeiy.hatenablog.com/entry/2014/09/26/212000

■fluentdの設定
今回の構成はfluentd+elasticsearch+kibanaを同一筐体で全てサービスさせている。
まずはfluentdで「fluent-plugin-netflow」をgem installする

/usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-netflow
Fetching: bindata-2.1.0.gem (100%)
Fetching: fluent-plugin-netflow-0.0.4.gem (100%)
Successfully installed bindata-2.1.0
Successfully installed fluent-plugin-netflow-0.0.4
2 gems installed
Installing ri documentation for bindata-2.1.0...
Installing ri documentation for fluent-plugin-netflow-0.0.4...
Installing RDoc documentation for bindata-2.1.0...
Installing RDoc documentation for fluent-plugin-netflow-0.0.4...
正常に終了した。

これでfluentdの設定でtype netflowが使えるようになった。
次にfluentdの設定で以下のように設定する。
<source>
  type netflow
  tag netflow.event
  port 5141
</source>

<match netflow.**>
  type elasticsearch
  host 10.1.1.1
  port 9200
  type_name netflow
  include_tag_key true
  logstash_format true
  logstash_prefix flow
  buffer_type file
  buffer_path /tmp/out_elasticsearch.netflow.*.buffer
  buffer_chunk_limit 8m
  buffer_queue_limit 256
  flush_interval 10s
  retry_limit 17
  retry_wait 1s
</match>
一度サービスを再起動して正常に起動することを確認する
#service td-agent restart

■AristaSWの設定
次にArista-SWでsFlowを有効にする。
Cisco機器等のNetflowとsFlowの違いは以下サイトで学んだ。
http://blogs.manageengine.jp/an-introduction-to-sflow-technology-and-a-brief-on-sflow-vs-netflow-technology/

Aristaで以下設定を行う
sflow polling-interval 30
sflow destination 10.1.1.1 5141
sflow source 192.168.1.1
sflow run
destination(宛先)の設定は先ほど設定したfluentdのSVを指定する。ポートも5141を指定する。
#sh sflow コマンドを実行するとsflowが動作しているか確認する事が出来る
arista#sh sflow
sFlow Configuration
-------------------
Destination(s):
  10.1.1.1:5141 ( VRF: default )
Source(s):
  192.168.1.1 ( VRF: default )
  :: ( default ) ( VRF: default )
Sample Rate: 1048576 ( default )
Polling Interval (sec): 30.0

Status
------
Running: Yes
Polling On: Yes
Sampling On: Yes ( default )
Send Datagrams:
  Yes ( VRF: default )
Hardware Sample Rate: 65535

Statistics
----------
Total Packets: 3399559
Number of Samples: 0
Sample Pool: 0
Hardware Trigger: 0
Number of Datagrams: 46
Running:Yesになっているのでsflowが動作し、TotalPacketsの値も増えているので送れているようだ。

■kibanaで確認してみる。
ここまでで正常にAristaからsflowがSVに送られている筈
fluentdのタグ設定などに誤りがなければelasticsearchのDBに情報が入り、kibanaから確認出来る、筈・・・
と思って見てみたら情報が入っていない・・・

td-agentのログを見てみたところ
#tail -n 100 /var/log/td-agent/td-agent.log
2015-01-29 21:11:45 +0900 [warn]: Ignoring Netflow version v0
2015-01-29 21:12:15 +0900 [warn]: Ignoring Netflow version v0
2015-01-29 21:12:45 +0900 [warn]: Ignoring Netflow version v0
2015-01-29 21:13:15 +0900 [warn]: Ignoring Netflow version v0
2015-01-29 21:13:45 +0900 [warn]: Ignoring Netflow version v0
2015-01-29 21:14:15 +0900 [warn]: Ignoring Netflow version v0
2015-01-29 21:14:45 +0900 [warn]: Ignoring Netflow version v0
2015-01-29 21:15:15 +0900 [warn]: Ignoring Netflow version v0
2015-01-29 21:15:45 +0900 [warn]: Ignoring Netflow version v0
2015-01-29 21:16:15 +0900 [warn]: Ignoring Netflow version v0
2015-01-29 21:16:45 +0900 [warn]: Ignoring Netflow version v0
2015-01-29 21:17:15 +0900 [warn]: Ignoring Netflow version v0
2015-01-29 21:17:45 +0900 [warn]: Ignoring Netflow version v0
2015-01-29 21:18:15 +0900 [warn]: Ignoring Netflow version v0
2015-01-29 21:18:45 +0900 [warn]: Ignoring Netflow version v0
2015-01-29 21:19:15 +0900 [warn]: Ignoring Netflow version v0
2015-01-29 21:19:45 +0900 [warn]: Ignoring Netflow version v0
2015-01-29 21:20:15 +0900 [warn]: Ignoring Netflow version v0
2015-01-29 21:20:45 +0900 [warn]: Ignoring Netflow version v0
2015-01-29 21:21:15 +0900 [warn]: Ignoring Netflow version v0
2015-01-29 21:21:45 +0900 [warn]: Ignoring Netflow version v0
2015-01-29 21:22:15 +0900 [warn]: Ignoring Netflow version v0
2015-01-29 21:22:45 +0900 [warn]: Ignoring Netflow version v0
2015-01-29 21:23:15 +0900 [warn]: Ignoring Netflow version v0
2015-01-29 21:23:45 +0900 [warn]: Ignoring Netflow version v0
2015-01-29 21:24:15 +0900 [warn]: Ignoring Netflow version v0

いい感じに30秒毎にログが出力されているのでどうやらAristaから送っているsFlowのversionがtd-agentのNetflow-Pluginでは受け取れないようだ。
https://github.com/repeatedly/fluent-plugin-netflow
にも
versions [5, 9]
しか受け取れなさそうな記述があるし・・・


■終わり
Aristaではversionを指定出来そうな設定がないので今回は諦めました。
今度CiscoのNetflowで送れるかを試してみようと思います。

私の体験が誰かの生産性向上に役立っていただけることを祈って

1 件のコメント:

  1. 設定内容参考にさせていただきました。
    sflowのversionが5,9だとnetflowのpluginで受け取れるのでしょうか。
    ちなみにCentOS6.7@VMでfluent-plugin-netflowを利用すると以下エラーで進めませんね。。なぜだろう。。

    2015-09-11 07:21:47 -0700 [error]: dry run failed: uninitialized constant Fluent::TextParser::Parser

    返信削除