これは Kubernetes Advent Calendar 2020 - Qiita の12/15(火)の記事です。
TL;DR;
kubernetes上のアプリケーションログを集めて、Apache Pulsarに送るFluent Bitのアウトプットプラグイン(のプロトタイプ)を作成。
背景・課題
(実際にあったものではなく、空想・シミュレーションです)
これまでログを解析するためにAというツールを使ってきましたが、今回新たにBというツールでも別の角度から解析を行いたいシチュエーションになった場合にどのようにこの課題を解決しようかと考えました。
解決法としてはいくつか方法は考えられますが、今回はログの発生元と解析ツールの間にメッセージングプラットフォームなどを置いて解決しようと考えました。
app-log -> log-collector -> tool
↑だったものを、↓に置き換えるイメージ
┌ tool-A
app-log -> log-collector -> messaging-pf -┤
└ tool-B
解決案
ログコレクタにFluent Bitを、メッセージングプラットフォームにApache Pulsarを採用しようと考えました。
Fluent Bit とは
Fluent Bit is an open source Log Processor and Forwarder which allows you to collect any data like metrics and logs from different sources, enrich them with filters and send them to multiple destinations. It's the preferred choice for containerized environments like Kubernetes.
ログコレクタです。
Apache Pulsar とは
Apache Pulsar is a cloud-native, distributed messaging and streaming platform originally created at Yahoo! and now a top-level Apache Software Foundation project
メッセージングプラットフォームです。
メッセージングプラットフォーム界では他にもKafkaなど有名なものがいくつもありますが、Apache PulsarもCNCF Cloud Native Interactive Landscapeの「Streaming & Messaging」の項目に記載があるくらい有名なものになります。
本構成の問題点
Outputs - Fluent Bit: Official Manualを見ても、Apache Pulsar用のアウトプットプラグインがない。
ないとなれば書くしかありません。
Fluent BitはFluentdと異なりCで書かれています。
私はCは書けませんがGoなら少し書けます。そこで調べてみるとGo用のマニュアルやライブラリがありました。
公式マニュアル:Golang Output Plugins - Fluent Bit: Official Manual
出来たもの
プラグインを書いたと言ってもプロトタイプであり、認証なしの最低限のものが動いたまでです。
実際にk8sに導入してみる
本当はこの先までやりたかったけど、環境構築が間に合わずここまで。すみません。
↑この辺を見て、Kafkaの部分をApache Pulsarに置き換えれば出来るはず。
まとめ
kubernetes上のアプリケーションログを集めて、Apache Pulsarに送るFluent Bitのアウトプットプラグインのプロトタイプを作成しました。
今後はk8sで動かしてみたり、プラグイン自体をしっかり実装していこうかと思います。