一 前言
二 测试试验描述
-
实验1:恒定采集配置4,Filebeat & iLogtail 在原始日志产生速率 1M/s、2M/s、 3M/s 下的标准输出流采集性能对比。
-
实验2:恒定采集配置4,Filebeat & iLogtail 在原始日志产生速率 1M/s、2M/s、 3M/s 下的容器内文件采集性能对比。
-
实验3:恒定输入速率3M/s,Filebeat & iLogtail 在采集配置50、100、500、1000 份下的标准输出流采集性能对比。
-
实验4:恒定输入速率3M/s,Filebeat & iLogtail 在采集配置50、100、500、1000 份下的容器内文件采集性能对比。
-
实验5:iLogtail 在 5M/s、10M/s、10M/s、40M/s 下的标准输出流采集性能。
-
实验6:iLogtail 在 5M/s、10M/s、10M/s、40M/s 下的容器内文件采集性能。
三 试验环境
所有对比实验配置存储于[2], 感兴趣的同学可以自己动手进行整个对比测试实验, 以下部分分别描述了不同采集模式的具体配置,如果只关心采集对比结果,可以直接跳过此部分继续阅读。
1 环境
2 数据源
apiVersion: batch/v1kind: Jobmetadata:name: nginx-log-demo-0namespace: defaultspec:template:metadata:name: nginx-log-demo-0spec:restartPolicy: Nevercontainers:name: nginx-log-demo-0image: registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latestcommand: ["/bin/mock_log"]args: ["--log-type=nginx", "--path=/var/log/medlinker/access.log", "--total-count=1000000000", "--log-file-size=1000000000", "--log-file-count=2", "--logs-per-sec=1000"]volumeMounts:name: pathmountPath: /var/log/medlinkersubPath: nginx-log-demo-0resources:limits:memory: 200Mirequests:cpu: 10mmemory: 10Mivolumes:name: pathhostPath:path: /testlogtype: DirectoryOrCreatenodeSelector:: cn-beijing.192.168.0.140
3 Filebeat 标准输出流采集配置
: |-: 30sprocessors:add_kubernetes_metadata:host: ${NODE_NAME}matchers:logs_path:logs_path: "/var/log/containers/"drop_event:when:equals:: container:pretty: falsequeue:mem:events: 4096: 2048: 1smax_procs: 4:type: containerharvester_buffer_size: 524288paths:/var/log/containers/nginx-log-demo-0-*.log
4 Filebeat 容器文件采集配置
: |-: 30s:pretty: falsequeue:mem:events: 4096: 2048: 1smax_procs: 4:type: logharvester_buffer_size: 524288paths:/testlog/nginx-log-demo-0/*.logprocessors:drop_event:when:equals:: /testlog/nginx-log-demo-0/access.log
5 iLogtail 标准输出流采集配置
{"inputs":[{"detail":{"ExcludeLabel":{},"IncludeLabel":{"io.kubernetes.container.name":"nginx-log-demo-0"}},"type":"service_docker_stdout"}],"processors":[{"type":"processor_filter_regex","detail":{"Exclude":{"_namespace_":"default"}}}]}
6 iLogtail 容器文件采集配置
{"metrics":{"c0":{"advanced":{"k8s":{"IncludeLabel":{"io.kubernetes.container.name":"nginx-log-demo-0"}}},......"plugin":{"processors":[{"type":"processor_default"}],"flushers":[{"type":"flusher_statistics","detail":{"RateIntervalMs":1000000}}]},"local_storage":true,"log_begin_reg":".*","log_path":"/var/log/medlinker",......}}}
四 Filebeat与iLogtail对比测试
1 标准输出流采集性能对比
-
1M/s 输入日志3700条/s, -
2M/s 输入日志7400条/s,
-
3M/s 输入日志条11100条/s。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 容器内文件采集性能对比
-
1M/s 输入日志3700条/s, -
2M/s 输入日志7400条/s,
-
3M/s 输入日志条11100条/s。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 采集配置膨胀性能对比
标准输出流采集配置膨胀对比
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
容器内文件采集配置膨胀对比
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 iLogtail 采集性能测试
-
输入源数量:10 -
单条日志大小283B
-
5M/s 对应日志速率 18526条/s,单输入源产生速率1852条/s -
10M/s 对应日志速率 37052条/s,单输入源产生速率3705条/s
-
20M/s 对应日志速率 74104条/s,单输入源产生速率7410条/s -
40M/s 对应日志速率 148208条/s,单输入源产生速率14820条/s
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5 对比总结
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
五 为什么Filebeat 容器标准输出与文件采集差异巨大?
六 iLogtail DaemonSet 场景优化
-
采集路径不在依赖于静态配置路径,可以靠容器标签动态选择采集源,从而简化用户接入成本。
-
可以根据容器元信息探测容器自动挂载节点的动态路径,所以iLogtail 无需挂载即可采集容器内文件,而如Filebeat 等采集器需要将容器内路径挂载于宿主机路径,再进行静态文件采集。
-
对于新接入采集配置复用历史容器列表,快速接入采集,而对于空采集配置,由于容器发现全局共享机制的存在,也就避免了存在空轮训监听路径机制的情况,进而保证了在容器这样动态性极高的环境中,iLogtail 可运维性的成本达到可控态。
七 结语
参考文献
-
Logtail技术分享一
https://zhuanlan.zhihu.com/p/29303600
-
Logtail技术分享二
https://www.sohu.com/a/205324880_465959
-
Filebeat 配置
https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-container.html
-
Filebeat 容器化部署
https://www.elastic.co/guide/en/beats/filebeat/current/running-on-kubernetes.html
-
iLogtail 使用指南
https://github.com/alibaba/ilogtail/blob/main/docs/zh/setup/README.md
注意:本文归作者所有,未经作者允许,不得转载
