docker + fluentd + Elasticsearch + kibana4 で構築するお手軽NetFlowアナライザ

  • 17
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

この記事は慶應義塾大学SFC村井&徳田研 Advent Calendar 2015 の13日目の記事です。


はじめに

慶應義塾大学湘南藤沢キャンパス(SFC)では毎年11月にOpen Research Forumというイベントを開催しています。

すごくざっくり説明すると、日頃学生が取り組んでいる研究についての発表会みたいなものです。

私が専攻している情報工学分野の他にも国際政治や環境問題、脳科学、建築、言語コミュニケーションなどといった分野について、日ごろ学生が取り組んでいる内容についてのポスターセッションを行ったり、制作物を展示したりしています。

次年度以降も開催されると思うので、興味がありましたらぜひお立ち寄りくださいませ。


閑話休題、今回私はNOCの一員としてORFに携わらせていただいたのですが、その中で展示物として会場内のトラフィックをNetflowで収集して、それを可視化させたものを展示いたしました。

構成は以下のようになっております。 (2016/4/21 久しぶりに動かそうと思ったら動かなかったので、構成をちょっと変えました)

system.png

非常に粗雑な図でわかりづらいので解説をすると、会場のトラフィックをNetflowで取得し、それをfluentdで中継してElasticserachに蓄積し、Kibanaで可視化をする、といったものになっています。

受信側のFluentd, Elasticserach, Kibana は Dockerのコンテナとして管理しています。

なお、fluentdでNetflowを中継する際にはfluent-plugin-netflowを利用させていただきました。

使い方

ソースコードをこちらに置いておきました。
docker-engineとdocker-composeがインストールされていることを前提としています。

ちなみに、Ubuntu14.04.3 LTS と Debian 8 (jessie) で動作を確認しています。

(こういう解説記事を書くことが初めてなので「なんかここおかしいぞ」とか「ここは解説すべきだ」というのがあったら遠慮なく教えてください m(_ _)m )

NetFlow送信側の設定

上図でいう、単独でfluentdが置いてある部分です。

$ gem install fluentd
$ fluent-gem install fluent-plugin-netflow
$ cd sender
$ ./fluentd -c ./fluent.conf

fluentdをgemで入れた後、fluentd-plugin-netflowを入れて、fluentdを起動しています。
fluent.confは適宜いじってください。

NetFlow受信側の設定

dockerでクラスタリングされている部分です。
docker-composeで一気に立ち上げちゃいます。docker-compose、便利ですね。

$ cd aggregator
$ docker-compose up -d

完成図的なもの

こんな具合に可視化できます。可視化部はkibanaでいろいろいじれます。
20151120_netflow_edited.png

おわりに

Elasticsearchにレコードが蓄積すると表示や検索が重くなってしまうのが難点ですが、お手軽にモダンな監視環境が簡単に作れます。
各ディレクトリのfluent.confを書き換えればNetFlow以外もお手軽に流し込めるかなと思います。
何かの参考になれば幸いです。