LoginSignup
7
8

More than 5 years have passed since last update.

Debian(Wheezy)にfluentdとElasticsearchとKibanaを導入する

Last updated at Posted at 2015-10-30

はじめに

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の両方を消すようにした。

/etc/init.d/kibana
#!/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を再起動すればよい。
うまく動作するとこんな感じ。

スクリーンショット 2015-10-31 02.10.52.png

さいごに

駆け足で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に送り込んでいる。

td-agent.conf
<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を追記することであっさり解決した。
結構ハマるポイントだと思う。

7
8
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8