log4j2 輸入日志到flume


最近想將服務的運行日志收集起來,首先了解到flume技術棧

采用flume方案定了之后有兩種方式實現

1: 在應用中,log4j2直接發送日志信息到flume ,

2: 通過監控log4j2 產生的日志文件,將日志文件新產生的日志發送到flume

 

下面兩種方式都會介紹,首先透漏下我們選擇的解決方案,我們選擇了第二種監控新產生的日志文件

為什么這么選擇:

第一種方式需要修改服務中log4j2的配置,添加flume Appender , 在應用中,當日志輸出時,就會輸出到flume,很顯然,這種方式耦合了應用,並且對應用的性能有影響,到底有多大影響,這個還沒有測試,其次,這種方式應用中依賴了flume的依賴,假如將來部署服務的時候不想收集日志了,會不會對項目的啟動有影響,這一點也還沒有驗證,后續可能會驗證

 

第二種方式完全是監控日志文件,當產生新的日志文件或者日志文件中生成新的日志時,就會觸發日志收集。完全脫離應用存在。

 

我們介紹第二種方式的探索過程:
需求:當日志目錄下產生新的文件或動態產生日志時,收集日志,發送到flume

接下來了解flume能不能解決我們的需求:

flume 入門相關概念:

source:

channel:

sink ;

 

source 中有很多分類,我們着重分析了幾個的使用場景和特點

execSource :

spooldirSource :

taildirSource:

syslogSource ;

httpSource ;

經過分析每種Source的特點,很容易發現tailSource最接近我們的需求:

但是也有幾個問題:

1:log4j2產生日志的邏輯是當日志文件內容達到設置的size上限就會重命名該日志文件(例如:sysware-2018-12-20-1.log),然后新建一個sysware.log文件,供日志輸出,重命名日志之后,和原來的sysware.log日志文件全路徑不一致,taildirSource會當做一個新的日志文件,再次重復讀取,造成重復讀取的問題

2:dirSource監控的dir 可以指定文件名稱或者通過正則,但是如果已經有子文件夾的日志讀取不到

上面的問題只能通過源碼方式解決了

XXXXXX

 

所有的准備工作都做好了,我們現在開始做一個demo

XXXX


免責聲明!

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



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