Apache + Fluentd + Elasticsearch + Kibana を連携させてみた

Elasticsearch とは

Elasticsearch とは2010年に OSS としてリリースされた分散型全文検索サーバです。
実際に CentOS 6.7 にインストールしてつかってみることで Elasticsearch の基本を学んでいきたいと思います。 前回の記事で設定した内容をそのまま使用するので、まだ見てない方はぜひ参照してみてください。

Elasticsearch のインストー

Elasticsearch は Java で実装されているので、まずは Java をインストールします。

$ sudo yum install -y java

インストールできているか確認します

$ java -version

openjdk version "1.8.0_65"
OpenJDK Runtime Environment (build 1.8.0_65-b17)
OpenJDK 64-Bit Server VM (build 25.65-b01, mixed mode)

Elasticsearch を yum でインストールするので、レポジトリのGPGキーをインストールします

sudo rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch

レポジトリを追加します。

/etc/yum.repos.d/elasticsearch.repo

[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

yum でインストールします。

sudo yum install -y elasticsearch

自動起動の設定も行っておきましょう

sudo chkconfig --add elasticsearch

config を編集してコメントアウトを外します。

/etc/elasticsearch/elasticsearch.yml

# http.port: 9200
↓
http.port: 9200

Elasticsearch を起動させます。

sudo /etc/init.d/elasticsearch start

curl コマンドを利用して、Elasticsearch にアクセスして起動の確認を行います。

curl -X GET http://localhost:9200/

下記のようなレスポンスが返ってきたら Elasticsearch がきちんと起動しています。

{
  "name" : "Red Nine",
  "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"
}

Fluentd のプラグインをインストールしたり、事前準備を行います。

sudo yum groupinstall 'Development tools'
sudo /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-elasticsearch

前回で設定した ad-agent の設定を変更します。

/etc/td-agent/td-agnet.conf

<match apache.access>
    type elasticsearch
    type_name access_log
    host localhost
    port 9200

    logstash_format true
    logstash_prefix apache-log
    logstash_dateformat %Y%m%d
    include_tag_key true
    tag_key @log_name
    flush_interval 10s
</match>

td-agent を再起動します

sudo /etc/init.d/td-agent restart

それでは apache のログが Elasticsearch に送られているか確認します。
まずは存在するインデックス情報一覧を取得してみます。

$ curl -XGET http://localhost:9200/_aliases?pretty

下記のような結果が返ってきたらOKです。

{
  "apache-log-20151114" : {
    "aliases" : { }
  }
}

次に、11月14日のログを全部取得してみます。

$ curl -XGET http://localhost:9200/apache-log-20151114/_search -d '
{
  "query": {
    "match_all" : {}
  }
}'

実際にログを確認できたでしょうか?
次はいよいよ Kibana と連携し、ログの可視化について学んでみましょう。

Kibana とは

Kibana は Elasticsearch に格納されたデータを検索し、グラフなど様々な形で可視化できるツールです。
単なる可視化ツールというわけではなく、データの集計・可視化・分析までを統合的にできるツールです。

Kibana のインストー

Kibana をインストールします

curl -sL https://download.elastic.co/kibana/kibana/kibana-4.2.0-linux-x64.tar.gz  | sudo tar zxf - -C /tmp
sudo mv /tmp/kibana-4.2.0-linux-x64 /usr/share/kibana

インストールが完了したので、Kibana を起動します

/usr/share/kibana/bin/kibana

起動したので http://[ドメイン名]:5601 にアクセスしてみます。

f:id:enomotodev:20170519195848p:plain

無事 Kibana の画面が表示されました

Kibana の設定

上の画像のページで『index names or pattern』を apache-log-* に変更して Create ボタンを押します。

画面上の Discover にアクセスすると最新のログがみれるかと思います。

まとめ

最後の方、かなり駆け足になってしまいましたが、Elasticsearch と Kibana をインストールして、Apache と Fluentd と連携してみました。
他にも便利な機能があり、色々とできるみたいなので、私自身もこれからこれらのツールについてさらに学んでいきたいと思います。