Kubernetesのコンテナランタイムがcontainerd場合のFluent Bitでのログ転送について

目的

【エンジニア募集中】フルリモート可◎、売上/従業員数9年連続UP、平均残業8時間、有給取得率90%、年休124日以上 etc.  詳細はこちらから>

fluent-bitサンプルの設定がdockerのログを扱う前提となっているので
ランタイムをcontainerdした場合のログに対応するように変更します。

前提

・kubernetesが作成済みであること
・kubernetesのコンテナランタイムがcontainerdであること
・kubectlコマンドが実行可能であること
・Fluent Bitを使用したEKSのログ転送方法についての記事でFluent Bitが構築済みであること

まだ、ご覧になってない方は下記を参照ください。

Fluent Bitを使用したEKSのログ転送方法について

dockerとcontainerdのログのログのフォーマットについて

先にdockerとcontainerdのログのフォーマットの違いを見ていきます。
ちなみに、ログは各nodeの「/var/log/containers/」に出力されます。

・dockerのログ

・containerdのログ

上記のようになっており、containerdの方は1行のテキスト形式で表示され
先頭に「2021-12-17T08:03:23.918838346+09:00 stderr F 」containerdが付与した情報がつけられます。

特に変更はしなくても「2021-12-17T08:03:23.918838346+09:00 stderr F 」がついたままであれば
取得は可能できますが、余計なものは消してログを取得したいというところが今回やりたいことになります。

fluent-bitファイルを修正。

作成ファイル:fluent-bit.yaml

重要な部分は73行目にある以下の部分です。
fluent-bitの公式がcri用のログパーサーを用意してくれているので
それを指定します。

※上記のオプションを使用するためにはfluent-bitのバージョンが1.8以上が必要になります。

fluent-bitファイルを適応。

出力されたログを確認する

一行で表示されていたものが、time,stream,_p,logにパースされて登録されていることを確認します。

公式参考ページ

・Multiline Parsers / Concepts and Configuration
https://docs.fluentbit.io/manual/administration/configuring-fluent-bit/multiline-parsing
・Tail + New Multiline Core Feature
https://docs.fluentbit.io/manual/pipeline/inputs/tail#multiline-support
・New Multiline Filter
https://docs.fluentbit.io/manual/pipeline/filters/multiline-stacktrace

ぜひ参考にしてみてください!

【エンジニア募集中】フルリモートも◎(リモート率85.7%)、平均残業8時間、年休124日以上、有給取得率90% etc. 詳細はこちらから>

Smallitのサービス