开源项目对比
Promtail | Loggie | Filebeat | Fluentd | Logstash | Flume | |
---|---|---|---|---|---|---|
开发语言 | Golang | Golang | Golang | Ruby | JRuby | Java |
多Pipeline | 不支持 | 支持 | 单队列 | 单队列 | 支持 | 支持 |
多输出源 | 不支持,仅一个Output | 支持 | 不支持,仅一个Output | 配置copy | 支持 | 支持 |
中转机 | 不支持 | 支持 | 不支持 | 支持 | 支持 | 支持 |
日志报警 | 支持 | 支持 | 不支持 | 不支持 | 不支持 | 不支持 |
Kubernetes容器日志采集 | 只支持容器stdout | 支持容器的stdout和容器内部日志文件 | 只支持容器stdout | 只支持容器stdout | 不支持 | 不支持 |
配置下发 | 手动配置 | Kubernetes下可通过CRD配置,主机场景配置中心陆续支持中 | 手动配置 | 手动配置 | 手动配置 | 手动配置 |
监控 | 原生支持Prometheus metrics | 原生支持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;Promtail
v2.7.4,
测试目的:
Filebeat、Promtail和Loggie的性能对比
测试思路:
Filebeat和Loggie,均采集日志发送至Kafka,观察相应的资源占用和发送吞吐量 Promtail发送到loki
测试详情:
单文件自动生成5000000
行日志,每行内容如下所示:
[5/Mar/2023:11: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 | 文件大小 | 日志文件数 | 发送并发度 | CPU | MEM (rss) | 网卡发包速率 |
---|---|---|---|---|---|---|
Filebeat | 3.2G | 1 | 3 | 7.5~8.5c | 63.8MiB | 75.9MiB/s |
Filebeat | 3.2G | 1 | 8 | 10c | 65MiB | 70MiB/s |
Filebeat | 3.2G | 10 | 8 | 11c | 65MiB | 80MiB/s |
Loggie | 3.2G | 1 | 3 | 2.1c | 60MiB | 120MiB/s |
Loggie | 3.2G | 1 | 8 | 2.4c | 68.7MiB | 120MiB/s |
Loggie | 3.2G | 10 | 8 | 3.5c | 70MiB | 210MiB/s |
Promtail | 3.2G | 1 | - | 1.3c | 58MiB | 127MiB/s |
Promtail | 3.2G | 1 | - | 1.4c | 70.3MiB | 128MiB/s |
Promtail | 3.2G | 10 | - | 1.1c | 71MiB | 215MiB/s |
测试结论:
相同压测条件和场景下:
-
Promtail、Loggie消耗的CPU大概是 Filebeat的1/10,同时发送吞吐量为1.6~2.9倍。
-
Memory相当,均处于较低的水准。
-
Filebeat 的极限吞吐量存在瓶颈,80MB/s后很难提升,而Promtail、Loggie则可以达到200MiB/s以上。
「如果这篇文章对你有用,请随意打赏」
FEATURED TAGS
agent
apiserver
application
bandwidth-limit
cgo
cgroupfs
ci/cd
client-go
cloudnative
cncf
cni
community
container
container-network-interface
containerd
controller
coredns
crd
custom-controller
deployment
docker
docker-build
docker-image
drop
ebpf
ecology
egress
etcd
gitee
github
gitlab
golang
governance
hpa
http2
image
ingress
iptables
jobs
kata
kata-runtime
kernel
kind
kubelet
kubenetes
kubernetes
library
linux-os
logging
loki
metrics
monitor
namespace
network
network-troubleshooting
node
nodeport
pingmesh
pod
prestop
prometheus
proxyless
pvc
rollingupdate
schedule
scheduler
serverless
sidecar
sigtrem
systemd
throttling
timeout
tools
traceroute