Fluentd、ElasticsearchとKibanaでログ検索とグラフ表示を可能にする

前回の記事Fluentdを使ってログをログ収集サーバに転送する方法を紹介しました。
今回は転送されたログをElasticsearchに登録し、Kibanaでログ検索とグラフ表示する方法を紹介します。

ログ収集サーバー(前回の記事でいうVagrant)の変更を行っていきます。

FluentdのElasticsearchプラグインをインストール

まずは、FluetndのElasticsearchプラグインをインストールしておきます。

1
$ sudo /usr/sbin/td-agent-gem install fluent-plugin-elasticsearch

Javaのインストール

Elasticsearchを動かすにはJavaが必要なのでJavaをインストールします。

1
2
3
4
$ sudo yum install java-1.7.0-openjdk
$ sudo yum install java-1.7.0-openjdk-devel
$ java -version
java version "1.7.0_101"

Elasticsearchのインストールと起動

今回はアーカイブをダウンロードしてきてインストールします。
インストールといっても特に設定は不要でアーカイブを展開してbin/elasticsearchを実行するだけです。

1
2
3
$ curl -O https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.3.3/elasticsearch-2.3.3.tar.gz
$ cd elastic search-2.3.3
$ ./bin/elasticsearch

kibanaのインストールと起動

Kibanaも同じようにアーカイブをダウンロードして起動します。

1
2
3
$ curl -O https://download.elastic.co/kibana/kibana/kibana-4.5.1-linux-x64.tar.gz
$ cd kibana-4.5.1-linux-x64
$ ./bin/kibana

http://192.168.33.10:5601 にブラウザでアクセスするとKibanaの管理画面が表示されます。
Indexの設定が必要ですが、ここでは何もせず次に進みます。

syslogのログをElasticsearchに格納する

syslogのログをElasticsearchに格納し、Kibanaで参照します。

/etc/td-agent/td-agent.confに以下を追記します。

1
2
3
4
5
6
7
8
9
10
11
<source>
@type syslog # syslogプラグイン
port 42185 # portは42185を指定
tag syslog # syslogというtagをつける
</source>

<match syslog.**>
@type elasticsearch # elasticsearchプラグインを使う
logstash_format true # ログのフォーマット
flush_interval 10s # 10秒ごとに登録する
</match>

fluendをリスタートします。

1
$ sudo service td-agent restart

次にsyslogの設定をします。

/etc/rsyslog.conf に以下を追記します。
syslogが出力するログをFlutedがlistenするポート、42185に転送するための設定です。

1
*.* @127.0.0.1:42185

設定を反映させるため、syslogをリスタートします。

1
$ sudo /etc/init.d/rsyslog restart

先ほど確認した http://192.168.33.10:5601 に戻ります。
syslogの出力がElasticsearchに登録されると、Indexを登録できるようになります。
Indexはlogstash-2016.07.05 のような名前で作成されます。
セレクトボックスからIndexを選択し、Createボタンを押下後にKibanaでログの表示、検索が行えます。

手動でElasticsearchにログを送りたい場合は以下のコマンドで登録できます。

1
$ logger -t test foobar

もしくは、Fluentdのhttpポートにリクエストします。

1
$ curl -X POST -d 'json={"json":"Hello"}' http://localhost:8888/syslog.test

参考リンク