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回目)
今回
webコンテナのログ出力をJSON形式→文字列に戻す
必ずしもJSONでログを出力する必要は無く、通常の文字列の出力に戻すことにしました。
より疎結合で良いかと思います。
三種類のログをfluentbitで受け取る部分は同じですが、分類方法を見直します。
1. LogA(アクセスログ):stdoutのもの
2. LogB(エラーログ):stderrのもの
3. LogC(アプリケーションログ):stdout/stderrに関わらず、ログの先頭に「application」の識別子が付与されているもの
fluent-bitのstream-processor見直し
stream-processorも再設計します。
この処理の流れは一見分かりにくく、フローを図にしました。概ね下記の様な流れになると認識しています。
docker-composeで付与タグの定義
前回の構成では、webコンテナから標準出力されたログにTagが付与されていない状態でした。
FireLensの挙動に合わせ、docker-composeレベルでTagを定義し、ログの照合に使用します。
logging:
driver: fluentd
options:
tag: "service-firelens-xxx"
fluentd-address: "localhost:24224"
fluentd-async-connect: "true"
ログのプロセス
以上の処理の結果、ログが下記のように出力されます。
書式がこんな感じで変わるというイメージだけ掴んで頂ければと思います。
LogA
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
[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"}]
[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
exception
[0] xxx-firelens-xxx: [1576511122.000000000, {"container_id"=>"a8b309523a4352f95164b67ab0b19cfd9104b76e51cab930a8ac7060d8707c41", "container_name"=>"/firelens_web_1", "source"=>"stderr", "log"=>"exception"}]
[0] error: [1576511781.000000000, {"source"=>"stderr", "message"=>"exception", "container_id"=>"b6fcbeebca39a0b06822f7b16df1de80cd1245521392354fe48b2f915a421834", "container_name"=>"/firelens_web_1", "service"=>"error"}]
LogC
application error error-text
[1] xxx-firelens-xxx: [1576511198.000000000, {"log"=>"application error error-text", "container_id"=>"a8b309523a4352f95164b67ab0b19cfd9104b76e51cab930a8ac7060d8707c41", "container_name"=>"/firelens_web_1", "source"=>"stderr"}]
[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のアップロードに対応できているようです。
まとめ
当初理解が不足していた部分を補完し、反映できました。
宜しくお願いいたします。