公司一直使用的Filebeat进行日志采集
由于Filebeat采集组件一些问题,现需要使用iLogtail进行代替
现记录下iLogtail介绍和实际使用过程
这是iLogtail系列的第五篇文章
目录
前期准备
为了保证测试环境尽量相同,所以将iLogtail和Filebeat安装在同一台机器上,并配置相同的采集路径,输出数据各发送一个kafka。
iLogtail和Filebeat的性能配置均未修改,因为修改后会用性能换取传输速率和时间,真实使用场景下会影响机器上其他应用,所以目前均采用常规配置,后期可进行性能配置调优。
Filebeat配置如下
|
iLogtail配置如下
|
内存、cpu占用情况对比
在确认了/logs/xxx下磁盘空间充足的情况下,加入约720M的数据,快速加入数据测试两者数据采集性能。
iLogtail和Filebeat 关于cpu使用率比3.3%:26.2%,大约是1:8
iLogtail和Filebeat 关于物理内存使用率比约是1:1
由于加入速率过慢,iLogtail和Filebeat都能及时处理,无法测出采集能力。
采集与发送速率对比
由于模拟实时加入的方式,iLogtail和Filebeat都能及时消费,所以采取新建大文件的方式,对两者采集性能进行对比。
时间:14:19:38 ,将1000M数据文件error.log加入采集目录供iLogtail和Filebeat采集。
查看iLogtail发送的kafka中数据,发现14:19:44采集完成,耗时10s以内,平均采集及发送速率确实可以达到官方介绍的100M/s
查看Filebeat发送的kafka中数据,发现14:23:47采集完成,耗时约250s,平均采集及发送速率约4M/s
总结
性能对比项 | iLogtail | Filebeat | 结论 |
---|---|---|---|
物理内存占用率 | 1.10% | 1.10% | 两者相似 |
cpu占用率 | 3.30% | 26.20% | iLogtail明显占优 |
采集与发送速率 | 100M/s | 4M/s | iLogtail明显占优 |
官方对比数据
ilogtail/performance-compare-with-filebeat.md at main · alibaba/ilogtail · GitHub
性能分析
iLogtail采用轮询+事件的日志采集方式:
对于日志采集,大家很容易想到通过定期检测日志文件有无更新来进行日志采集,这种我们一般称之为轮询(polling)的方式。轮询是一种主动探测的收集方式,相对也存在被动监听的方式,我们一般称之为事件模式。事件模式依赖于操作系统的事件通知,在linux下2.6.13内核版本引入inotify, 而windows在xp中引入FindFirstChangeNotification,两者都支持以被动监听的方式获取日志文件的修改事件。
轮询和事件之间的区别,对比如下:
轮询 | 事件 | |
实现复杂度 | 低 | 高 |
跨平台 | 不依赖操作系统 | 不同操作系统单独实现 |
采集延迟 | 高 | 低 |
资源消耗 | 高 | 低 |
系统限制 | 基本无限制 | 依赖内核/驱动 |
资源限制 | 基本无限制 | 依赖系统 |
大规模场景 | 支持较差 | 支持 |
轮询相对事件的实现复杂度要低很多、原始支持跨平台而且对于系统限制性不高;但轮询的采集延迟(默认加上轮询间隔一半的采集延迟)以及资源消耗较高,而且在文件规模较大(十万级/百万级)时轮询一次的时间较长,采集延迟非常高。
filebeats采用基于轮询的方式,相对事件实现较为简单,而且对于大部分轻量级场景基本适用。但这种方式就会暴露以上对比中出现的采集延迟、资源消耗以及大规模环境支持的问题,部分对于这些条件要求较高的应用只能望而却步。
logtail为了同时兼顾采集效率以及支持各类特殊采集场景,logtail使用了轮询与事件并存的混合方式(目前只支持linux,windows下方案正在集成中)。一方面借力inotify的低延迟与低性能消耗,另一方面使用轮询兼容不支持事件的运行环境。