Filebeat/Logstash/ElasticSearch/Kibanaを使ったログ収集の仕組みをdocker-composeで試してみた

Posted on
Filebeat Logstash

仕事でFilebeatやLogstashを触る機会があったので、docker-composeを使ってFilebeat/Logstash/ElasticSearch/Kibanaを使った一連のログ収集の仕組みを構築してみました。

基礎知識

全くゼロからの入門だったので、基本的な知識をさらっておきます。

Beats Platform

  • データ取り込みを行うプラットフォーム
  • Logstashが非常に豊富な機能を持ったツールであることに対して、Beatsは各々が特定のインプットに特化したシンプル・軽量なデータ取り込みツール

特徴

  • 機能をシンプルにしているので軽量
  • Go言語による実装
  • 設定ファイルがYAML
  • マルチプラットフォーム

概要

  • 出力処理は、libbeatという共通ライブラリで実装している
  • 入力処理は、各Beatsで実装し、各Beatsはlibbeatを内包している

Beats Platform

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に出力する、みたいなことが必要

Filebeat

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を使って構築してみました。 具体的なコードは以下のリポジトリで公開しています。

log-collection-docker-compose

Kibanaでログを参照してみると、以下のようにnginxのログが参照できています。

Kibana