お元気そうで残念です

もんじゃ焼きが転がってるところにいます。

FluentBitのログ欠損調査&対策

EKSでFluentBitを使ってログ転送をしています。

別環境からEKSへの移設期間で双方のログを比較していたところ、EKS環境でログ欠損がかなり起きていることが分かり、対策でやったことを書いていきます。

対策

ログを確認する

FluentBitのログを見てみると以下の2つのログが出ていました。
Kinesisのログはretryされるので問題ないはずですが、mem buf overlimitはアウトです。

[ warn] [input] tail.0 paused (mem buf overlimit)
level=warning msg="[kinesis 0] 34/500 records failed to be delivered. Will retry.\n"

podのmemory request/limitを上げる

mem buf overlimitが出ていたのでmemory sizeを増やしましょう。
今回はここは足りていましたが一応記載します。

resources:
  limits:
    memory: 750Mi
  requests:
    memory: 500Mi

Mem_Buf_Limitを上げる

podのmemoryは十分確保されていましたが、FluentBitのconfigでtail inputプラグインでMem_Buf_Limitが非常に低い値になっていました。 ここも余裕のある値にしておきます。

Tail - Fluent Bit: Official Manual

Mem_Buf_Limit     500MB

メモリ監視を入れる

これでも十分な値かは判断出来ないので、Datadog等でメモリ使用量を監視しましょう。
上限に引っかかるようであれば適宜増強します。

カスタムメトリクスを収集する

FluentBitはprometheusエンドポイントを作成出来ます。

Monitoring - Fluent Bit: Official Manual

Datadog等でメトリクスを収集するようにしましょう。
今回は収集しても怪しいデータは取れませんでした。

  template:
    metadata:
      labels:
        name: fluentbit
      annotations:
        ad.datadoghq.com/aws-for-fluent-bit.check_names: |
          ["prometheus"]
        ad.datadoghq.com/aws-for-fluent-bit.init_configs: |
          [{}]
        ad.datadoghq.com/aws-for-fluent-bit.instances: |
          [
            {
              "prometheus_url": "http://%%host%%:2020/api/v1/metrics/prometheus",
              "namespace": "fluentbit",
              "metrics": [
                "fluentbit_input_records_total",
                "fluentbit_input_bytes_total",
                "fluentbit_output_proc_records_total",
                "fluentbit_output_proc_bytes_total",
                "fluentbit_output_errors_total",
                "fluentbit_output_retries_total",
                "fluentbit_output_retries_failed_total"
              ],
              "tags": [
                "service_code:fluent-bit",
                "component:fluent-bit",
                "role:flunt-bit",
                "service_group:daemonset"
              ]
            }
          ]

Buffer_Chunk_SizeとBuffer_Max_Sizeを増やす

This value is used to increase buffer size.

ということなので増やすべきでしょう。これに関する不審なログは出ていませんでしたが1MBまで増やしました。

Buffer_Chunk_Size 1MB
Buffer_Max_Size   1MB

Tail - Fluent Bit: Official Manual

どうしても欠損してしまうときは?

色々やっても欠損してしまう場合は諦めましょう! ログで送るのではなくDBに直接書き込むようにすべきです。