一 前言
二 测试试验描述
-  
       
实验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-0  namespace: defaultspec:  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:        : cn-beijing.192.168.0.140
    
    
       
    
    
      
     
     
       
    
    
        
     3 Filebeat 标准输出流采集配置
    
    
      
     
     
       
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
     
     
       
     
     
         : |-    : 30s    processors:       add_kubernetes_metadata:          host: ${NODE_NAME}          matchers:           logs_path:              logs_path: "/var/log/containers/"       drop_event:          when:            equals:              : container    :      pretty: false    queue:      mem:        events: 4096        : 2048        : 1s    max_procs: 4    :     type: container      harvester_buffer_size: 524288      paths:         /var/log/containers/nginx-log-demo-0-*.log
    
    
       
    
    
      
     
     
       
    
    
        
     4 Filebeat 容器文件采集配置
    
    
      
     
     
       
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
      
      
        
     
     
       
     
     
         : |-    : 30s    :      pretty: false    queue:      mem:        events: 4096        : 2048        : 1s    max_procs: 4
    :     type: log      harvester_buffer_size: 524288      paths:         /testlog/nginx-log-demo-0/*.log      processors:         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 使用指南