發(fā)布時間:2020-04-03
欄目:其他
在集群化環(huán)境里萬能文章采集 ,日志采集是重要基礎(chǔ)設(shè)施。
開源主流解決方案是基于flume-ng,但在實際使用中發(fā)現(xiàn)flume-ng存在諸多問題,比如flume-ng的spoolDir采集器只能對文件名轉(zhuǎn)檔后的大小不能變化的最終日志文件進行采集,不能滿足采集時效性要求,如果要采集正在被不斷追加的日志文件,只能用exec采集器搭配tail -F命令,但tail -F命令又不能通配目標目錄中將來新增的未知文件名。其它解決方案如logstash由于是JAVA開發(fā),內(nèi)存占用和性能都不能達到最優(yōu)。
作為一個日志采集的本地代理,內(nèi)存占用應(yīng)該小而受控,性能應(yīng)該高效,耗費CPU低對應(yīng)用影響盡可能小,要能異步實時追蹤日志文件增長,某些應(yīng)用會在目標目錄下產(chǎn)生多個日志文件甚至現(xiàn)在不能確定將來的日志文件名,架構(gòu)上要支持多輸入多輸出流式日志采集傳輸,為了達成以上需求,我研究了所需技術(shù),評估實現(xiàn)難度并不高,就自研了logpipe。
logpipe是一個分布式、高可用的用于采集、傳輸、對接落地的日志工具,采用了插件風(fēng)格的框架結(jié)構(gòu)設(shè)計,支持多輸入多輸出按需配置組件用于流式日志收集架構(gòu),無第三方依賴。
logpipe的一種用法是能異步實時監(jiān)控集群里的所有日志目錄,一旦有文件新增或追加寫,立即采集并傳輸?shù)酱蟠鎯ι弦韵嗤罩疚募喜⒙涞兀蛘邔懭際DFS。異步意味著不影響應(yīng)用輸出日志的性能,實時意味著一有日志立即采集,很多日志采集工具如flume-ng、logstash介紹文檔通篇不提采集方式是否實時還是周期性的,這很關(guān)鍵。
logpipe概念樸實、使用方便、配置簡練,沒有如sink等一大堆新名詞。
一鍵文章采集logpipe由若干個input、事件總線和若干個output組成。啟動logpipe管理進程(monitor),派生一個工作進程(worker),監(jiān)控工作進程崩潰則重啟工作進程。工作進程裝載配置加載若干個input插件和若干個output插件,進入事件循環(huán),任一input插件產(chǎn)生消息后輸出給所有output插件。
logpipe自帶了5個插件(今后將開發(fā)更多插件),分別是:
* logpipe-input-file 用inotify異步實時監(jiān)控日志目錄,一旦有文件新建或文件增長事件發(fā)生(注意:不是周期性輪詢文件修改時間和大小),立即捕獲文件名和讀取文件追加數(shù)據(jù)文章采集程序插件。該插件擁有文件大小轉(zhuǎn)檔功能,用以替代應(yīng)用日志庫對應(yīng)功能,提高應(yīng)用日志庫寫日志性能文章采集助手。該插件支持數(shù)據(jù)壓縮文章采集助手。
* logpipe-output-file 一旦輸入插件有消息產(chǎn)生后用相同的文件名落地文件數(shù)據(jù)。該插件支持數(shù)據(jù)解壓。
* logpipe-input-tcp 創(chuàng)建TCP服務(wù)偵聽端,接收客戶端連接,一旦客戶端連接上有新消息到來,立即讀取。
* logpipe-output-tcp 創(chuàng)建TCP客戶端,連接服務(wù)端,一旦輸入插件有消息產(chǎn)生后輸出到該連接。
* logpipe-input-exec 執(zhí)行長命令并捕獲輸出
* logpipe-output-hdfs 一旦輸入插件有消息產(chǎn)生后用相同的文件名落地到HDFS中。該插件支持數(shù)據(jù)解壓。
使用者可根據(jù)自身需求,按照插件開發(fā)規(guī)范,開發(fā)定制插件文章采集程序插件,如IBMMQ輸入插件、HDFS輸出插件等。
文章地址:http://www.meyanliao.com/article/other/zjqhhjlrzcjszyjcss.html