Fluentd是一個日誌收集工具,有輸入端和輸出端的概念,前者主要是日誌的來源,你可以走多種來源方式,http,forward,tcp都可以,後者輸出端主要指把日誌進行持久化的過程,你可以直接把它持久化到elasticsearch里,也可以直接在控制台輸出,這看你如何配置了,更多基礎配置可以看大叔這 ...
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