打算给filebeat加个grok功能(尽管作者有说过不加grok是为了在不影响被收集机器性能,但是值得试一试,毕竟小数据量的时候都不是问题),能否上线看看日常运行cpu增长,如果进程整体不超过5%(当前撸nginx的filebeat CPU占用基本可以忽略不计)
记录下filebeat代码结构,免得撸一半又忘了
filebeat.go:
New():初始化一个filebeat对象,load了一堆module,有个pipeline的概念,感觉是跟logstash的设计架构一脉相承,只不过logstash模块间消息传递粗暴地用了个数组,这里用了go的channel。有个MLmodule,妈个鸡的这也玩机器学习。。。
Run():Setup整个pipeline。registrar--用来记录上次撸到哪一行(如果撸过),以便下一次重启的时候不会发重复的;crawler--初始化input,根据配置,每个文件一个input(好多锁啊信号量啊。。。感觉是抽象出一个libbeat做各种beat的基础之后造成的过度设计);其他几个module感觉是辅助类的,先忽略。这里defer了各种module的close方法,还算是有交带的了。
其他的具体实现看了下,基本都是Run()/Stop()这些方法,然后各种锁啊信号量啊channel啊,感觉一时半会看不完
先解决问题吧
input/log/harvester.go
一大坨文件,这个才是核心
文件的input和处理都在这,过滤是在shouldExportLine()这个函数,
先简单改下
1、config增加一个grok配置,对应文件
2、读取grok配置,对log内容grok解析成json
3、合并到主消息体
Done
https://github.com/yuz11/beats.git
测试、性能(To Be Continued)