ELK系列~Fluentd對大日志的處理過程~16K


Fluentd是一個日志收集工具,有輸入端和輸出端的概念,前者主要是日志的來源,你可以走多種來源方式,http,forward,tcp都可以,后者輸出端主要指把日志進行持久化的過程,你可以直接把它持久化到elasticsearch里,也可以直接在控制台輸出,這看你如何配置了,更多基礎配置可以看大叔這篇文章《ELK系列~對fluentd參數的理解》。

Fluentd輸入端的小知識

今天寫這篇文章主要是因為在實際工作中遇到的問題,我們為了查詢方便把日志定義成了json格式,當你的輸入日志不是json時,這條日志將會被拋棄,這個功能點由fluentd的filter過濾器實現,它可以判斷你的輸入日志是否為json,即不是json會被拋棄!

在項目中出現了大日志無法寫入elasticsearch的問題

問題的出現

經過多次測試,發現大於16K的json日志,無法寫入elastic,原因經過分析得出結論:當fluentd輸入端的日志大於16K時,會被拆封成小日志進行收集,這時被拆封的json就不是標准的了,所以在經過filter時,將會被拋棄!

Fluentd工作流程圖

 

Fluentd大日志分塊收集

對於大於16K的日志來說,Fluentd的輸入端會分塊收集,即大日志被拆封成多個小日志,這時我們設想一下,如果你輸入的是json,那被折斷之后就一定不是標准的json了,這時,再走filter過濾器時,這條不是json的日志將被折斷!

解決方法

目前這個問題在國外開發人員中也出現了,在github上也有人提這個issue,可能是fluentd的bug,我們將繼續關注!

https://github.com/moby/moby/issues/34620


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM