現在、ログを収集し分析するシステムを構築しようとした場合に、オープンソースの組み合わせですぐに始められる構成としてはじめに思いつくのは Fluentd + ElasticSearch + Kibana の構成です。
Web上の記事や書籍も充実していますし、日本にもユーザーが多そうなので割と安心して利用できる環境でもあると思われます。
この記事では、Fluendによりログ収集しElasticSearchに保存し、それをKibana 4で分析する環境の構築手順について調べた内容をまとめてみました。
今回試したのは以下のように、Apacheのアクセスログをtailして、Fluentdで収集しElasticSearchに保存、Kibanaでログの検索、分析を行うシンプルなシステム構成です
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形式で保存するには以下のように設定します
# /etc/td-agent/td-agent.conf
<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の設定は以下のようになります
# /etc/td-agent/td-agent.conf
<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]をクリックして保存します
設定後、[Discover]ページを開くとログを確認できます
以上で、ApacheのアクセスログをKibanaで確認できるようになりました
Kibana 4での分析方法については、別途まとめてみたいと思います