現在、ログ スタックとして 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 の出力をファイルに設定すると、ログの行は順番に表示されますが、ログを別のファイルに分散する機能が失われます。
Flush
FluentBit でより大きな間隔を使用すると、より大きなチャンクが順不同になります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
したがって、前方出力は複数のスレッドを使用しているようです。それは期待されていますか?