Elasticsearch+Logstash+Kibanaでログ分析を試す - Filebeatも使うよ
「Kibanaでログ分析したいのでよろしく」
との命を受け、ほとんど知らないELKスタック(今はElastic Stackというらしい)を触ってみることに。
それぞれの役割はこんな感じかと。
2017/12時点の最新バージョンは、6.1.0。
公式サイトのReferenceはなかなか充実していて、大体のことはつかめます。
ちなみに、Elastic Stackのそれぞれのバージョンは、揃えた方が無難。
Elasticsearch3系とかがすでにあって、Kibanaだけ新しくしたい、と思っても対応していない。Elasticsearchもバージョンアップして最新にして、同じバージョン(6.x)を使う必要があリます。
今回は、全て新規で作成のため、6.1.0で統一しました。
やりたいこと
複数台あるAPサーバのログを一箇所に集めて、アクセス数やどこでどのような使われ方をしているかを分析したい。
Filebeatを使う
最初は、Elasticsearch+Logstash+Kibanaだけで良いかなと思いましたが、最終的にFilebeatをそこに加えることにした。
Filebeatとは、これもElastic Stackの仲間で、ログファイルを収集して、Elasticsearchなどに送る機能をもつ。
つまり、Logstashと機能面ではかなり被るものと言えます。
どちらか一方のみを使うというのでも、問題はなさそうでしたが、今回はそこをあえて両方使って以下のような構造にしてみました。
各APサーバにFilebeatをインストールし、どのログファイルを収集するのか、またどのサーバのログなのかと言った情報をFilebeatの設定で付加して、Logstashに転送。
Logstashでは、共通の整形処理を行い、Elasticsearchにそれをまた転送する。
で、Kibanaを使ってElasticsearchのデータを好きなようにグラフ化する。
Filebeatはローカルファイルしか読めないという縛りがあるが、どこまで読み込んだかを記憶し、Logstash側が受け取れない状況にある場合は、受け取れるようになったら続きを転送するなど、データの損失を防ぐ仕組みが備わっている。
ただし、整形処理などはLogstashには劣るため、そこはLogstashに任せることに。
データ量が多い場合は、Logstashがボトルネックになる可能性もあるので、その場合は冗長化が必要かもしれない。ちなみに、最新のKibanaでは、Logstashのパイプラインが可視化され、Logstashを通過したデータがどの処理でどのくらい時間がかかったかを簡単に見ることができるようになっている。(ただし、X-Packというプラグインを入れる必要があります)
Filebeatのインストール方法
1. RPMインポート
# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
# vi /etc/yum.repos.d/elastic.repo
[elastic-6.x]
name=Elastic repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
3. yumインストール
# yum -y install filebeat
4. サービス起動
# systemctl start filebeat
# systemctl enable filebeat
VirtualBoxのCentOS7にインストールしました。
コンテナを使うことももちろん可能ですが、ここでは直接インストールすることにしました。
収集するログの場所を指定するのに、コンテナだとVolume連携が必要になる気がするので、なんとなくFilebeatは直接入れた方が良さそうな気がしたので。
Filebeatの設定ファイル
Filebeatの設定ファイルはデフォルトでは以下のファイルです。
# vi /etc/filebeat/filebeat.yml
これで、追跡するログを指定したり、ログの転送先を設定したりしますが、続きは別の記事で。