今更ながらFluent Bitって何だ!?となったので調べてみた話

こんにちは、Яeiです。

今回は現役エンジニアである私がFluent Bitって何だという話についてまとめたいと思います。

最近巷で良く聞くFluent Bitと呼ばれるものがありますが、そもそもこれって何なのか調査しましたのでシェア致します。

最後はdocker-composeを用いたサンプルも用意しましたので見てみて下さい。

スポンサーリンク

Fluent Bit

概要は公式サイトに分かりやすく書かれております。

参考 fluentbitfluentbit

概要

Fluent Bitとは、

アプリケーションから出力されたログなどのデータを収集し、フィルタリングして複数の宛先に送信できるツールとなります。

例えば、Fluent Bitを用いることで、dockerコンテナのログを簡単にElasticSearchに転送することができるのです。

つまり、リアルタイム監視が主流になりつつある現在において、ログの転送ツールとして活躍してくれそうです。

特徴

公式サイトから拝借しますと、

C言語で記述されており、パフォーマンスを念頭に置いて設計されているため、CPU/メモリの使用量が少なく高スループット

とのことです。

クラウドネイティブ

コンテナ化ではログを外部に出力することが推奨されております。

そこで、ログの転送機能としてFluent Bitが注目を浴びているのです。

(Fluentdもありますが、今回は省略致します)

設定ファイル

設定要領は公式サイトに記載されております。

参考 Configuration FileFluent Bit: Official Manual

公式サイトは英語ですので、少し噛み砕いて説明致します。

まず、設定ファイルは以下のような感じのファイルになります(fluent-bit.conf)。

[INPUT]
Name forward
Listen 0.0.0.0
Port 24224

[FILTER]
Name stdout
Match *

[OUTPUT]
Name stdout
Match *

ここでは、このファイルの設定要領を見ていきます。

設定ファイルの設定するメインの部分は以下の4つになります(上記例ではServiceは設定していません)

  • Service

  • Input

  • Filter

  • Output

Service

設定する量が多すぎるので、サンプルで指定されているもののみ記載します。

・Flush

Daemon

Log_Level

Flush

出力プラグインにフラッシュ(流す)する間隔を設定します。

デフォルトでは5秒間隔でフラッシュします。

Daemon

Fluent Bitをデーモン(バックグラウンド)として実行するかどうかを設定します。

(設定値:yes、no、on、off)

デフォルトはoffになっています(dockerのサイドカーとして使う場合はoffで良さそうな気がします)

Log_Level

エラーレベルを指定します。

error、warning、info、debug

を指定でき、info指定した場合はerror、warningも対象。

デフォルトはinfoとなっています。

Input

ここでは入力プラグインの指定をします。

設定できるのは以下の二つになります。

・Name

・Tag

Name

入力プラグインを記載します。

適宜以下を参照して何を設定するか確認してください。

参考 Input PluginsFluent Bit: Official Manual

Tag

タグ名を指定します。

Filter

ここではフィルタープラグインを指定します。

詳細はフィルタープラグインに準拠しますが、以下は必須となります。

※ 下二つはどちらか片方設定する。

Name

Match

Match_Regex

※ このセクションは複数設定することで、転送先を複数にすることもできます。

Name

フィルタープラグインを記載します。

フィルタープラグインの種類は以下参照下さい。

(サンプルも付いているので英語でも直感的に分かると思います)

参考 Filter PluginsFluent Bit: Official Manual

Match

入力レコードのタグに対して、パターンマッチングを行い出力対象とします。

ワイルドカード(*)指定が可能となります。

Match_Regex

Matchではなく、正規表現で出力対象を指定したい場合に設定します。

Output

ここでは出力プラグインの設定を行います。

主に設定できるのは以下の3つです。

Name

Match

Match_Regex

※ このセクションは複数設定することで、転送先を複数にすることもできます。

Name

出力プラグインを記載します。

適宜以下を参照して何を設定するか確認してください。

参考 Output PluginsFluent Bit: Official Manual

Match

入力レコードのタグに対して、パターンマッチングを行い出力対象とします。

ワイルドカード(*)指定が可能となります。

Match_Regex

Matchではなく、正規表現で出力対象を指定したい場合に設定します。

スポンサーリンク

超簡単なお試し

お試しの構成は以下のようなイメージです。

ブラウザからhttp通信を行うことでServer側ではログを出力します。

そのログはFluent Bitコンテナに転送され、標準出力されるという構成です。

(標準出力されたログはdocker logsコマンドでコンテナを見はることで確認できます)

Composeファイルは次の通り。

version: '3.7'
services:
  sample_service1:
    image: gihyodocker/echo:latest
    ports:
      - "8080:8080"
    depends_on:
      - fluent-bit
    logging:
      driver: fluentd
      options:
        fluentd-address: "localhost:24224"
        tag: "docker1.{{.Name}}"
  sample_service2:
    image: gihyodocker/echo:latest
    ports:
      - "8090:8080"
    depends_on:
      - fluent-bit
    logging:
      driver: fluentd
      options:
        fluentd-address: "localhost:24224"
        tag: "docker2.{{.Name}}"
  fluent-bit:
    image: fluent/fluent-bit
    volumes:
      - ./fluent-bit.conf:/fluent-bit/etc/fluent-bit.conf
    ports:
      - "24224:24224"

fluent-bit.confは次の通り。

[INPUT]
Name forward
Listen 0.0.0.0
Port 24224

[FILTER]
Name stdout
Match *

[OUTPUT]
Name stdout
Match *

この二つのファイルをカレントディレクトリに配置して以下のコマンドを実行。

docker-compose up -d

これにて、3つのコンテナが起動したことを確認出来ると思います。

$ docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------------------------------------------
fluent_sample_fluent-bit_1 /fluent-bit/bin/fluent-bit ... Up 2020/tcp, 0.0.0.0:24224->24224/tcp
fluent_sample_sample_service1_1 go run /echo/main.go Up 0.0.0.0:8080->8080/tcp
fluent_sample_sample_service2_1 go run /echo/main.go Up 0.0.0.0:8090->8080/tcp

次のコマンドでログを監視してみましょう。

docker logs -f fluent_sample_fluent-bit_1

時折、ポートを変えたりして以下のコマンドを打ってみるとログ内容がService1用と2用で出力されることが分かります。

http://192.168.99.100:8080/

http://192.168.99.100:8090/

※ IPアドレス部分について、基本的には「localhost」でよいのですが、筆者の環境はToolBoxのため、上記IPを使っております。

当記事は以上となります。

今回はFluent Bitとは何なのかを確認してみました。

最後に実例を用いたことでなんとなくイメージはつかめたのではないでしょうか。

これからコンテナ化が進むにつれて、もしかしたら必須ツールになるかもしれませんね。

長々とお疲れさまでした。

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA