打算給filebeat加個grok功能(盡管作者有說過不加grok是為了在不影響被收集機器性能秒旋,但是值得試一試,畢竟小數(shù)據(jù)量的時候都不是問題)诀拭,能否上線看看日常運行cpu增長迁筛,如果進程整體不超過5%(當前擼nginx的filebeat CPU占用基本可以忽略不計)
記錄下filebeat代碼結(jié)構(gòu),免得擼一半又忘了
filebeat.go:
New():初始化一個filebeat對象耕挨,load了一堆module细卧,有個pipeline的概念,感覺是跟logstash的設(shè)計架構(gòu)一脈相承筒占,只不過logstash模塊間消息傳遞粗暴地用了個數(shù)組贪庙,這里用了go的channel。有個MLmodule翰苫,媽個雞的這也玩機器學(xué)習(xí)止邮。。奏窑。
Run():Setup整個pipeline导披。registrar--用來記錄上次擼到哪一行(如果擼過),以便下一次重啟的時候不會發(fā)重復(fù)的埃唯;crawler--初始化input盛卡,根據(jù)配置,每個文件一個input(好多鎖啊信號量啊筑凫。滑沧。并村。感覺是抽象出一個libbeat做各種beat的基礎(chǔ)之后造成的過度設(shè)計);其他幾個module感覺是輔助類的滓技,先忽略哩牍。這里defer了各種module的close方法,還算是有交帶的了令漂。
其他的具體實現(xiàn)看了下膝昆,基本都是Run()/Stop()這些方法,然后各種鎖啊信號量啊channel啊叠必,感覺一時半會看不完
先解決問題吧
input/log/harvester.go
一大坨文件荚孵,這個才是核心
文件的input和處理都在這,過濾是在shouldExportLine()這個函數(shù)纬朝,
先簡單改下
1收叶、config增加一個grok配置,對應(yīng)文件
2共苛、讀取grok配置判没,對log內(nèi)容grok解析成json
3、合并到主消息體
Done
https://github.com/yuz11/beats.git
測試隅茎、性能(To Be Continued)