Неправильные журналы между FluentD и FluentBit - PullRequest
2 голосов
/ 14 января 2020

В настоящее время я использую JournalD + JournalBeat + Logsta sh в качестве стека ведения журнала, но я хочу переключиться на использование JournalD + FluentD.

Я пытался использовать https://github.com/fluent-plugin-systemd/fluent-plugin-systemd в качестве вход для FluentD, но это приводит к низкой пропускной способности ~ 1000 строк журнала в секунду, и мне нужно поддерживать по крайней мере 2000.

Так что теперь я пытаюсь с JournalD + FluentBit + FluentD, используя протокол Forward между FluentBit + Свободно С этим стеком я могу достигнуть пропускной способности 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>

Дополнительные сведения :

  • Я использую FluentD и FluentBit в docker контейнерах с 4 ГБ и 4096 долями ЦП
  • Измерения использования ЦП менее 20% для обеих служб

Другие вещи, которые я пробовал:

  • Установка для Mem_Buf_Limit в FluentBit значения 2 МБ, которое исправляет неисправность, но приводит к пропускной способности всего 350 строк в секунду. Если я использую больший буфер, строки журнала снова выходят из строя.
  • Настройка вывода FluentBit для файла приводит к порядку строк журнала, но я теряю возможность распределять журналы в разных файлах.
  • Использование больший интервал Flush в FluentBit приводит к тому, что большие фрагменты выходят из строя
  • Пробовал flush_thread_count в FluentD без последствий

Какие-либо идеи о любых других настройках / протоколах, которые я должен попробовать? Есть ли другой способ интеграции Journal и FluentD?

----- EDIT ----

Глядя на журналы FluentBit с помощью DEBUG, я вижу:

[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

Похоже, что прямой вывод использует несколько потоков. Это ожидается?

...