はじめに
Debian(Wheezy)にfluentdとElasticsearchを導入して、Kibanaするまで。
まずはApacheのログをKibanaで見るところまでやってみる。
こちらの記事がよくまとまっているので、ベースはこちらを参考に実施した。
fluentdに関してはこちらを参照するといいかも。結構イメージが湧く。
全体的な流れはこちらを参考にした。
準備
fluentd(td-agent)の導入
こちらの記事が一番わかりやすいので、こちらを参考にして導入した。
ポイントはバージョンですな。
fluentd(td-agent)は1.1.17-1を利用する。
libsslは0.9.8を利用する。
導入が完了したらコマンド叩いて動いているか確認する。
追記:2015/11/05にtd-agent v2のインストール方法を記載しました。
こちらのほうが断然に簡単なので、そちらを参照してください。
Elasticsearchの導入
OpenJDK7
前準備としてOpenJDK7が必要なのでインストールする。
既に導入済みかどうかはdpkg -l openjdk*
などで確認可能。
導入が完了したらバージョンを確認する。
hoge@fuga:~# java -version
java version "1.6.0_36"
OpenJDK Runtime Environment (IcedTea6 1.13.8) (6b36-1.13.8-1~deb7u1)
OpenJDK 64-Bit Server VM (build 23.25-b01, mixed mode)
上記のように違うバージョンが動作している場合にはこちらの情報を参考にして、JVMの切り替えを行う。
update-java-alternatives -s java-1.7.0-openjdk-amd64
のように1.7.0を指定して、再度確認する。
update-java-alternatives自体が使えない場合には、apt-get install java-common
でインストールを行う。
切り替え時に「mozilla-javaplugin.so の alternatives がありません」という表示が出るが問題があるのか不明。(未調査)
hoge@fuga:~# java -version
java version "1.7.0_85"
OpenJDK Runtime Environment (IcedTea 2.6.1) (7u85-2.6.1-6~deb7u1)
OpenJDK 64-Bit Server VM (build 24.85-b03, mixed mode)
となっていればOK。
Elasticsearch
公式情報と、こちらを参考にして、apt-getでインストールする。
インストールが完了したらElasticsearchを起動してみる。
hoge@fuga:~# /etc/init.d/elasticsearch start
[ ok ] Starting Elasticsearch Server:.
実際に動作しているかを確認するにはcurlコマンドでレスポンスを確認してみる。
下記のようにレスポンスが返ってくれば動いている。
hoge@fuga:~# curl http://localhost:9200
{
"name" : "Typhon",
"cluster_name" : "elasticsearch",
"version" : {
"number" : "2.0.0",
"build_hash" : "de54438d6af8f9340d50c5c786151783ce7d6be5",
"build_timestamp" : "2015-10-22T08:09:48Z",
"build_snapshot" : false,
"lucene_version" : "5.2.1"
},
"tagline" : "You Know, for Search"
}
Kibanaの導入
こちらを参考にインストールする。
記事作成時の最新はKibana4.2.0。
起動スクリプトはこちらをベースにDebian(Wheezy)でも動くように修正した。
ポイントは/etc/init.d/functionsの場所が違う点。(詳細はこちら)
あとはkillprocの処理方法を変更した。(詳細はこちら)
元のスクリプトではプロセスが停止しない&pidファイルを削除していないので、停止しないを解決しても二度目の起動でpidfileが残っていて起動しない。
プロセスが停止したことを確認してpidfileとlockfileの両方を消すようにした。
#!/bin/sh
#
# kibana -- startup script for kibana4
#
# chkconfig: - 85 15
# processname: kibana
# pidfile: /var/run/kibana.pid
# description: Kibana is a webui to visualize data
#
### BEGIN INIT INFO
# Provides: kibana
# Required-Start: $local_fs $remote_fs $network
# Required-Stop: $local_fs $remote_fs $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start and stop kibana
### END INIT INFO
#
#
. /lib/lsb/init-functions
PIDFILE="/var/run/kibana.pid"
LOCKFILE="/var/lock/subsys/kibana"
KIBANA_DIR="/opt/kibana/"
start() {
echo -n "Starting Kibana Daemon: "
if [ -f $PIDFILE ]; then
PID=`cat $PIDFILE`
echo Kibana already running: $PID
exit 1;
else
cd $KIBANA_DIR
PID=`./bin/kibana >/dev/null 2>&1 & echo $! > $PIDFILE`
echo `cat $PIDFILE`
fi
}
stop() {
echo -n "Shutting down Kibana Daemon: "
echo
killproc -p $PIDFILE
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f $LOCKFILE $PIDFILE
return 0
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status kibana
;;
restart)
stop
start
;;
*)
echo "Usage: {start|stop|status|restart}"
exit 1
;;
esac
exit $?
apacheログを見てみる
仕上げにapacheのログをfluentd→Elasticsearchに渡して、Kibanaで見られるようにする。
こちらの設定を行う。
/etc/td-agent/td-agent.confの設定を実施した後に、td-agentを再起動すればよい。
うまく動作するとこんな感じ。
さいごに
駆け足でfluentd、Elasticsearch、Kibanaを導入した。
それぞれじっくり使い方を学ぶ必要がある。
ElasticsearchはRest APIで色々なデータを流し込んで遊べる要素がたくさんある。
Kibanaも同様にネタの宝庫なので引き続き遊んでみる。
追記:2015/10/31
td-agent.confの設定が甘かったのでいくつか修正した。
以下簡単に解説。
type httpはcurlでfluentdにデータを送ることができる。
http://<IP>:<PORT>/<TAG>
のような形式でjsonをデータとして送信可能。
本例ではRaspberryPi2からtemperデータをfluentdへ送るために使っている。
type tailの箇所はapacheログからElasticsearchへ送るためのもの。
matchでElasticsearchに送り込んでいる。
<source>
type http
port 8888
</source>
<source>
type tail
format apache2
path /var/log/apache2/access.log
tag apache.local
</source>
<match apache.*>
logstash_prefix apache-access
type_name access_log
type elasticsearch
include_tag_key true
tag_key @log_name
host localhost
port 9200
logstash_format true
flush_interval 3s
</match>
<match temper.*>
logstash_prefix temper-log
type_name hash
type elasticsearch
include_tag_key true
tag_key @log_name
host localhost
port 9200
logstash_format true
flush_interval 3s
</match>
追記:2015/11/01 elasticsearchのデータを消す
色々試しているとElasticsearchに中途半端なデータや試行錯誤のデータが残ったりする。
その場合には以下のようにcurlからindexの検索と削除を行うと良い。
登録されたindexの検索:curl -X GET http://localhost:9200/_aliases?pretty
indexの削除:curl -X DELETE http://localhost:9200/<index>*
追記:2015/11/03 elasticsearch-head導入
elasticsearch-headを試しに導入した。
導入手順はelasticsearch-head」がとても便利を参考にした。
自分の環境はDebian(Wheezy)だったので多少環境が違ったのでメモ。
以下でインストールができた。(-installではなくinstall。詳細は-hでヘルプが出る。)
/usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head
インストールされたプラグインを確認するには以下のように入力。
curl -X GET 'http://localhost:9200/_nodes?plugin=true&pretty'
本当はelasticsearch-analysis-kuromoji入れたいんだけどES2.0に対応してない・・・
追記:2015/11/05 td-agentのv2移行
td-agentをv2に移行した。
すごく簡単でした。(最初から気づけばよかった・・・)
Overview of Streaming Import by Treasure Agent (td-agent)を参考にtd-agentをインストールした。
あっさり完了。
Debian Wheezyの環境なので下記コマンド一発だった。
$ curl -L http://toolbelt.treasuredata.com/sh/install-debian-wheezy-td-agent2.sh | sh
dkg -lでバージョン確認。
ii td-agent 2.2.1-0 amd64 Treasure Agent: A data collector
elasticsearchのプラグインを再度インストール。
/opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-elasticsearch
もしくはtd-agent-gem install fluent-plugin-elasticsearch
でもOK。
プラグインの情報はList of All Pluginsを参照のこと。
追記:2015/11/15 kuromoji導入
elastincsearch2.0でkuromojiの導入方法に気づいたので、追記。
Japanese (kuromoji) Analysis pluginを参考に導入したらあっさりOKでした。
hoge@fuga:~# /usr/share/elasticsearch/bin/plugin install analysis-kuromoji
でインストール。
引数をlistにすればインストール済みのプラグインを確認できる。
hoge@fuga:~# /usr/share/elasticsearch/bin/plugin list
Installed plugins in /usr/share/elasticsearch/plugins:
- analysis-kuromoji
- head
こうなってたら導入できてる。
追記:2016/04/23 Kibanaのapt-get導入
Kibanaをapt-getから導入するように変更。
この操作で今後はKibanaをapt-getで更新できるようになる。
こちらを参考に手順通りに実施すれば問題なく導入できた。
今後のバージョンアップ等を考慮すると、こちらの導入方法が良いと思う。
追記:2016/04/23 elasticsearch.ymlの設定
elasticsearch-headを導入しておきながら、なぜかブラウザから見られずに放置していたが、ようやく解決。
Elasticsearch2.3とkibana4.5でドハマリしたあなたに送る1分で動く一発スクリプトを参考に、elasticsearch.ymlにnetwork.host: 0.0.0.0
を追記することであっさり解決した。
結構ハマるポイントだと思う。