Open4
FireLens って結局なんだっけ?どう使えばいいの?
Fluentd とは
ログをいい感じに集約するサービス。 Ruby 入れてる環境に立てられる。結構前からある。非常に多機能。でも Ruby いちいち入れないといけないのかよーっていうアレはあった。
Fluent Bit とは
組込み向け Fluentd という立ち位置だったけど, C/C++ からコンパイルされるシングルバイナリゆえにコンテナとの相性がいい。シンプルな処理で完結できる場合は基本 Fluentd より Fluent Bit 使うという認識で良さそう。
で,FireLens って?
すごくふわふわした概念だけど,自分が一番落ち着いたのはこの表現。
FireLens は Docker のログドライバーですか?
"logConfiguration": { "logDriver": "awsfirelens", "options": { "Name": "firehose", "region": "us-west-2", "delivery_stream": "my-stream" } }
いいえ。
awsfirelens
ログドライバーは、タスク定義用のシンタックスシュガーであり、Fluentd または FluentBit のアウトプットプラグインの設定を指定できます。
JSON 定義の中に awsfirelens
が出てくるし,繋ぎ先はあくまで Fluent Bit であるように見えるのでミスリードされがちだけど,
- FireLens コンテナは Fluent Bit または Fluentd を実装の中身として選択でき,それらのスーパーセット的な立ち位置になってる(フルマネージドではないけど MySQL, Postgres に対する Aurora みたいな立ち位置と近い)
-
awsfirelens
自体はただのログドライバーだが,送信元サービスのログドライバーから送信先 Fluent Bit に到達するまでの一連の流れを FireLens と総称で呼んでいるような気がする
で合ってそう。
awsfirelens
ドライバの機能
- ECS タスクから吐かれる標準出力/エラー出力の送信先は,
- デフォルトの
awslogs
ドライバの場合は CloudWatch Logs に流れる awsfirelens
ドライバに変更するとサイドカーコンテナの FireLens(中身はほぼ Fluent Bit) に流れる
- デフォルトの
-
送信元コンテナにあてられた
awsfirelens
ドライバオプションのオプションが,FireLens コンテナのOUTPUT
に変換されて書き込まれる。- 要するに,送ってくる側の都合で送られる側の Fluent Bit コンテナの設定ファイル書き換えなくていいよ。送る側に併せて宣言させるから。 みたいな感じ
インフラの変更頻度が低く済むので使い勝手は良さそう。
AWS より
Qiita 記事より
ログ転送先振り分けの戦略
よくあるやつ↓
- Info は S3 に送りたい
- Emergency 〜 Warning は NewRelic + S3 に送りたい
コンテナ出力の stdout を正規表現で振り分ける方式
この方は OUTPUT
を手書きしている。 OUTPUT
の Match
もタスク設定の JSON から注入すればええやん?って一見思うが…
これを見ると
となっており,イメージビルドして設定を手書きするしか方法がないことが分かる。