
前回までのまとめ
前回、分割されたdockerのログをどのようにして結合したかを記載しました。
今回はfluentd-plugin-concatの設定で用いたtimeout_labelについて記載します。
timeoutエラーが大量に発生する
最初はtimeout_labelを設定していませんでした。それでも正しく動作したのですが、CloudWatchのログを確認すると、大量のERRORが発生していました。
1 | Throughput limits for the delivery stream may have been exceeded. |
結合されたログが正しくkinesisに出力されていなかったようです。
timeout_labelを追加する
timeout_labelを設定するとログを再ルーティングできると書いてあったので、ログを結合する箇所に timeout_labelを設定しました。そのlabelの先では、通常(タスク定義ファイルで設定した)通り、kinesisへデータを送るように設定します。
設定した箇所のconfを掲載します。
1 | <filter firelens**> |
timeout_labelの設定をしなければ、filterディレクティブだけで設定は完了です。実際に転送するkinesisの設定は、タスク定義ファイルで行うからです。
しかし、今回timeout_labelの設定を行なって、その転送先として、タスク定義ファイルと同じ設定をしています。
これでtimeout_labelに引っかかったログは、正しい転送先へ送られます。
timeout_labelに引っかかったということはCloudWatchを見ると確認できます。
1 | adding match in @TIMEOUT pattern="**" type="kinesis_firehose" |
まとめ
Dockerのログが16kで切れてしまう問題について、記載してきました。fluentd-plugin-concatの設定が実際のログデータに依存してしまっているので、その辺りをDockerのログであるという普遍的なデータ(partial_idやpartial_lastなど)を用いて結合できるように設定できるとよりスマートかなと思います。今後はその辺りも調査していきたいと思います。