如果你的日志請求達到了5000條/秒,這里描述的技術點可用於調優。
-
檢查操作系統配置
在安裝Fluentd之前,進行操作系統參數優化。 -
通過top查看系統瓶頸
如果發現Fluentd運行效率不佳,可先查看一下當前系統瓶頸在哪里:CPU?內存?磁盤IO? -
避免額外運算
不要在Fluentd中執行過多的額外運算。這其實也是一個通用的使用建議。雖然Fluentd可以進行各種過濾、格式化等操作,但是過於復雜的配置難於理解和維護,也會降低其性能和健壯性。配置文件應保持盡可能的簡單。 -
使用flush_thread_count參數
如果Fluentd輸出的日志目的地是一個遠端的服務器或者服務,可打開配置文件中的flush_thread_count參數,此參數默認值為1. 使用多個flush線程會掩蓋網絡延遲,增加並發輸出。
該參數適用於所有的output插件。參考配置如下:
<match test>
@type output_plugin
<buffer ...>
flush_thread_count 8
...
</buffer>
...
</match>
- 對S3/TD插件使用外部gzip
Ruby使用GIL控制多線程的執行,同一時刻只能有一個線程運行,這在一定程度上降低了系統的並發性能。
S3/TD插件允許異步調用外部的gzip程序來進行數據壓縮,這可釋放CPU的部分算力來執行其他處理邏輯。
配置如下所示:
# S3
<match ...>
@type s3
store_as gzip_command
<buffer ...>
flush_thread_count 8
...
</buffer>
...
</match>
# Treasure Data
<match ...>
@type tdlog
use_gzip_command
<buffer ...>
flush_thread_count 8
...
</buffer>
...
</match>
-
減少內存使用
Ruby可配置GC參數以優化內存使用性能,可通過環境變量進行配置。為減少內存使用,可調整RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR為較小的值,默認為2.0,可將其調整為0.9或1.2等。具體可參考Ruby官方文檔。 -
多worker模式
對於日志量級很大的場景,CPU通常會是Fluentd的性能瓶頸。此時可啟用多worker模式,通過多個worker進程並行處理日志事件。
<system>
workers 8
</system>