この記事は慶應義塾大学SFC村井&徳田研 Advent Calendar 2015 の13日目の記事です。
はじめに
慶應義塾大学湘南藤沢キャンパス(SFC)では毎年11月にOpen Research Forumというイベントを開催しています。
すごくざっくり説明すると、日頃学生が取り組んでいる研究についての発表会みたいなものです。
私が専攻している情報工学分野の他にも国際政治や環境問題、脳科学、建築、言語コミュニケーションなどといった分野について、日ごろ学生が取り組んでいる内容についてのポスターセッションを行ったり、制作物を展示したりしています。
次年度以降も開催されると思うので、興味がありましたらぜひお立ち寄りくださいませ。
閑話休題、今回私はNOCの一員としてORFに携わらせていただいたのですが、その中で展示物として会場内のトラフィックをNetflowで収集して、それを可視化させたものを展示いたしました。
構成は以下のようになっております。 (2016/4/21 久しぶりに動かそうと思ったら動かなかったので、構成をちょっと変えました)
非常に粗雑な図でわかりづらいので解説をすると、会場のトラフィックをNetflowで取得し、それをfluentdで中継してElasticserachに蓄積し、Kibanaで可視化をする、といったものになっています。
受信側のFluentd, Elasticserach, Kibana は Dockerのコンテナとして管理しています。
なお、fluentdでNetflowを中継する際にはfluent-plugin-netflowを利用させていただきました。
使い方
ソースコードをこちらに置いておきました。
(追記) 当該リポジトリを削除したのでこちらに設定ファイルを置きます。2年前に使って以来動作を確認していないので動作は保証しません。
es:
image: itzg/elasticsearch
volumes:
- /mnt/elasticsearch-data:/usr/share/elasticsearch/data
ports:
- 9200:9200
- 9300:9300
kibana:
image: kibana
ports:
- 5601:5601
links:
- es:elasticsearch
# fluentd:
# build: ./fluentd
# ports:
# - 24224:24224
# - 24224:24224/udp
# links:
# - es:es
docker-engineとdocker-composeがインストールされていることを前提としています。
Ubuntu14.04.3 LTS と Debian 8 (jessie) で動作を確認しています。
NetFlow送信側の設定
上図でいう、ホスト側にfluentdが置いてある部分です。
$ gem install fluentd
$ fluent-gem install fluent-plugin-netflow fluent-plugin-elasicsearch
$ ./fluentd -c ./fluent.conf
fluentdをgemで入れた後、fluentd-plugin-netflowを入れて、fluentdを起動しています。
fluent.conf
の設定例は下記の通り。
# input
# source configuration is cited from github.com/repeatedly/fluent-plugin-netflow
<source>
type netflow
tag netflow.event
# optional parameters
bind 127.0.0.1
port 5140
# optional parser parameters
cache_ttl 6000
versions [5, 9]
</source>
# output
<match netflow.event>
@type elasticsearch
logstash_format true
# setting your host ip address
host YOUR_HOST_IP_ADDRESS
port 9200
# index name is arbitrary
index_name fluentd
type_name netflow
flush_interval 60
</match>
YOUR_HOST_IP_ADDRESS
の箇所にはelasticsearchが稼働しているホストのIPアドレスを指定してください。
NetFlow受信側の設定
dockerでホストされている部分です。
docker-composeで一気に立ち上げちゃいます。docker-compose、便利ですね。
$ docker-compose up -d
完成図的なもの
こんな具合に可視化とインタラクティブな分析ができます。可視化部はkibanaでいろいろいじれます。
おわりに
Elasticsearchにレコードが蓄積すると表示や検索が重くなってしまうのが難点ですが、お手軽にモダンな監視環境が簡単に作れます。
各ディレクトリのfluent.conf
を書き換えればNetFlow以外もお手軽に流し込めるかなと思います。
何かの参考になれば幸いです。