fluentd、ElasticSearch、Kibanaでアクセスログの可視化

fluentd、ElasticSearch、Kibanaでアクセスログの可視化

記事一覧fluentd、ElasticSearch、Kibanaでアクセスログの可視化

これまでは、アクセスログやアプリケーションログは、1 時間に 1 回、バッチ処理で直近の 1 時間のログをチェックして問題がないかを確認していました。

その際、冗長化している複数の Web サーバからログ収集サーバへ fluentd を使ってログ転送していましたが、ログの量が増えてきたり、もう少しログの解析の自由度を上げるためには、高速に検索できるツールが必要だということで ElasticSearch の登場です。

ElasticSearch は、数年前、バージョン 1.0 になるかならないかの頃、商品検索用途で利用したことがあります。その際は、MySQL で商品のデータ自体は管理し、検索のみ ElasticSearch 経由という方法をとっていました。

確かに検索はかなり高速でしたが、扱う項目に差はあるとはいえ、MySQL と ElasticSearch とでデータが二重管理になっていて運用としては少し面倒なことになってしまっていました。検索軸が増えた場合は、マッピングデータの追加が伴うのと、データ移行も必要で運用時に念密にシミュレーションした記憶があります。

さて、そんな ElasticSearch もバージョン 2.0 が正式リリースされたので、久しぶりにローカルの vagrant に入れて apache ログを収集し、ElasticSearch に突っこみ Kibaha で閲覧してみたいと思います。最近はこの組み合わせがトレンドになっているようですね。

Javaのインストール

ElasticSearch を使うには Java が必要になるのでインストールします。

$ yum -y install java-1.8.0-openjdk

$ yum -y install gcc libcurl-devel

$ cd /usr/local/src

ElasticSearchのインストール

下記では rpm からのインストール方法を記載しましたが、ElasticSearch のガイドページを見ると yum でのインストール方法も書かれているので、そちらを利用してもいいかもしれませんね。

Elasticsearch can also be installed from our repositories using apt or yum

rpm でのインストール方法

$ wget https://download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/rpm/elasticsearch/2.2.0/elasticsearch-2.2.0.rpm

$ rpm -ivh elasticsearch-2.2.0.rpm 

$ chkconfig --add elasticsearch

$ service elasticsearch start

$ chkconfig elasticsearch on

yum でのインストール方法

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

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

$ yum -y install elasticsearch

$ service elasticsearch start

$ chkconfig elasticsearch on

プラグインは日本語形態素解析エンジンの kuromoji と、ブラウザで中身が確認できる head の 2 つを入れておきます。

$ /usr/share/elasticsearch/bin/plugin install analysis-kuromoji

$ /usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head

設定はデフォルトのままで大丈夫かなっと思っていたのですが、下記の 2 箇所を明示的に指定しないと head プラグインが使えませんでした。

$ vi /etc/elasticsearch/elasticsearch.yml

network.host: 0.0.0.0
http.port: 9200

最後にサービスを再起動して完了です。

$ service elasticsearch restart

ElasticSearch をインストールしたホストの IP アドレスが 192.168.0.1 だとすると、以下の URL で head プラグインが利用できます。

http://192.168.0.1:9200/_plugin/head/

また、同じホストから以下のコマンドでも状況が確認できます。

$ curl -XGET localhost:9200/_alias?pretty

fluentdのインストール

fluentd はインストールシェルが用意されているので、それを使ってインストールします。ElasticSearch へデータ投入するためのプラグインも入れます。

$ curl -L http://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh

$ td-agent-gem install fluent-plugin-elasticsearch

$ vi /etc/td-agent/td-agent.conf

<source>
  type tail
  path /var/log/httpd/access_log
  format apache2
  pos_file /var/log/td-agent/httpd.access.log.pos
  tag apache2.access
</source>

<match apache2.access>
  type elasticsearch
  host localhost
  port 9200
  type_name apache_access
  logstash_format true
</match>

$ service td-agent start

$ chkconfig td-agent on

Kibanaのインストール

最後に Kibana をインストールします。

$ wget https://download.elastic.co/kibana/kibana/kibana-4.4.1-linux-x64.tar.gz

