現在、ログを収集し分析するシステムを構築しようとした場合に、オープンソースの組み合わせですぐに始められる構成としてはじめに思いつくのは Fluentd + ElasticSearch + Kibana の構成です。
Web上の記事や書籍も充実していますし、日本にもユーザーが多そうなので割と安心して利用できる環境でもあると思われます。

この記事では、Fluendによりログ収集しElasticSearchに保存し、それをKibana 4で分析する環境の構築手順について調べた内容をまとめてみました。

今回試したのは以下のように、Apacheのアクセスログをtailして、Fluentdで収集しElasticSearchに保存、Kibanaでログの検索、分析を行うシンプルなシステム構成です
fluentd-elasticsearch-kibana-system
Apacheのログを収集するサーバーおよびElasticSearch、KibanaをインストールするサーバーともにOSはUbuntu 14.04 (Trusty)を利用します。

ここでは、構築を解説して、Kibana 4そのものの使い方についてはまた別途まとめたいと思います。

Java8のインストール

ElasticSearchはJavaアプリなのでまずはJavaをインストールします

PPAパッケージを利用してOracle Javaをインストールしました

$ sudo add-apt-repository -y ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get -y install oracle-java8-installer

ElasticSearchのインストール

ElasticSearchもAptリポジトリを利用してインストールできます
参考: ElasticSearch Reference[1.7] >> Setup >> Repositories

$ wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
$ echo "deb http://packages.elastic.co/elasticsearch/1.7/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-1.7.list
$ sudo apt-get update && sudo apt-get install elasticsearch

自動起動を設定しておき

$ sudo update-rc.d elasticsearch defaults 95 10

ElasticSearchを起動

$ sudo service elasticsearch start

Fluentd(td-agent)のインストール

Installing Fluentd Using deb Packageにしたがってインストールします
インストールシェルが用意されているので、ダウンロードして実行するだけです

$ curl -L https://td-toolbelt.herokuapp.com/sh/install-ubuntu-trusty-td-agent2.sh | sh

Fluentd ElasticSearchプラグインのインストール

Fluentdで受けたログをElasticSearchに保存するにはfluent-plugin-elasticsearchをインストールします
プラグインのインストールはtd-agentに含まれるfluent-gemコマンドを実行します

$ sudo /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-elasticsearch

Fluentdにログの収集・保存を設定

フォーワーダーからログを受けてElasticSearchにlogstash形式で保存するには以下のように設定します

<source>
  type forward
</source>

<match apache.access>
  type elasticsearch
  # KibanaはLogstach形式のデータのほうが向いているのでLogstash形式に変換する
  logstash_format true
  # ElasticSearchのホスト
  hosts localhost:9200
  type_name application-log
  # 以下 ElasticSearchへの書き出しバッファ設定(すべてデフォルト値)
  buffer_type memory
  retry_limit 17
  retry_wait 1.0
  num_threads 1
  flush_interval 60
  retry_limit 17
</match>

logstash_formatを有効にした場合、インデックスlogstash-YYYY.MM.DDにログが保存されます

参考: BufferedOutput pluginの代表的なoptionについて

Kibanaのインストール

Cubanのインストールは、アーカイブをDownload Kibana Free • Get Started Now | Elasticダウンロードして展開するだけです
OSはUbuntu 14.04なので、Linux 64Bit版をダウンロードし、/opt/kibanaに展開します

$ wget https://download.elastic.co/kibana/kibana/kibana-4.1.1-linux-x64.tar.gz
$ tar xvfz kibana-4.1.1-linux-x64.tar.gz
$ sudo mkdir /opt/kibana
$ sudo tar xvfz kibana-4.1.1-linux-x64.tar.gz -C /opt/kibana --strip-components 1

続いて、kibanaをデーモンとして起動されるようにしておきます
kibanaは標準ではスクリプトが用意されていませんが、Githubを検索するといくつかスクリプトが見つかります
今回は次のスクリプトを使ってみました
https://github.com/akabdog/scripts/blob/master/kibana4_init
ダウンロードしたスクリプトを/etc/init.dに配置して、実行権限をつけて、デーモンとして登録します

$ sudo sh -c "curl https://raw.githubusercontent.com/akabdog/scripts/master/kibana4_init > /etc/init.d/kibana"
$ sudo chmod +x /etc/init.d/kibana
$ sudo update-rc.d kibana4 defaults 99 10

Apacheサーバーからログを送信

Apacheが稼働するサーバーに、ログを送信するtd-agentをインストールします

$ curl -L https://td-toolbelt.herokuapp.com/sh/install-ubuntu-trusty-td-agent2.sh | sh

Apacheのアクセスログを送信するtd-agentの設定は以下のようになります

<source>
  type forward
</source>

<source>
  type tail
  path /var/log/apache2/access.log
  pos_file /var/log/td-agent/apache-access.log.pos
  format apache2
  tag apache.access
</source>

<match **>
  type forward
  <server>
    host 192.168.33.10
  </server>
</match>

td-agentデーモンがアクセスログを読み込めるように、ログファイルの権限を変更します
Apacheの起動ユーザーがadmの場合

$ sudo usermod -G adm,td-agent td-agent
$ sudo chmod g+rx /var/log/apache2/access.log

Kibanaにインデックスを設定

ログが取り込みを開始してElasticSearchにindexが作成されたら、KibanaからElasticSearchのログを参照する設定をします

http://<hostname>:5601にアクセスして、Kibanaを開きます
[Settings]の[Indexces]を開き、インデックスと時刻フィールドをセットし[Create]をクリックして保存します
KibanaConfigureAnIndexPattern

設定後、[Discover]ページを開くとログを確認できます
kibana4_show_discover_page

以上で、ApacheのアクセスログをKibanaで確認できるようになりました
Kibana 4での分析方法については、別途まとめてみたいと思います