一、常见agent 对比
功能项 | logstash | filebeats | fluentd | logtail(阿里) | loglistener(CLS) |
---|---|---|---|---|---|
日志读取 | 轮询 | 轮询 | 轮询 | 事件 | 事件 |
日志格式 | 支持delimiter、key-value、json等主流格式 | json、单行和多行 | 支持delimiter、key-value、json等主流格式 | 支持delimiter、key-value、json等主流格式 | 支持delimiter、key-value、json等主流格式 |
采集源 | 文件和TCP(Lumberjack和syslog) | 文件和TCP(syslog和n分隔符) | 文件和TCP(json) | 文件和TCP(Lumberjack和syslog) | 文件 |
发送压缩 | 插件支持 | 支持 | 插件支持 | 支持 | 支持 |
热升级 | 不支持 | 不支持 | 不支持 | 支持 | 不支持 |
实现语言 | JRuby(JVM) | go | CRuby和C | C/C | C/C |
多核支持 | 支持 | 支持 | 支持但受GIL限制 | 支持 | 不支持 |
支持平台 | Linux、windows和MAC | Linux、windows和MAC | Linux、windows和MAC | Linux和windows | Linux |
备注 | 可以作为采集agent和server,插件很多ali提供了直接写日志服务的插件 | 采集agent直接写ES或者支持输出Lumberjack 协议 | 支持写入到kafka、hdfs等 | 写入到aliyun日志服务, 或者接收Lumberjack协议的输入 | 写入到腾讯云CLS |
注:beats系列(MetricBeat、PacketBeat、Winlogbeat、Auditbeat、Filebeat、Heartbeat等)
特点对比:
- Logstash支持所有主流日志类型,插件支持最丰富,可以灵活DIY,但性能较差,JVM容易导致内存使用量高。
- filebeats 很轻量单支持的特性优先,性能很好
- Fluentd支持所有主流日志类型,插件支持较多,性能表现较好。
- Logtail占用机器CPU/内存资源最少,性能吞吐量较好,针对常用日志场景支持全面,但缺少插件等机制,灵活性和可扩展性不如以上两个客户端。
二、协议格式
常用的协议格式有:
- syslog(RFC3164和RFC5424)
- Lumberjack 文本编码的格式按照kv顺序存储
- n 分隔
- json
- pb : 参考 https://cloud.tencent.com/document/product/614/16907
三、对比loglistener和logtail
监测指标: cpu 、内存、磁盘、网络消耗和 qps情况,监控方式3秒钟一个点求均值。
测试日志格式: nginx 日志 分隔符和单行全文
测试环境: CVM: 2cpu 4Gmem 200Mbps
四、对比结果
- 单行全文-10w/s qps
分析: cpu使用率logtail比loglistener低5%左右,但是内存比loglistener高了差不多一倍,网络消耗基本差不多,采集能力基本上都是10w/s没有积压。
2. 分隔符-10w/s qps
分析: 采集能理上loglistener是1.96w/s,logtail是4.93w/s都有积压,cpu logtail 高20%,单内存消耗是loglistener
的3.5倍,网络差不多是4倍。
3. 对比分析
测试项 | qps | cpu | 内存 | 网络 | |
---|---|---|---|---|---|
单行全文(10w/s) | loglistener | 10w/s | 30% | 40MB | 13MB |
logtail | 10w/s | 38% | 80MB | 13MB | |
分隔符(10w/s) | loglistener | 3.69w/s | 80% | 40MB | <5MB |
logtail | 4.93w/s | 100% | 145MB | 20MB |