ENECHANGE Developer Blog

ENECHANGE開発者ブログ

Ruby の fluent-logger gem を使って Fluent Bit にログを渡せるかどうか調べた

ENECHANGE の CTO 室でインフラエンジニアを務めている岩本です。

Ruby の fluent-logger gem を使って Fluent Bit にログを渡せるかどうか調べてみました。調査結果と、調査した背景をまとめておきます。

1. 調査結果

結論、Fluent Bit の Forward プラグインを使うことで、ログを渡せました

実行した Ruby スクリプト

require "fluent-logger"

logger = Fluent::Logger::FluentLogger.new(nil, host: "localhost", port: 24224, nanosecond_precision: true)
logger.post("myapp.access", {"key 1": 123456789, "key 2": "abcdefg"})

level_logger = Fluent::Logger::LevelFluentLogger.new(nil, host: "localhost", port: 24224, nanosecond_precision: true)
level_logger.level = Logger::WARN
level_logger.info("This will not be output.")
level_logger.warn("This will be output.")

Fluent Bit の起動コマンド

$ fluent-bit -i forward -o stdout

スクリプト実行時の Fluent Bit 標準出力の出力内容

[0] myapp.access: [1649060277.184563681, {"key 1"=>123456789, "key 2"=>"abcdefg"}]
[0] warn: [1649060277.185208092, {"level"=>"WARN", "message"=>"This will be output."}]

解説

fluent-logger gem の README に書かれている FluentLogger と LevelFluentLogger を試したものです。どちらも意図通りに動作しました。

調査に使ったファイルは、下記の GitHub リポジトリにまとめています。

github.com

2. 調査した背景

今回このような調査をしたのは「Amazon EC2 で動いている Ruby アプリケーションのログを収集して分析したい」という話があったためでした。

話を聞き、ログ収集の手段として浮かんだのは Fluentd です。他社事例が多いこと、また、私自身が未経験であることから、ぜひ試してみたいと思いました。

しかしドキュメントによれば、Fluentd よりも、弟プロジェクトの Fluent Bit のほうが軽量そうです。俄然、Fluent Bit への興味が湧いてきました。

気になったのは、EC2 上の Ruby アプリケーションから Fluent Bit にどうやってログを渡すかです。Fluentd 向けに書かれた fluent-logger gem がそのまま使えれば、それが最適と考えて問題ないでしょう。

以上の背景により、今回の調査に至ったのでした。

まとめ

調査の結果、fluent-logger gem を使って Fluent Bit にログを渡せると分かりました。課題をシンプルに解決できそうで何よりです。