В настоящее время я использую 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
Похоже, что прямой вывод использует несколько потоков. Это ожидается?