4

現在、ログ スタックとして JournalD + JournalBeat + Logstash を使用していますが、JournalD + FluentD の使用に切り替えたいと考えています。

https://github.com/fluent-plugin-systemd/fluent-plugin-systemdを FluentD の入力として使用してみましたが、1 秒あたり最大 1000 ログ行というスループットが低く、少なくとも 2000 をサポートする必要があります。

だから今、私はJournalD + FluentBit + FluentDで、FluentBit + FluentDの間のForwardプロトコルを使用して試しています。このスタックを使用すると、1 秒あたり 5000 ログ行のスループットに到達できますが、行が乱れます。実際、故障はチャンクにあるようです。

これが私のFluentBit設定です:

[SERVICE]
    # Flush
    # =====
    # Set an interval of seconds before to flush records to a destination
    Flush       5

    Daemon       Off
    HTTP_Server  On
    HTTP_Listen  0.0.0.0
    HTTP_Port    2020

[INPUT]
    Name            systemd
    Tag             host.*
    Systemd_Filter  _SYSTEMD_UNIT=docker.service
    Read_From_Tail  true
    Path            /var/log/journal

[OUTPUT]
    Name          forward
    Require_ack_response true
    Match         *
    Host          127.0.0.1
    Port          24224

これが私のFluentD構成です:

    <source>
      @type forward
      @id input_forward
      tag docker.systemd
    </source>

    <match docker.systemd>
      @type copy
      <store>
        @type file
        @id out_file_docker
        path /file-logs/${$.CONTAINER_TAG}/%Y/%m/%d/${$.PRIORITY}
        append true
        <format>
          @type single_value 
          message_key MESSAGE
        </format>
        <buffer $.CONTAINER_TAG,$.PRIORITY,time>
          @type file
          path /var/log/fluentd/file-buffers/
          timekey 1d
          flush_mode interval
          flush_interval 10s
          flush_at_shutdown true
        </buffer>
      </store>
      <store>
        @type prometheus
        <metric>
          name fluentd_output_status_num_records_total
          type counter
          desc The total number of outgoing 
        </metric>
      </store>
    </match>

追加の詳細:

  • 4 GB と 4096 の CPU シェアを持つ Docker コンテナで FluentD と FluentBit を実行しています
  • CPU 使用率の測定値は、両方のサービスで 20% 未満です。

私が試した他のこと:

  • FluentBit を 2MB に設定Mem_Buf_Limitすると、順不同が修正されますが、1 秒あたり 350 行のスループットしか得られません。より大きなバッファログ行を使用すると、再び順不同になります。
  • FluentBit の出力をファイルに設定すると、ログの行は順番に表示されますが、ログを別のファイルに分散する機能が失われます。
  • FlushFluentBit でより大きな間隔を使用すると、より大きなチャンクが順不同になります
  • flush_thread_count影響なしで FluentD で試した

私が試すべき他の設定/プロトコルのアイデアはありますか? Journal と FluentD を統合する他の方法はありますか?

- - - 編集 - -

DEBUG を使用して FluentBit ログを見ると、次のように表示されます。

[2020/01/14 17:00:30] [trace] [upstream] destroy connection #52 to 127.0.0.1:24224
[2020/01/14 17:00:30] [trace] [upstream] destroy connection #100 to 127.0.0.1:24224

したがって、前方出力は複数のスレッドを使用しているようです。それは期待されていますか?

4

1 に答える 1