Netflowコレクターを無償のFluend+ElasticSearch+Kibanaで構築する
イケてるFlowコレクターを探していましたが、見た目・開発状況含めてどうもググッとこず、結局Fluend+ElasticSearch+Kibanaの組み合わせで導入しました。
この組み合わせはこちらのサーバ/インフラエンジニア養成読本のログ収集~可視化編のKibana特集でよりいっそう注目されており必見です。
結論としては、有償のソフトウェアだとだと時間が経つにつれてデータ間隔を荒くするよな機能が実装されていたりするので、そういった機能が必要な人には厳しいかもしれません。 個人的には、直近のある程度の期間の情報が確認できればいいのでデータローテーションで十分です。
まだ触りつくせてないですが、クエリが複雑すぎて学習コストがかかるとかもなさそうです。
見た目がかっこいいのがいいですね。デフォルトは流行りのDarkです。
事前準備
- javaのインストール
- Netflowを送信する機器の準備
ElasticSearchインストール
最新版は適宜確認してください。バージョンにこだわりがなければ、パッケージインストールの方が後々いいかもしれません。
$ wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.3.2.tar.gz $ tar xzvf elasticsearch-1.3.2.tar.gz $ sudo mv elasticsearch-1.3.2 /opt/elasticsearch
ElasticSearch初期設定
設定はelasticsearch.ymlで行います。
$ sudo vim /opt/elasticsearch/config/elasticsearch.yml index.number_of_replicas: 0 index.number_of_shards: 1 path.data: /data path.logs: /var/log/elasticsearch/logs
バックグラウンドで起動するのは以下の通りです。
$ sudo /opt/elasticsearch/bin/elasticsearch -d
デフォルトで9200番で起動するのでcurlを使って確認してください。JSON形式で応答があるはずです。
kibanaインストール
こちも最新版は適宜確認してください。
$ wget https://download.elasticsearch.org/kibana/kibana/kibana-3.1.0.tar.gz $ sudo mv kibana-3.1.0 /opt/kibana
kibana初期設定
初期設定は/config.jsを使用します。以下を確認してください。
$ vim /opt/kibana/config.js elasticsearch: "http://"+window.location.hostname+":9200",
今回、kibanaへのアクセスはnginxを使用します。ここはインストールおよび設定は省きます。 rootを/opt/kibanaに設定しておけばOKです。
Fluetndインストール
Fluentd安定版の配布パッケージであるtd-agentを使用します。 Treasure Data社が配布しているパッケージを以下のコマンドを使用してインストールします。
curl -L http://toolbelt.treasuredata.com/sh/install-redhat.sh | sh $ sudo /etc/init.d/td-agent start Starting td-agent: [ OK ]
Fluetnd Pluginインストール
FluentdはPluginをインストールして機能を追加します。elasticsearchにデータの受け渡しをするため「fluent-plugin-elasticsearch」をインストールします。 ruby-develとか入ってないとエラーになるかもしれません。
$ sudo /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-elasticsearch
Netflowを使用するのですが、こちらもPluginを追加する必要があります。 sflowは対応しているのかな?後々フォーマットの違いを確認してみようかと思います。
$ sudo /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-netflow
Fluetnd設定
Fluetdはsourceとmatchを定義して動作を定義します。 簡単なところで、デフォルトのSyslogタイプを使用した例を記載します。 以下のように設定すると、port番号5140で待ち受けてログに出力する動作をします。 sourceの中のtagとmatchの中のtypeが紐づいています。
<source> type syslog port 5140 bind 0.0.0.0 tag system </source> <match system.**> type stdout </match>
以下がfluetdでNetflowを待ち受ける設定です。Pluginのおかげで非常に楽に設定ができます。 ここでは最低限の設定になっているので、cache ttlなど適宜設定してください。
$ sudo vim /etc/td-agent/td-agent.conf <match netflow.**> type elasticsearch host localhost port 9200 type_name netflow logstash_format true logstash_prefix flow logstash_dateformat %Y%m%d </match> <source> type netflow tag netflow.event port 5141 </source>
confファイルを設定したらサービスを再起動してください。
$ sudo /etc/init.d/td-agent restart
後はNetflowに対応した機器でサーバのUDP5141へFlowを送ってください。 すべてうまくいっていればkibanaの画面からFlow情報が見えるかと思います。
※kibanaのダッシュボードの設定は自身で自由にカスタマイズ可能です。 tableで一覧を表示してDestinationやSourceのTopNなどを出してあげるのがよいかと思います。
ElasticSearchの定期的なIndex削除
こちらを参考にさせて頂きました。
curator で Kibana 用の elasticsearch のインデックスを定期的に削除する - Qiita
現在はyumからインストールするとversion2.0.0になるので、コマンド体系が異なります。 以下のような設定になるのでcronに設定して動いてなかった等がないよう注意してください。
curator delete --older-than 14 curator close --older-than 7
2行に分かれてしまうのは不便ですね・・・。
Tips
- fluent-plugin-geoipなどオシャレなPluginもあります。
- ElasticSearchのメモリチューニングは必須です。デフォルトで1Gになっていました。
- 認証はBasic認証を使ってください。FluetndのSSL化もPluginがあったはずです。
メモリ設定はOS X向けに書かれてですが、以下が参考になりました。 インストールの仕方により設定する場所が違うので注意してください。
Controlling Elasticsearch memory usage on os x | kangaroo court
syslogの全文検索とか使い道は多々あるので、これから大活躍しそうです。
シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。
高速スケーラブル検索エンジン ElasticSearch Server (アスキー書籍)
- 作者: Rafal Kuc (lにストローク符号、cにアクサン・テギュ付く),Marek Rogozinski (nにアクサン・テギュ付く)
- 出版社/メーカー: KADOKAWA / アスキー・メディアワークス
- 発売日: 2014/03/25
- メディア: Kindle版
- この商品を含むブログ (3件) を見る
サーバ/インフラエンジニア養成読本 ログ収集~可視化編 [現場主導のデータ分析環境を構築!] (Software Design plus)
- 作者: 鈴木健太,吉田健太郎,大谷純,道井俊介
- 出版社/メーカー: 技術評論社
- 発売日: 2014/08/08
- メディア: 大型本
- この商品を含むブログ (1件) を見る