FluentdからElasticsearchに転送してKibanaで可視化する
こんにちは@oko_changです。
前回はFluentdについて記載しましたが、今回はFluentdからElasticsearchにログを転送してKibanaで可視化するまでをまとめておきたいと思います。
環境概要
前回の環境にElasticsearchとKibanaを追加するイメージです。
- CentOS6.5

Elasticsearchのセットアップ
インストールは公式にあるようにYumのリポジトリを追加して簡単に出来ます。
javaが必要なので、それもインストールしておきます。
# rpm --import http://packages.elasticsearch.org/GPG-KEY-elasticsearch # cat >> /etc/yum.repos.d/elasticsearch.repo <<'EOF' [elasticsearch-1.0] name=Elasticsearch repository for 1.0.x packages baseurl=http://packages.elasticsearch.org/elasticsearch/1.0/centos gpgcheck=1 gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch enabled=1 EOF # yum install elasticsearch java-1.7.0-openjdk
インストールが終わったら起動して、動作確認してみます。
# chkconfig elasticsearch on
# service elasticsearch start
# curl -X GET http://localhost:9200/
{
"status" : 200,
"name" : "Knickknack",
"version" : {
"number" : "1.0.1",
"build_hash" : "5c03844e1978e5cc924dab2a423dc63ce881c42b",
"build_timestamp" : "2014-02-25T15:52:53Z",
"build_snapshot" : false,
"lucene_version" : "4.6"
},
"tagline" : "You Know, for Search"
}
Kibanaのセットアップ
Kibanaもセットアップは簡単です。
公式ページから圧縮ファイルをダウンロードして、任意のディレクトリに配置します。
KibanaはJavascriptで動作しており、アクセスされるブラウザからElasticsearchがListenしているポートに接続出来る必要があります。
ちょっとその構成が気持ち悪いので、今回はconfig.js内のelasticsearch:の設定を以下のようにし、Apacheのリバースプロキシ経由でアクセスするようにしたいと思います。
※Apacheの設定は後述。
# useradd kibana
# passwd kibana
# chmod +x /home/kibana
# su - kibana
$ curl -LO https://download.elasticsearch.org/kibana/kibana/kibana-3.0.0milestone5.tar.gz
$ tar zxvf kibana-3.0.0milestone5.tar.gz
$ ln -s /home/kibana/kibana-3.0.0milestone5 ./kibana
$ vi /home/kibana/kibana/config.js
$ grep okochang /home/kibana/kibana/config.js
elasticsearch: "http://kibana.okochang.com/es/",
# exit
Apache
Apacheは、以下のように名前ベースのVirtualHostを設定しています。
さらにElasticsearchへの接続用に/es/をリバースプロキシ構成にしています。
必要に応じてDigest認証の設定も追加します。
# yum install httpd
# htdigest -c /etc/httpd/conf/htdigest "Required authentication" okochang
# vi /etc/httpd/conf.d/vhosts.conf
# cat /etc/httpd/conf.d/vhosts.conf
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /home/kibana/kibana
ServerName kibana.okochang.com
ProxyPass /es/ http://localhost:9200/
ProxyPassReverse /es/ http://localhost:9200/
CustomLog logs/access_log custom
ErrorLog logs/error_log
Options FollowSymLinks
<Location />
AuthType Digest
AuthName "Required authentication"
AuthUserFile /etc/httpd/conf/htdigest
require valid-user
Satisfy any
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Location>
</VirtualHost>
# httpd -t
# chkconfig httpd on
# service httpd start
ブラウザからKibanaにアクセス
以下のように管理画面のトップページが表示されます。

fluent-plugin-elasticsearch
最後に転送元のサーバでfluent-plugin-elasticsearchをインストールして、Elasticsearchに転送する設定をします。
※以下は前回設定行った設定に追記しております。
# sudo yum install gcc gcc-c++ libcurl-devel
# /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-elasticsearch --no-ri --no-rdoc
# vi /etc/td-agent/td-agent.conf
# cat /etc/td-agent/td-agent.conf
## Input
<source>
type tail
path /var/log/httpd/access_log
format /^(?<date>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} \w{3}) (?<processing_time>[^ ]*) (?<remote>[^ ]*) (?<user>[^ ]*) \[(?<method>.*)\] (?<status>[^ ]*) (?<size>[^ ]*) \[(?<referer>[^ ]*)\] \[(?<agent>.*)\]/
pos_file /var/log/td-agent/tmp/apache.access.log.pos
tag apache.access
</source>
## Output
<match apache.access>
type copy
<store>
type file
path /var/log/td-agent/apache.access
time_slice_format %Y%m%d
time_format %Y%m%dT%H%M%S%z
</store>
<store>
type forward
send_timeout 60s
recover_wait 10s
heartbeat_interval 1s
<server>
name fluentd.okochang.com
host 10.0.1.200
port 24224
</server>
</store>
<store>
type elasticsearch
host 10.0.1.200
port 9200
type_name access_log
logstash_format true
logstash_prefix apache_access
logstash_dateformat %Y%m
flush_interval 10s
</store>
</match>
追記(2014年3月22日)
Elasticsearchのsは小文字が正解です。
Sは小文字!
— Jun Ohtani (@johtani) 2014, 3月 22ご指摘ありがとうございます、修正しました!
感想
セットアップは思ったよりも簡単ですね。
管理が画面もカッコイイし、色々なログをElasticsearchに保存して可視化したくなります。
参考リンク
- http://www.elasticsearch.org/
- http://www.elasticsearch.org/overview/kibana/
- http://www.elasticsearch.org/blog/apt-and-yum-repositories/
- http://www.elasticsearch.org/overview/kibana/installation/
- http://docs.fluentd.org/ja/articles/free-alternative-to-splunk-by-fluentd
- http://blog.excale.net/index.php/archives/1929
- http://qiita.com/kakipo/items/5ccaab8581a3158dfcff
- http://blog.manabusakai.com/2014/02/centos-elasticsearch-install/
- http://kame-t.hatenablog.jp/entry/2014/02/28/160523
