开源项目对比

LoggieFilebeatFluentdLogstashFlume
开发语言GolangGolangRubyJRubyJava
多Pipeline支持单队列单队列支持支持
多输出源支持不支持,仅一个Output配置copy支持支持
中转机支持不支持支持支持支持
日志报警支持不支持不支持不支持不支持
Kubernetes容器日志采集支持容器的stdout和容器内部日志文件只支持容器stdout只支持容器stdout不支持不支持
配置下发Kubernetes下可通过CRD配置,主机场景配置中心陆续支持中手动配置手动配置手动配置手动配置
监控原生支持Prometheus metrics,同时可配置单独输出指标日志文件、发送metrics等方式API接口暴露,接入Prometheus需使用额外的exporter支持API和Prometheus metrics需使用额外的exporter需使用额外的exporter
资源占用一般较高较高

基准性能测试与对比

测试环境:

  • 物理机 48C,256G
  • Kafka 3 Broker,挂载SSD盘
  • Filebeat v7.8版本,无配置processor等处理;Loggie默认包含cost、retry、metric interceptor;

测试目的:

Filebeat和Loggie的性能对比

测试思路:

Filebeat和Loggie,均采集日志发送至Kafka,观察相应的资源占用和发送吞吐量

测试详情:

单文件自动生成5000000行日志,每行内容如下所示:

  1. [13/May/2021:10:20:29 +0800] 0.015 10.200.170.107 "GET /static/3tJHS3Ubrf.html?activity_channel_id=22=1_00000&fromMiniapp=1&miniapp_uuid=uEd93lG2eG8Qj5fRXuiJwNt4bmiylkmg HTTP/1.1" 200 138957 "110.183.45.54, 10.200.151.37" act.you.163.com "" "Mozilla/5.0 (Linux; Android 8.1.0; PADM00Build/O11019; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/67.0.3396.87 XWEB/568 MMWEBSDK/190102 Mobile Safari/537.36 MMWEBID/6881 MicroMessenger/7.0.3.1400(0x2700033B) Process/appbrand0 NetType/WIFI Language/zh_CN miniProgram" "" [127.0.0.1:8990] [0.014] [] [] immsg={"st":1553307293614,"sb":138963,"rc":200,"cf":{"sr":1},"if":"default","ut":14,"sv":"static","pd":"activity","qb":764}

配置Filebeat和Loggie采集日志,并发送至Kafka某个Topic,不使用客户端压缩,Kafka Topic配置Partition为3。

在保证Agent规格资源充足的情况下,修改采集的文件个数、发送客户端并发度(配置Filebeat worker和Loggie parallelism),观察各自的CPU、Memory和Pod网卡发送速率。

测试得到如下数据:

Agent文件大小日志文件数发送并发度CPUMEM (rss)网卡发包速率
Filebeat3.2G137.5~8.5c63.8MiB75.9MiB/s
Filebeat3.2G1810c65MiB70MiB/s
Filebeat3.2G10811c65MiB80MiB/s
Loggie3.2G132.1c60MiB120MiB/s
Loggie3.2G182.4c68.7MiB120MiB/s
Loggie3.2G1083.5c70MiB210MiB/s

测试结论:

相同压测条件和场景下:

  • Loggie和Filebeat消耗的CPU相比,大概仅为后者的¼,同时发送吞吐量为后者的1.6~2.6倍。

  • Memory相当,均处于较低的水准。

  • Filebeat的极限吞吐量存在瓶颈,80MB/s后很难提升,而Loggie则可以达到200MiB/s以上。