4

我目前正在使用 JournalD + JournalBeat + Logstash 作为日志堆栈,但我想切换到使用 JournalD + FluentD。

我尝试使用https://github.com/fluent-plugin-systemd/fluent-plugin-systemd作为 FluentD 的输入,但它导致每秒约 1000 条日志行的低吞吐量,我需要至少支持 2000 条。

所以现在我正在尝试使用 JournalD + FluentBit + FluentD,在 FluentBit + FluentD 之间使用转发协议。使用此堆栈,我能够达到每秒 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>

额外细节:

  • 我在 4gb 和 4096 CPU 共享的 docker 容器中运行 FluentD 和 FluentBit
  • 两种服务的 CPU 使用率测量值均低于 20%

我尝试过的其他事情:

  • 在 FluentBit 中设置Mem_Buf_Limit为 2MB 可修复无序,但吞吐量仅为每秒 350 行。如果我使用更大的缓冲区日志行再次出现故障。
  • 将 FluentBit 输出设置为文件会按顺序生成日志行,但我无法在不同文件中分发日志。
  • 在 FluentBit 中使用更大的Flush间隔会导致更大的块乱序
  • 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

0

您可以在输入插件中添加 Offset_Key,这样可以解决您在查询数据时遇到的问题,而且 fluentbit 不遵循命令。

于 2021-12-24T15:18:52.303 回答