Netflowコレクターを無償のFluend+ElasticSearch+Kibanaで構築する

イケてるFlowコレクターを探していましたが、見た目・開発状況含めてどうもググッとこず、結局Fluend+ElasticSearch+Kibanaの組み合わせで導入しました。

この組み合わせはこちらのサーバ/インフラエンジニア養成読本のログ収集~可視化編のKibana特集でよりいっそう注目されており必見です。

サーバ/インフラエンジニア養成読本 ログ収集~可視化編 [現場主導のデータ分析環境を構築!] (Software Design plus)

結論としては、有償のソフトウェアだとだと時間が経つにつれてデータ間隔を荒くするよな機能が実装されていたりするので、そういった機能が必要な人には厳しいかもしれません。 個人的には、直近のある程度の期間の情報が確認できればいいのでデータローテーションで十分です。

まだ触りつくせてないですが、クエリが複雑すぎて学習コストがかかるとかもなさそうです。

f:id:komeiy:20140926211547p:plain

見た目がかっこいいのがいいですね。デフォルトは流行りの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 (アスキー書籍)

高速スケーラブル検索エンジン ElasticSearch Server (アスキー書籍)