LoginSignup
11
5

More than 3 years have passed since last update.

FireLens/fluentbit構成の見直しと改修

Posted at

FireLensの記事は一旦完了したのですが、気になる部分を改修します。4回目の記事です。
修正済みのリソースをV2ブランチに反映しました。
https://github.com/antennix/firelens/tree/v2

1回目 firelensを使用した、ログ分割と監視処理
2回目 ローカルで、datadog/S3へデータを転送できるdockerイメージを作成する
3回目 Firelensで、datadog/S3へデータを転送できるdockerイメージを作成する

改修箇所

datadogからS3にアップロードせず、全てfluentbitからS3にアップロードする

図表ではLogB,LogCはdatadogを経由し、S3へアップロードされる想定でしたが
ログアップロードの通信をAWS内で完結させようと考えました。
その為、datadogはリアルタイムアラートのみ対応し、その後ログを破棄します。

以前の構成(1回目)

https___qiita-image-store.s3.ap-northeast-1.amazonaws.com_0_477542_77087867-4a2a-911b-2eeb-0f60bc24d2b7.jpeg

今回

開発構成図-Copy of fluentbit.png

webコンテナのログ出力をJSON形式→文字列に戻す

必ずしもJSONでログを出力する必要は無く、通常の文字列の出力に戻すことにしました。
より疎結合で良いかと思います。

三種類のログをfluentbitで受け取る部分は同じですが、分類方法を見直します。

1. LogA(アクセスログ):stdoutのもの
2. LogB(エラーログ):stderrのもの
3. LogC(アプリケーションログ):stdout/stderrに関わらず、ログの先頭に「application」の識別子が付与されているもの

fluent-bitのstream-processor見直し

stream-processorも再設計します。
この処理の流れは一見分かりにくく、フローを図にしました。概ね下記の様な流れになると認識しています。
stream-processor (2).png

docker-composeで付与タグの定義

前回の構成では、webコンテナから標準出力されたログにTagが付与されていない状態でした。
FireLensの挙動に合わせ、docker-composeレベルでTagを定義し、ログの照合に使用します。

docker-compose.yml
    logging:
      driver: fluentd    
      options:
        tag: "service-firelens-xxx"
        fluentd-address: "localhost:24224"
        fluentd-async-connect: "true"

ログのプロセス

以上の処理の結果、ログが下記のように出力されます。
書式がこんな感じで変わるというイメージだけ掴んで頂ければと思います。

LogA
web-container-out
172.23.0.1 - - [16/Dec/2019:15:44:49 +0000] GET / HTTP/1.1 200 23578 - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36 8956
fluentbit-continer-in
[0] xxx-firelens-xxx: [1576511089.000000000, {"source"=>"stdout", "log"=>"172.23.0.1 - - [16/Dec/2019:15:44:49 +0000] GET / HTTP/1.1 200 23578 - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36 8956", "container_id"=>"a8b309523a4352f95164b67ab0b19cfd9104b76e51cab930a8ac7060d8707c41", "container_name"=>"/firelens_web_1"}]
fluentbit-continer-out
[0] access: [1576511781.000000000, {"source"=>"stdout", "message"=>"172.23.0.1 - - [16/Dec/2019:15:56:21 +0000] GET /?exception HTTP/1.1 200 - - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36 2209", "container_id"=>"b6fcbeebca39a0b06822f7b16df1de80cd1245521392354fe48b2f915a421834", "container_name"=>"/firelens_web_1", "service"=>"access"}]
LogB
web-container-out
exception
fluentbit-continer-in
[0] xxx-firelens-xxx: [1576511122.000000000, {"container_id"=>"a8b309523a4352f95164b67ab0b19cfd9104b76e51cab930a8ac7060d8707c41", "container_name"=>"/firelens_web_1", "source"=>"stderr", "log"=>"exception"}]
fluentbit-continer-out
[0] error: [1576511781.000000000, {"source"=>"stderr", "message"=>"exception", "container_id"=>"b6fcbeebca39a0b06822f7b16df1de80cd1245521392354fe48b2f915a421834", "container_name"=>"/firelens_web_1", "service"=>"error"}]

LogC

web-container-out
application error error-text
fluentbit-continer-in
[1] xxx-firelens-xxx: [1576511198.000000000, {"log"=>"application error error-text", "container_id"=>"a8b309523a4352f95164b67ab0b19cfd9104b76e51cab930a8ac7060d8707c41", "container_name"=>"/firelens_web_1", "source"=>"stderr"}]
fluentbit-continer-out
[0] application: [1576511737.000000000, {"status"=>"error", "message"=>"error-text", "source"=>"stderr", "container_id"=>"b6fcbeebca39a0b06822f7b16df1de80cd1245521392354fe48b2f915a421834", "container_name"=>"/firelens_web_1", "service"=>"application"}]

その他改修

fluentbitのS3アップロードプラグインのバージョンアップに伴い
追加の修正を行いました。
S3 Prefixのバグや、複数箇所へのS3のアップロードに対応できているようです。

まとめ

当初理解が不足していた部分を補完し、反映できました。
宜しくお願いいたします。

11
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
5