$ tar xvzf kibana-4.4.1-linux-x64.tar.gz 

$ ln -sf kibana-4.4.1-linux-x64 kibana

下記で実行可能ですが、サービス登録してしまいましょう。

$ ./kibana/bin/kibana

起動スクリプトは下記のサイトを参考にして、実行ファイルのパスだけ変更しました。vagrant には CentOS 入れているので、Amazon Linux 用でも問題ありませんでした。
Amazon Linux 用 Kibana 4 Init スクリプト

$ vi /etc/init.d/kibana

$ chmod +x /etc/init.d/kibana

$ /etc/init.d/kibana start

$ chkconfig --add kibana

下記にアクセスすれば Kibana の画面が確認できます。

http://192.168.0.1:5601/

参考カテゴリ

オススメ記事

最新の投稿やよく見られているのオススメ記事一覧です。

AmazonLinuxでEC2起動時にスワップ領域の割り当てに失敗

EC2 起動時のスワップ領域割り当てですが、これまでは以下の記事を参考に、/etc/rc.local を使って行っていました。 ・ Amazon EC2(Linux)のswap領域ベストプラクティス しかし、最近になって、EC2 イン...

>>記事を確認する

【5分でできる】Laravel5.4から5.5へバージョンアップ

Laravel5.5 がついにリリースされたので、5.4 ベースで作っていたものをバージョンアップしてみました。 composer.json の以下の部分を 5.5.* に変更するだけですが、依存関係のパッケージも問題なくアップデ...

>>記事を確認する

【30分でできる】AWSのEC2にgoofysを入れてS3をマウント

過去に携わったプロジェクトで、S3FS の通信状態が悪い時があるので、アプリ側のプログラムを AWS SDK を使ったものに置き換えていこうという施策がありました。 S3FS の導入には関わっていなかったので、導...

>>記事を確認する

【30分でできる】ぐるなびAPIで飲食店の店舗情報取得

過去に作成した「ぐるなびAPI」のプログラムや、ぐるなびの Web Service が新しくなったこともあり、API からの情報取得プログラムを書き換えてみました。 以前の記事は下記になります。 ・ ぐるなびAPIで...

>>記事を確認する

NginxのFastCGIキャッシュで白い画面がキャッシュされる

以前から、トップページにアクセスすると、レスポンスステータスは 200 で返ってくるのに、画面に何も表示されない現象が稀に見受けられたので調査してみました。 さすがに機会損失にも繋がるということで、...

>>記事を確認する

Laravel5.4の認証ユーザーのパスワードハッシュについて

Laravel で用意されている認証モジュールを利用する際、ユーザーモデル(User.php)経由で登録されるパスワードのハッシュ方法について調べてみました。 Laravel 上ではパスワード文字列を bcrypt() のヘルパー...

>>記事を確認する

Laravel5.4のコントローラコンストラクタでAuth::user()が取得できない

Laravel5.4 で認証を通したアクセスに対して、コントローラのコンストラクタでユーザモデルの値を取得しようと思ったら、なぜか Auth::user() の値が取得できなくて悩みました。 public function __construc...

>>記事を確認する

NginxのHSTS(HTTP Strict-Transport-Security)の設定

「Let's Encrypt」のおかげで、全サイト SSL 化していますが、これまで nginx の設定では、http のアクセスがあった場合に https に 301 リダイレクトさせていました。 この場合、Googlebot に http のアク...

>>記事を確認する

GoogleMapのAPIキーの認証情報にリファラURL設定

昔は API キーを指定することで、JavaScript で GoogleMap が表示できていましたが、何年か前に、そのキーに対して認証情報の追加が推奨されました。 新規で発行する場合は必須になっているかもしれませんが...

>>記事を確認する

【30分でできる】AmazonLinuxでApache2.4+php7.1+Laravel5.5

先日、「 VagrantでCentOS6.9のイメージを使う 」の通り、CentOS6.9 には Apache2.4 と PHP7.1 で Laravel のフレームワークが使える環境を構築しました。 ただ、将来的には AWS かつ Amazon Linux 上で動か...

>>記事を確認する