仕事でFilebeatやLogstashを触る機会があったので、docker-composeを使ってFilebeat/Logstash/ElasticSearch/Kibanaを使った一連のログ収集の仕組みを構築してみました。
基礎知識
全くゼロからの入門だったので、基本的な知識をさらっておきます。
Beats Platform
- データ取り込みを行うプラットフォーム
- Logstashが非常に豊富な機能を持ったツールであることに対して、Beatsは各々が特定のインプットに特化したシンプル・軽量なデータ取り込みツール
特徴
- 機能をシンプルにしているので軽量
- Go言語による実装
- 設定ファイルがYAML
- マルチプラットフォーム
概要
- 出力処理は、
libbeat
という共通ライブラリで実装している - 入力処理は、各Beatsで実装し、各Beatsは
libbeat
を内包している
Ref:https://www.elastic.co/guide/en/beats/libbeat/current/beats-reference.html
FileBeat
- Beat Platformにおける、ログファイルのメッセージを取り込むことに特化したツール
- 設定ファイルで指定したログファイルを取り込む
概要
- Filebeatを起動すると、1or複数のlogdataのInputが開始される
- Filebeatが各々のログを見つけると、ログ単位でHarvesterを起動する
- 各々のHarvestarは単一のログ・ファイルを読み、新しいログデータをlibbeatに送る
- 定義したconfigに従って、ログデータを集約してOutputに送信する
- 加工やフィルタはできないので、一度Logstashに出力し、LogstashのFilter Pluginで処理して、ElasticSearchに出力する、みたいなことが必要
Ref:https://www.elastic.co/guide/en/beats/filebeat/current/index.html
Logstash
- Elastic社が提供するログ収集管理ツール
- 様々なデータソースからログを収集し、1つのサーバに集約する機能を提供する
設定ファイル
input,output,filter,codecなどのプラグインと、それらの設定パラメータを記述し、引数で指定してlogstashコマンドを実行することで、ログの取り込みをおこなう。フォーマットは以下のとおり。
<プラグインの種類> {
<使用するプラグイン1> {
<設定パラメータ1> => <設定する値>
<設定パラメータ2> => <設定する値>
:
:
}
<使用するプラグイン2> {
<設定パラメータ1> => <設定する値>
<設定パラメータ2> => <設定する値>
:
:
}
:
:
}
- プラグインの種類
- input
- filter
- output
- 使用するプラグイン
- プラグイン名を指定
- 指定した順序でイベントは処理される
入門
nginxのアクセスログをFilebeatで収集し、そのログをLogStash経由でElasticSearchに送信して、Kibanaから参照するという一連の流れをdocker-composeを使って構築してみました。 具体的なコードは以下のリポジトリで公開しています。
Kibanaでログを参照してみると、以下のようにnginxのログが参照できています。