Tech Sketch Bucket of Technical Chips by TIS Inc.

fluentd + Elasticsearch + Kibanaで始めるログ解析 (セットアップ編)

Pocket

この記事はeXcale Developer's Blogから移転されたものです。

eXcale開発チームの平栗です。
今回は、最近話題のfluentdとElasticsearch、Kibanaを使ったログ解析と可視化についてご紹介します。
eXcaleでもfluentdとElasticsearch、Kibanaを使って、日々発生する膨大なログの解析を行っています。
本記事では、ElasticsearchとKibanaのセットアップ、そしてfluentdを使ってElasticsearchにログを転送する設定についてご紹介します。

>>eXcaleは期間限定でサインアップキャンペーン実施中!気になる内容はこちら<<


fluentdとは

fluentdは、Ruby(一部はC)で書かれているオープンソースのログ収集ツールです。
最初のバージョンのリリースが2011年という比較的新しいツールですが、200を超えるプラグインがあり広く使われています。
fluentdについては、fluentdで始めるログ管理【基本編】をご覧ください。

Elasticsearchとは

Elasticsearchは、Elasticsearch社が開発したオープンソースの検索エンジンで、ビッグデータをリアルタイムに解析できます。
ここ1~2年の間に、Elasticsearchに関する情報が続々と増え、今とても熱いOSSとなっています。

Kibanaとは

Kibanaは、Elasticsearch内のデータを可視化するためのオフィシャルなツールです。
公式のデモサイトで画面を見ることができますが、洗練されたデザインが特徴です。
またダッシュボードのレイアウトに変えることができるので、見たい情報を好みの位置に表示することが可能です。


セットアップする環境について

今回は以下のような構成にします。

実際には各サーバのfluentdから直接Elasticsearchにデータを連携するのではなく、間に集約用のfluentdを設置する構成のほうがいいかと思います。

今回はElasticsearchとKibanaを1台のホスト上で稼働させます。KibanaはHTMLとCSS、JavaScriptでできているので、配信用のNginxのセットアップも行います。

それでは見ていきましょう。

1. Elasticsearchをセットアップする

まずは、Elasticsearchを公式サイトからダウンロードします。
ファイル形式がいくつかありますが、今回はtar.gzをダウンロードします。
(記事公開時点での最新バージョンは1.0.1)
ダウンロード後は任意のディレクトリに展開してください。
今回は/optにelasticsearchというディレクトリ名で展開します。

次にElasticsearchに設定を入れます。
設定は elasticsearch/config/elasticsearch.yml に記述します。

また上記の例では、開発用の設定としてレプリカセットとシャードの数を最少の値に設定しています。
レプリケーションやシャーディングをしたい場合は、この値を変更してください。

一通り準備が終わったので、下記のコマンドを実行してElasticsearchを起動します。

上記のような出力がされたら起動は成功しています。
バックグラウンドで起動したい場合は-dのオプションを付けて起動してください。

Elasticsearchが起動したので、実際にアクセスしてみます。
アクセスは9200番ポートに対して行い、下記のようなレスポンスが返ってきたらElasticsearchのセットアップは終了です。

2. Kibanaをセットアップする

まずは、Kibanaを公式サイトからダウンロードします。
zipかtar.gzで形式が選べるので、今回はtar.gzでダウンロードします。
(記事公開時点での最新バージョンは、Kibana 3 milestone 5)
ダウンロード後は任意のディレクトリに展開してください。
今回は/optにkibanaというディレクトリ名で展開します。

次に、Kibanaの設定を入れます。
設定はkibana/config.js に記述します。

上記の設定は、Elasticsearchへの接続先を指定しています。
この設定を使ってKibanaがElasticsearchからデータを取得しているので、設定が正しくないとKibanaがデータを表示できません。
ここで注意ですが、KibanaはJavascriptで出来ているので、KibanaがElasticsearchからデータを取得する処理はKibanaにアクセスしているWebブラウザ上で動作します。
そのため、Kibanaにアクセスする端末から接続ができる形で接続情報を記載しなければいけません。
例えば、インターネット経由でElasticsearchにアクセスする場合、グローバルIPアドレスなどで指定しないといけません。
この設定が終われば、Kibanaのセットアップは終了です。

3. Nginxをセットアップする

Kibanaを配信するためのNginxをセットアップします。
まず、Nginxを公式サイトからダウンロードします。
(記事公開時点の最新バージョンは1.5.10)
今回はtar.gz形式でダウンロードして任意のディレクトリに展開し、インストールします。

上記の通りに実行すると、/usr/local/nginxのディレクトリにNginxがインストールされます。

次に、Kibanaを配信するための設定を行います。
/usr/local/nginx/conf/nginx.confの17行目あたりにあるhttpディレクティブの中に、下記の設定を追加します。
デフォルトで定義されている80ポートの設定については、全てコメントアウトして問題ありません。

設定が終わったので、Nginxを起動してKibanaにアクセスしてみます。
次のコマンドを実行してNginxを起動してください。

Nginxが起動できたらWebブラウザからアクセスし、下記の画面が表示されればここまでのセットアップは成功しています。
アクセス先は、http://<Nginxのサーバ接続先>/ です。

もし、Elasticsearchに接続できない旨のメッセージが出たり、画面が表示できない場合は、これまでの設定を見直してみてください。
また、9200番ポートに対してアクセスしているので、ファイアウォールの設定でアクセスが可能になっているかを確認してください。

4. fluentdにElasticsearchへログを転送する設定を入れる

Elasticsearch、Kibanaの準備ができたので、fluentdを使ってElasticsearchにログを転送するように設定します。
この設定は、Elasticsearchではなく、ログの転送元に対して入れます。
fluentdのセットアップについては、fluentdで始めるログ管理【基本編】を参考にしてください。
まずは、ログ転送元のマシンにElasticsearchにログを転送するプラグインを入れます。

次に、fluentd.confに下記のような設定を入れます。

上記の設定をすると、access_logというタグを持ったログがElasticsearchに転送されるようになります。
転送されたログは、nginx_access-<年><月>というindexのaccess_logというtypeに保存されます。
(<年>と<月>には、ログが出力された年と月が入ります)
indexとtypeについてですが、RDBMSで言うところのデータベースがindex、テーブルがtypeだと考えていただければいいと思います。
これでログの転送については完了です。

Elasticsearchにログが入るようになったので、Kibanaで見てみましょう。
先ほどと同じ画面が表示されますので、画面下部のSample Dashbordのリンクをクリックします。

すると、次のような画面が表示され、指定したtypeでログが保存されていることが確認できます。
(画像では、typeがaccess_logのログが保存されています)

最後に

少し長くなってしまいましたが、1つ1つの作業自体は簡単なので、さくっとセットアップできると思います。
次回は、Kibanaの使い方についてご紹介したいと思います。

エンジニア採用中!私たちと一緒に働いてみませんか?