Fluent Bit で「broken connection to」が不定期に発生するときの対処方法

2022.07.20

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

困っていた内容

Fluent Bit を使って ECS タスクのログを CloudWatch Logs に転送しています。Fluent Bit のログを確認すると、ときどきですが CloudWatch Logs との接続が切断された旨のエラーが記録されています。
ざっくり確認した限り、ログの欠損などは起きていないようですが、何か設定が足りないのでしょうか。必要な対応があれば教えてください。

[error] [http_client] broken connection to logs.ap-northeast-1.amazonaws.com:443 ?
[error] [output:cloudwatch_logs:cloudwatch_logs.0] Failed to send log events

どう対応すればいいの?

Fluent Bit のログからログが失われた記録がないか確認してください。

Fluent Bit でときおり接続エラー(broken connection to)が発生するのは想定された挙動であり、エラーが発生した場合は自動的に再試行が行われます。再試行の結果、ログが CloudWatch Logs に正常に保管されている場合、対応は不要です。

そのため、まずは Fluent Bit のログを確認し、最終的にログがどのような状態になっているか確認してください。

aws-for-fluent-bit/debugging.md at mainline · aws/aws-for-fluent-bit

Fluent Bit is a very a low level tool, both in terms of the power over its configuration that it gives you, and in the verbosity of its log messages. Thus, it is normal to have errors in your Fluent Bit logs; its important to understand what these errors mean.

再試行もエラーとなった場合などログが失われた場合は、次のようなエラーが Fluent Bit のログに記録されます。エラーの記録がめったになく継続的に発生していない場合は、再試行の回数を増やすことを検討してください。デフォルトの再試行回数は一回で、Retry_Limitオプションから変更できます。

※エラーが継続的に発生している場合は、ネットワーク経路など構成上の問題が考えられます。

[2022/02/16 20:11:36] [ warn] [engine] chunk '1-1645042288.260516436.flb' cannot be retried: task_id=0, input=tcp.3 > output=cloudwatch_logs.1

Scheduling and Retries - Fluent Bit: Official Manual

設定例

[OUTPUT]
    Name        http
    Host        192.168.5.6
    Port        8080
    Retry_Limit False   # 無制限に再試行を行う

[OUTPUT]
    Name            es
    Host            192.168.5.20
    Port            9200
    Logstash_Format On
    Retry_Limit     5 # 5回再試行を行う

参考資料