verilog并行记录一定要加fork吗?iLogtail与Filebeat性能对比
verilog并行记录一定要加fork吗?iLogtail与Filebeat性能对比apiVersion: batch/v1 kind: Job metadata: name: nginx-log-demo-0 namespace: default spec: template: metadata: name: nginx-log-demo-0 spec: restartPolicy: Never containers: - name: nginx-log-demo-0 image: registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest command: ["/bin/mock_log"] args: ["--log-type
简介:前段时间 iLogtail 阿里千万实例可观测采集器开源,其中介绍了iLogtail采集性能可以达到单核100MB/s,相比开源采集Agent有5-10倍性能优势。很多小伙伴好奇iLogtail具体的性能数据和资源消耗如何,本文将针对目前业界使用度较高且性能相对较优的Agent FileBeat进行对比,测试这两个Agent在不同压力场景下的表现如何。作者 | 少旋
来源 | 阿里技术公众号
一 前言
前段时间 iLogtail [1]阿里千万实例可观测采集器开源,其中介绍了iLogtail采集性能可以达到单核100MB/s,相比开源采集Agent有5-10倍性能优势。很多小伙伴好奇iLogtail具体的性能数据和资源消耗如何,本文将针对目前业界使用度较高且性能相对较优的Agent FileBeat进行对比,测试这两个Agent在不同压力场景下的表现如何。
二 测试试验描述
随着Kubernetes 普及,kubernetes 下的日志收集的需求也日益常态化,因此下文将分别进行容器标准输出流采集与容器内静态文件采集对比试验(使用静态文件采集的小伙伴可以参考容器内静态文件采集对比试验 iLogtail 纯静态文件采集会略优于试验2容器内文件静态采集),试验项具体如下:
- 实验1:恒定采集配置4,Filebeat & iLogtail 在原始日志产生速率 1M/s、2M/s、 3M/s 下的标准输出流采集性能对比。
- 实验2:恒定采集配置4,Filebeat & iLogtail 在原始日志产生速率 1M/s、2M/s、 3M/s 下的容器内文件采集性能对比。
而在真实的生产环境中,日志采集组件的可运维性也至关重要,为运维与后期升级便利,相比于Sidecar模式,K8s下采用Daemonset模式部署采集组件更加常见。但由于Daemonset 同时将整个集群的采集配置下发到各个采集节点的特性,单个采集节点正在工作的配置必定小于全量采集配置数目,因此我们还会进行以下2部分试验,验证采集配置的膨胀是否会影响采集器的工作效率:
- 实验3:恒定输入速率3M/s,Filebeat & iLogtail 在采集配置50、100、500、1000 份下的标准输出流采集性能对比。
- 实验4:恒定输入速率3M/s,Filebeat & iLogtail 在采集配置50、100、500、1000 份下的容器内文件采集性能对比。
最后会进行iLogtail 的大流量压测,具体如下:
- 实验5:iLogtail 在 5M/s、10M/s、10M/s、40M/s 下的标准输出流采集性能。
- 实验6:iLogtail 在 5M/s、10M/s、10M/s、40M/s 下的容器内文件采集性能。
三 试验环境
所有采集环境数据存储于[2], 感兴趣的同学可以自己动手进行整个对比测试实验, 以下部分分别描述了不同采集模式的具体配置,如果只关心采集对比结果,可以直接跳过此部分继续阅读。
1 环境
运行环境:阿里云ACK Pro 版本
节点配置:ecs.g6.xlarge (4 vCPU 16GB) 磁盘ESSD
底层容器:Containerd
iLogtail版本:1.0.28
FileBeat版本:v7.16.2
2 数据源
对于数据源,我们首先去除因正则解析或多行拼接能力带来的差异,仅仅以最基本的单行采集进行对比,数据产生源模拟产生nginx访问日志,单条日志大小为283B,以下配置描述了1000条/s 速率下的输入源:
apiVersion: batch/v1
kind: Job
metadata:
name: nginx-log-demo-0
namespace: default
spec:
template:
metadata:
name: nginx-log-demo-0
spec:
restartPolicy: Never
containers:
- name: nginx-log-demo-0
image: registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest
command: ["/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: path
mountPath: /var/log/medlinker
subPath: nginx-log-demo-0
resources:
limits:
memory: 200Mi
requests:
cpu: 10m
memory: 10Mi
volumes:
- name: path
hostPath:
path: /testlog
type: DirectoryOrCreate
nodeSelector:
kubernetes.io/hostname: cn-beijing.192.168.0.140
3 Filebeat 标准输出流采集配置
Filebeat 原生支持容器文件采集,通过add_kubernetes_metadata组件增加kubernetes 元信息,为避免输出组件导致的性能差异,通过drop_event插件丢弃数据,避免输出,filebeat测试配置如下(harvester_buffer_size 调整设置为512K,filebeat.registry.flush: 30s,queue.mem 参数适当扩大,增加吞吐):
filebeat.yml: |-
filebeat.registry.flush: 30s
processors:
- add_kubernetes_metadata:
host: ${NODE_NAME}
matchers:
- logs_path:
logs_path: "/var/log/containers/"
- drop_event:
when:
equals:
input.type: container
output.console:
pretty: false
queue:
mem:
events: 4096
flush.min_events: 2048
flush.timeout: 1s
max_procs: 4
filebeat.inputs:
- type: container
harvester_buffer_size: 524288
paths:
- /var/log/containers/nginx-log-demo-0-*.log
4 Filebeat 容器文件采集配置
Filebeat 原生不支持容器内文件采集,因此需要人工将日志打印路径挂载于宿主机HostPath,这里我们使用 subPath以及DirectoryOrCreate功能进行服务打印路径的分离 以下为模拟不同服务日志打印路径独立情况。
filebeat 使用基础日志读取功能读取/testlog路径下的日志,为避免输出组件导致的性能差异,通过drop_event插件丢弃数据,避免输出,测试配置如下(harvester_buffer_size 调整设置为512K,filebeat.registry.flush: 30s,queue.mem 参数适当扩大,增加吞吐):
filebeat.yml: |-
filebeat.registry.flush: 30s
output.console:
pretty: false
queue:
mem:
events: 4096
flush.min_events: 2048
flush.timeout: 1s
max_procs: 4
filebeat.inputs:
- type: log
harvester_buffer_size: 524288
paths:
- /testlog/nginx-log-demo-0/*.log
processors:
- drop_event:
when:
equals:
log.file.path: /testlog/nginx-log-demo-0/access.log
5 iLogtail 标准输出流采集配置
iLogtail 原生同样支持标准输出流采集,service_docker_stdout 组件已经会提取kubernetes 元信息,为避免输出组件导致的性能差异,通过processor_filter_regex,进行所有日志的过滤,测试配置如下:
{
"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 容器文件采集配置
iLogtail 原生支持容器内文件采集,但由于文件内采集元信息存在于tag标签,暂无过滤插件,为避免输出组件导致的性能差异,因此我们使用空输出插件进行输出,测试配置如下:
{
"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对比测试
Filebeat 与 iLogtail 的对比项主要包含以下内容:标准输出流采集性能、容器内文件采集性能、标准输出流多用户配置性能、容器内文件多用户配置性能以及大流量采集性能。
1 标准输出流采集性能对比
点击链接查看原文,关注公众号【阿里技术】获取更多福利!https://mp.weixin.qq.com/s/BGtjHZ9apS_jmLGj7RdBxA