My RSS Reader

Description about Blog Author


Fluent Bitを使ったテスト環境におけるアプリのログ収集

最近とある案件でFluentdやFluent bitを触ることが多くなりました。 きっかけは案件ではありましたが、これを使えば検証や開発用サーバーや環境のログ収集が手軽にできるのではと思い、試してみることにしました。

今回使ったのはFluent bitの方です。 Fluentdの方がサポートされているプラグインの数は段違いなほど多いのですが、軽量な方が良かったのでFluent bitを入れてみました。

Fluent Bitのインストール

次を参考に、何らかの方法でインストールします。

今回はサーバーはLinux、クライアントはmacOSを前提としています。 それぞれの環境にFluent Bitをインストールします。

クライアント側でforwardで特定のポートを解放して、送られてきたデータをファイルに書き込みます。 今回はクライアントのファイアウォールをオフにして作業しました。

アプリ側(Linux)の設定

Linux版のFluent Bitは次のパスのファイルをデフォルトで読み込みます。

/etc/fluent-bit/fluent-bit.conf

デフォルトでいくつかの設定がされているので全てコメントにした上で、次の設定を書き込みます。 今回の例はApache Web Serverのログを収集して、out.fowardしたデータをクライアントでIn.fowardで取り込んで、クライアントの特定のディレクトリー上にファイルとして書き込むことを前提としています。

今回は単独のログだけを送り込むため指定していませんが、収集するログが増えてきたらTagの指定もした方が良いかもしれません。 IPアドレスはクライアントのIPアドレスを指定します。クライアントOSの多くはデフォルトでファイアウォールが設定されています。今回は利用時にファイアウォールをオフにしています。

[INPUT] Name tail Path /var/log/httpd/access_log

[OUTPUT] Name forward Match * Host 192.168.1.5 Port 24224 tls off tls.verify off

クライアント側(macOS)

クライアントでは、次のような設定をしておきます。

[INPUT] Name forward Listen 0.0.0.0 Port 24224 Buffer_Chunk_Size 1M Buffer_Max_Size 6M

[OUTPUT] Name file Match * Path /Users/ytooyama/temp/fluent

早速実行してみましょう。実行するときは-cオプションで設定ファイルを指定します。

% fluent-bit -c /Users/ytooyama/temp/fluent/fluent-bit.conf

Fluent Bit v3.1.9 * Copyright (C) 2015-2024 The Fluent Bit Authors * Fluent Bit is a CNCF sub-project under the umbrella of Fluentd * https://fluentbit.io

______ _ _ ______ _ _ _____ __ | ___| | | | | ___ (_) | |____ |/ | | |_ | |_ _ ___ _ __ | |_ | |_/ /_| |_ __ __ / /`| | | _| | | | | |/ _ \ ‘_ \| __| | ___ \ | __| \ \ / / \ \ | | | | | | |_| | __/ | | | |_ | |_/ / | |_ \ V /.___/ /_| |_ \_| |_|\__,_|\___|_| |_|\__| \____/|_|\__| \_/ \____(_)___/

[2024/10/18 12:06:59] [ info] [fluent bit] version=3.1.9, commit=, pid=97234 [2024/10/18 12:06:59] [ info] [storage] ver=1.5.2, type=memory, sync=normal, checksum=off, max_chunks_up=128 [2024/10/18 12:06:59] [ info] [cmetrics] version=0.9.6 [2024/10/18 12:06:59] [ info] [ctraces ] version=0.5.6 [2024/10/18 12:06:59] [ info] [input:forward:forward.0] initializing [2024/10/18 12:06:59] [ info] [input:forward:forward.0] storage_strategy=‘memory’ (memory only) [2024/10/18 12:06:59] [ info] [input:forward:forward.0] listening on 0.0.0.0:24224 [2024/10/18 12:06:59] [ info] [sp] stream processor started [2024/10/18 12:06:59] [ info] [output:file:file.0] worker #0 started

今回の例ではLinuxサーバー上で動くApache Web Serverのアクセスログの収集をしています。アクセスログはLinuxディストリビューションによってログのパスが変わってきますので、適切なものを指定すればそのログ書き込みの差分をちゃんと認識して指定したファイルに書き込んでくれます。

% ls fluent-bit.conf tail.0

% cat tail.0 tail.0: [1729220842.232230407, {“log”:“192.168.1.5 - - [18/Oct/2024:12:07:22 +0900] \“GET / HTTP/1.1\” 403 3539 \”-\" \“Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:131.0) Gecko/20100101 Firefox/131.0\”"}] tail.0: [1729220842.336452806, {“log”:“192.168.1.5 - - [18/Oct/2024:12:07:22 +0900] \“GET /icons/apache_pb2.gif HTTP/1.1\” 200 4234 \“http://192.168.1.62/\” \“Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:131.0) Gecko/20100101 Firefox/131.0\””}] tail.0: [1729220842.467810805, {“log”:“192.168.1.5 - - [18/Oct/2024:12:07:22 +0900] \“GET /favicon.ico HTTP/1.1\” 404 196 \“http://192.168.1.62/\” \“Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:131.0) Gecko/20100101 Firefox/131.0\””}] tail.0: [1729224431.718462011, {“log”:“192.168.1.5 - - [18/Oct/2024:13:07:11 +0900] \“GET / HTTP/1.1\” 403 3539 \”-\" \“curl/8.7.1\”"}]

何かの基盤を作ると決まって「ログ収集はどうするの?」と聞かれる気がするので、そいうときはFluentdとかFluent bitが役立ちそうだなと感じました。 まずは自分でいろいろ触ってみようと思います。

[source]