Beats模块定制开发与扩展

发布时间: 2024-01-11 10:48:02 阅读量: 29 订阅数: 38
# 1. 介绍Beats模块 ## 1.1 什么是Beats模块 Beats模块是一种轻量级数据采集器,用于从各种数据源收集数据并将其发送到Logstash或Elasticsearch等数据处理引擎中。它可以帮助用户快速、高效地收集、解析和发送数据,是Elastic Stack中非常重要的组件之一。 ## 1.2 Beats模块的功能和优势 Beats模块具有实时数据采集、轻量级部署、易扩展等特点,能够灵活适配多种数据源,并具备对数据进行轻量级过滤和处理的能力。此外,Beats模块还支持对数据进行加密传输,保障数据安全。 ## 1.3 Beats模块在IT领域中的应用 Beats模块在日志收集、系统监控、安全信息与事件管理(SIEM)等领域有着广泛的应用。它可以帮助企业快速构建数据采集系统,实现对各类数据的高效管理与分析,从而为业务发展提供可靠的数据支持。 # 2. Beats模块基础知识 ### 2.1 Beats模块的基本原理 Beats模块是一种日志数据收集和传输的工具,它的基本原理是将需要采集的日志数据发送到指定的目标地址。Beats模块通过使用各种输入插件来收集不同类型的数据,例如文件日志、系统日志、网络流量等,并通过输出插件将数据发送到指定的目标,如Kafka、Elasticsearch等。 Beats模块的采集过程分为三个阶段:输入、数据处理和输出。首先,在输入阶段,Beats模块通过各种输入插件从不同的源中采集日志数据。然后,在数据处理阶段,Beats模块对采集到的数据进行处理,例如过滤、解析等操作。最后,在输出阶段,Beats模块使用输出插件将处理完成的数据发送到指定的目标地址。 ### 2.2 Beats模块的架构和组成 Beats模块由以下几个核心组件组成: - **Harvester**:负责从指定的目标源读取数据,并将数据发送给Spooler进行处理。 - **Spooler**:将采集到的数据交给Prospector进行解析和过滤,并将处理后的数据发送给注册的输出插件。 - **Prospector**:负责解析和过滤采集到的数据,并将处理后的数据发送给注册的输出插件。 - **Output**:负责处理和发送数据到指定的目标地址,如Kafka、Elasticsearch等。 - **Input**:负责从不同的源中采集数据,如文件系统、网络流量、系统日志等。 - **Registry**:负责存储和维护Beats模块的元数据,确保采集到的数据不会重复发送。 ### 2.3 Beats模块的常见用例 Beats模块可以广泛应用于各种场景,以下是一些常见的用例: - **日志采集**:Beats模块可以方便地采集各种类型的日志数据,并将其发送到集中式的日志存储系统,如Elasticsearch、Logstash等,以便进行后续的分析和查询。 - **监控指标采集**:Beats模块可以采集各种系统和应用的监控指标数据,如CPU利用率、内存使用情况、网络流量等,并将其发送到指定的目标进行监控和分析。 - **安全审计日志采集**:Beats模块可以采集系统和应用的安全审计日志数据,并将其发送到安全信息与事件管理系统(SIEM)进行分析和报警。 - **云服务监控**:Beats模块可以与云服务平台进行集成,采集云主机的监控指标和日志数据,以便进行性能分析和故障排查。 以上是关于Beats模块基础知识的介绍,下一章将详细介绍Beats模块的定制开发。 # 3. Beats模块定制开发 Beats模块定制开发是指根据特定的需求,对Beats模块进行个性化定制和开发,以满足用户特定的监控和数据采集需求。在本章节中,我们将深入探讨Beats模块定制开发的概念、定制开发环境的搭建以及如何定制开发一个新的Beats模块。 #### 3.1 Beats模块定制开发的概念 Beats模块定制开发是指基于Beats框架,根据具体业务需求开发和定制新的数据采集模块,以满足特定的数据采集和监控目的。通过定制开发,用户可以针对特定场景快速构建定制化的数据采集解决方案,提高监控效率和数据采集的精准度。 #### 3.2 定制开发环境的搭建 在进行Beats模块定制开发前,我们需要搭建相应的开发环境。首先,确保我们已经安装了Golang环境,并且设置好了相关的环境变量。接着,我们需要安装Beats模块的开发工具链,并创建一个新的定制开发项目目录。 ```bash # 安装Beats模块开发工具链 go get github.com/elastic/beats # 创建新的定制开发项目目录 mkdir my_custom_beats cd my_custom_beats ``` #### 3.3 如何定制开发一个新的Beats模块 在Beats模块定制开发中,通常需要遵循以下步骤: - **确定需求和功能**:首先需要明确定制开发的具体需求和功能,确定新模块的数据采集对象和采集方式。 - **创建新模块**:使用Beats模块提供的开发工具,创建新的模块,并定义数据采集的逻辑和处理流程。 - **配置管理**:编写配置文件,指定数据采集对象和数据输出目的地等相关配置。 - **编译和测试**:进行模块的编译和测试,确保数据采集功能符合预期,且可以与Elasticsearch等系统集成。 通过以上步骤,我们可以完成一个新的Beats模块的定制开发,从而满足特定的监控和数据采集需求。 在接下来的章节中,我们将深入探讨Beats模块定制开发的更多细节和最佳实践,以帮助大家更好地进行定制开发和应用实践。 # 4. Beats模块的扩展与集成 Beats模块具有良好的扩展性,可以根据需求进行定制开发和扩展。本章将介绍Beats模块的扩展方式及原理,并提供一些最佳实践,帮助读者与现有系统进行集成。 ### 4.1 Beats模块的扩展方式及原理介绍 Beats模块的扩展主要通过开发新的Beat插件来实现。Beat插件是一个独立的模块,用于收集特定类型的数据。Beats框架提供了一系列的API和工具,使得开发和集成新的Beat插件更加方便。 要开发一个新的Beat插件,首先需要创建一个新的插件目录,并在该目录下编写插件的逻辑代码。在插件的配置文件中,可以定义插件需要采集的特定数据源、数据格式以及发送到的目标等信息。 在插件的代码中,可以使用Beats提供的各种API来实现数据的采集和发送。例如,可以使用Filebeat API来监控和采集文件中的日志数据,使用Metricbeat API来收集系统和应用程序的性能指标数据等。 在开发完成后,可以将插件编译为可执行文件,并与其他组件进行集成。集成方式包括将插件部署在各个数据节点上,并与数据收集和处理系统进行协作,或者将插件作为独立的服务运行,通过API接口提供数据给其他系统使用。 ### 4.2 如何与已有系统集成Beats模块 与已有系统集成Beats模块的方式取决于具体的需求和系统架构。以下是一些常见的集成方式: #### 方式一:通过日志文件集成 可以将Beats模块配置为监控日志文件,并将采集到的日志数据发送给已有的日志分析系统。在已有系统中,需要进行一些配置和接口开发,使其能够接收和处理Beats模块发送的数据。 #### 方式二:通过网络协议集成 如果已有系统使用了特定的网络协议进行数据通信,可以开发一个新的Beat插件,使用该网络协议与已有系统进行通信,并将数据采集和发送集成到插件中。 #### 方式三:通过API接口集成 如果已有系统提供了API接口,可以开发一个新的Beat插件,通过API接口与已有系统进行数据交互。插件可以调用已有系统的接口来获取数据或将采集到的数据发送给已有系统。 ### 4.3 Beats模块的扩展开发最佳实践 在进行Beats模块的扩展开发时,以下是一些最佳实践的建议: - 设计清晰的数据采集和发送流程,遵循最小暴露原则,只采集和发送必要的数据。 - 使用合适的数据格式和协议,确保数据的可读性和可解析性。 - 对数据进行压缩和加密等安全处理,确保数据传输的安全性。 - 考虑性能和资源消耗,避免过度采集和发送数据,以及过多的网络请求和IO操作。 - 编写清晰的文档和使用示例,方便其他开发人员使用和集成你的插件。 通过以上的最佳实践,可以提高Beats模块的扩展性和集成性,满足更多复杂的需求。 本章介绍了Beats模块的扩展方式及原理,并提供了与已有系统集成的方法和最佳实践。下一章将详细介绍Beats模块定制开发的工程实践。 # 5. Beats模块定制开发的工程实践 在前面的章节中,我们已经了解了Beats模块的基础知识和定制开发的概念。本章将介绍Beats模块定制开发的工程实践,包括开发流程与方法论、团队协作下的实践以及实际案例分析。 ### 5.1 开发流程与方法论 Beats模块的定制开发是一个具有一定挑战性的工作,因此需要有一套清晰的开发流程与方法论来指导开发工作。 一般而言,Beats模块的定制开发流程可以分为以下几个主要阶段: 1. **需求定义与分析**:明确定制开发的具体需求,并进行分析和调研,确定可行性。 2. **设计与规划**:根据需求,进行系统设计和模块规划,包括功能设计、架构设计、接口设计等。 3. **编码与调试**:基于设计和规划,进行模块的具体编码,同时进行调试和测试,确保模块的稳定和可靠性。 4. **集成与验收**:将定制开发的模块与已有系统进行集成,进行相关的验收测试,确保模块能够正常工作。 5. **文档撰写与发布**:编写模块的相关文档,包括开发文档、用户文档等,并进行模块的正式发布。 在整个开发流程中,需要注意以下几点: - **代码质量**:严格遵守编码规范,编写高质量的代码,并进行充分测试和调试,提高模块的稳定性。 - **团队协作**:建立并遵守团队内部的协作机制,明确开发责任和沟通渠道,确保团队成员之间的有效合作。 - **版本控制**:使用版本控制工具(如Git),确保代码的版本管理和追踪,方便团队合作和项目管理。 ### 5.2 团队协作下的Beats模块定制开发实践 在团队协作的环境下,Beats模块的定制开发需要更加注重协作合作和团队管理。 以下是一些在团队协作中进行Beats模块定制开发的实践经验: - **明确开发角色**:根据具体的开发需求,明确开发团队成员的角色和职责,确保开发工作的高效进行。 - **建立沟通渠道**:建立团队内部的沟通渠道,包括会议、邮件、即时通讯工具等,方便团队成员之间的交流和沟通。 - **制定开发规范**:建立统一的开发规范,包括命名规范、代码风格规范等,确保代码的一致性和可读性。 - **定期会议与review**:定期召开会议,进行开发进展的review,及时解决问题和调整开发计划。 ### 5.3 实际案例分析:Beats模块定制开发的挑战与解决方案 在实际的Beats模块定制开发中,常常会遇到各种挑战和问题。以下是一个具体案例的分析: **案例:定制开发一个自定义的Logging模块** 假设我们需要为Beats模块开发一个自定义的Logging模块,用于将日志数据发送到指定的日志服务器上。但在开发过程中,我们遇到了以下几个问题: 1. **数据传输安全性问题**:由于涉及到敏感的日志数据,需要确保数据传输的安全性。 解决方案:可以采用TLS/SSL加密通信协议,对数据进行加密传输,确保数据的安全性。 ```python # 代码示例 import logging import ssl # 创建一个带有TLS安全传输的日志模块 logger = logging.getLogger('my_custom_logger') logger.setLevel(logging.INFO) # 创建TLS上下文 context = ssl.create_default_context() # 加载TLS证书 context.load_cert_chain(certfile='certificate.pem', keyfile='private_key.pem') # 设置日志处理器,使用TLS安全传输 handler = logging.handlers.SysLogHandler(address=('log_server_ip', 514)) handler.set_context(context) logger.addHandler(handler) # 发送日志数据 logger.info('This is a test log message') ``` 2. **高性能需求问题**:由于大量的日志数据需要传输,需要保证传输性能的高效性。 解决方案:可以使用异步传输的方式,将日志数据缓冲起来,批量进行传输,提高传输效率。 ```python # 代码示例 import logging import queue import threading # 创建异步传输的队列 log_queue = queue.Queue() # 创建消费者线程,用于异步传输日志数据 def consumer(): while True: log_data = log_queue.get() # 数据传输逻辑 # ... # 启动消费者线程 consumer_thread = threading.Thread(target=consumer) consumer_thread.daemon = True consumer_thread.start() # 发送日志数据的函数 def send_log_data(log_data): log_queue.put(log_data) # 发送日志数据 send_log_data('This is a test log message') ``` 通过以上实际案例分析,展示了Beats模块定制开发中遇到问题的解决方案,以及相关代码示例。 本章介绍了Beats模块定制开发的工程实践,包括开发流程与方法论、团队协作下的实践经验以及实际案例分析。通过这些实践,我们可以更好地应对Beats模块定制开发中的挑战,提高开发效率和质量。 在下一章节中,将探讨Beats模块定制开发的未来发展趋势。 # 6. 未来发展趋势 #### 6.1 Beats模块定制开发的未来发展趋势 Beats模块在IT领域中的应用范围越来越广泛,它的定制开发也将有着不可忽视的未来发展趋势。以下是一些可能的发展方向: 1. **模块生态系统的发展**:随着Beats模块的不断发展,可以预期模块生态系统将会更加丰富。开发者可以根据自己的需求选择并定制合适的模块,而不仅仅局限于官方提供的模块。 2. **新模块的涌现**:随着技术的不断进步,新的系统和组件不断涌现,这也为Beats模块的定制开发提供了更多的可能性。例如,随着云原生技术的兴起,可以预期会有更多基于Kubernetes、Docker等平台的Beats模块出现。 3. **深度集成其他开源工具和框架**:Beats模块作为一个开源项目,可以与其他开源工具和框架进行深度集成,进一步提升其功能和适用性。例如,可以与ELK(Elasticsearch、Logstash、Kibana)堆栈进行无缝集成,实现更强大的日志和监控解决方案。 #### 6.2 在新技术背景下Beats模块的发展方向 新技术的不断涌现也为Beats模块的发展带来了新的方向和机遇: 1. **支持更多数据源类型**:随着大数据时代的来临,数据源的种类也在不断增多。Beats模块可以在未来支持更多的数据源类型,如传感器数据、社交媒体数据等,以满足不同行业的需求。 2. **机器学习和人工智能的应用**:随着机器学习和人工智能的快速发展,Beats模块可以通过与这些技术的结合,实现更加智能化的数据分析和处理。例如,可以通过模型训练和数据挖掘,实现自动化的异常检测和数据预测。 3. **更加友好的可视化界面**:用户界面的友好度对于开源项目的普及和应用至关重要。未来,Beats模块可以进一步改进其可视化界面,提供更加直观、易用的操作和展示方式,降低用户的使用门槛。 #### 6.3 如何更好地利用Beats模块进行定制开发 在利用Beats模块进行定制开发时,可以遵循以下一些最佳实践: 1. **深入理解需求**:在开始定制开发之前,需要充分理解项目或系统的需求,明确定制开发的目标和范围,以避免不必要的开发工作。 2. **合理规划模块架构**:在定制开发过程中,要合理规划模块的架构和组件,划分清楚各个模块之间的功能和交互方式,以提高代码的可维护性和扩展性。 3. **遵循开发规范**:Beats模块的开发应该遵循一定的开发规范,包括代码风格、命名规范、注释规范等。这有助于团队合作和代码维护。 4. **进行充分的测试**:定制开发完成后,应进行充分的测试,包括单元测试、集成测试等,以确保模块的正确性和稳定性。 5. **积极参与社区**:Beats模块作为一个开源项目,有一个活跃的社区。参与社区的讨论和交流,可以获得更多的指导和帮助,提升自己的技术水平。 希望以上内容对读者理解Beats模块定制开发的未来发展趋势有所帮助,并能够在实际项目中更好地利用Beats模块进行定制开发。
corwn 最低0.47元/天 解锁专栏
买1年送3个月
点击查看下一篇
profit 百万级 高质量VIP文章无限畅学
profit 千万级 优质资源任意下载
profit C知道 免费提问 ( 生成式Al产品 )

相关推荐

勃斯李

大数据技术专家
超过10年工作经验的资深技术专家,曾在一家知名企业担任大数据解决方案高级工程师,负责大数据平台的架构设计和开发工作。后又转战入互联网公司,担任大数据团队的技术负责人,负责整个大数据平台的架构设计、技术选型和团队管理工作。拥有丰富的大数据技术实战经验,在Hadoop、Spark、Flink等大数据技术框架颇有造诣。
专栏简介
这个专栏名为"ELK7.x通用教程(elasticsearch集群 logstash kibana beats)",旨在提供关于ELK技术栈的全面指导。在专栏中,我们将介绍ELK技术栈的基本概念和原理,帮助读者熟悉日志管理的基本知识。我们还会详细说明如何搭建ELK7.x环境,包括Elasticsearch集群的简介和搭建方法。此外,我们会介绍Elasticsearch索引的管理,包括映射、分片和副本等关键概念。我们将深入探讨Logstash的基本用法和日志收集配置,并介绍Logstash插件的开发和常用插件的用法。此外,我们还会介绍Kibana的基础功能和高级功能,包括可视化和仪表盘的创建,以及搜索、过滤和聚合的方法。另外,我们会详细介绍Beats的使用,包括Filebeat的配置和日志收集。我们还会介绍Beats的进阶用法,如Metricbeat、Packetbeat、Heartbeat等的应用。此外,我们还会探讨ELK7.x下的数据管道概念和实践,以及Logstash与Elasticsearch的深度集成并实践;我们将介绍Elasticsearch集群的监控和性能调优,以及Logstash插件的开发实战。此外,我们还会分享Kibana Dashboard面板设计的最佳实践,并介绍Kibana高级可视化的方法,如Time Series、Metric、Tag Cloud等。我们还会讲解Beats模块的定制开发和扩展,以及ELK7.x下的安全策略实施和权限管理。最后,我们会介绍Elasticsearch的数据备份和恢复,以及Logstash的高级应用,例如复杂日志处理和转换。这个专栏将帮助读者全面了解ELK技术栈的各个组件,并实践其在日志管理中的应用。
最低0.47元/天 解锁专栏
买1年送3个月
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
C知道 免费提问 ( 生成式Al产品 )

最新推荐

【R语言Capet包集成挑战】:解决数据包兼容性问题与优化集成流程

![【R语言Capet包集成挑战】:解决数据包兼容性问题与优化集成流程](https://www.statworx.com/wp-content/uploads/2019/02/Blog_R-script-in-docker_docker-build-1024x532.png) # 1. R语言Capet包集成概述 随着数据分析需求的日益增长,R语言作为数据分析领域的重要工具,不断地演化和扩展其生态系统。Capet包作为R语言的一个新兴扩展,极大地增强了R在数据处理和分析方面的能力。本章将对Capet包的基本概念、功能特点以及它在R语言集成中的作用进行概述,帮助读者初步理解Capet包及其在

【多层关联规则挖掘】:arules包的高级主题与策略指南

![【多层关联规则挖掘】:arules包的高级主题与策略指南](https://djinit-ai.github.io/images/Apriori-Algorithm-6.png) # 1. 多层关联规则挖掘的理论基础 关联规则挖掘是数据挖掘领域中的一项重要技术,它用于发现大量数据项之间有趣的关系或关联性。多层关联规则挖掘,在传统的单层关联规则基础上进行了扩展,允许在不同概念层级上发现关联规则,从而提供了更多维度的信息解释。本章将首先介绍关联规则挖掘的基本概念,包括支持度、置信度、提升度等关键术语,并进一步阐述多层关联规则挖掘的理论基础和其在数据挖掘中的作用。 ## 1.1 关联规则挖掘

时间数据统一:R语言lubridate包在格式化中的应用

![时间数据统一:R语言lubridate包在格式化中的应用](https://img-blog.csdnimg.cn/img_convert/c6e1fe895b7d3b19c900bf1e8d1e3db0.png) # 1. 时间数据处理的挑战与需求 在数据分析、数据挖掘、以及商业智能领域,时间数据处理是一个常见而复杂的任务。时间数据通常包含日期、时间、时区等多个维度,这使得准确、高效地处理时间数据显得尤为重要。当前,时间数据处理面临的主要挑战包括但不限于:不同时间格式的解析、时区的准确转换、时间序列的计算、以及时间数据的准确可视化展示。 为应对这些挑战,数据处理工作需要满足以下需求:

【R语言caret包多分类处理】:One-vs-Rest与One-vs-One策略的实施指南

![【R语言caret包多分类处理】:One-vs-Rest与One-vs-One策略的实施指南](https://media.geeksforgeeks.org/wp-content/uploads/20200702103829/classification1.png) # 1. R语言与caret包基础概述 R语言作为统计编程领域的重要工具,拥有强大的数据处理和可视化能力,特别适合于数据分析和机器学习任务。本章节首先介绍R语言的基本语法和特点,重点强调其在统计建模和数据挖掘方面的能力。 ## 1.1 R语言简介 R语言是一种解释型、交互式的高级统计分析语言。它的核心优势在于丰富的统计包

机器学习数据准备:R语言DWwR包的应用教程

![机器学习数据准备:R语言DWwR包的应用教程](https://statisticsglobe.com/wp-content/uploads/2021/10/Connect-to-Database-R-Programming-Language-TN-1024x576.png) # 1. 机器学习数据准备概述 在机器学习项目的生命周期中,数据准备阶段的重要性不言而喻。机器学习模型的性能在很大程度上取决于数据的质量与相关性。本章节将从数据准备的基础知识谈起,为读者揭示这一过程中的关键步骤和最佳实践。 ## 1.1 数据准备的重要性 数据准备是机器学习的第一步,也是至关重要的一步。在这一阶

dplyr包函数详解:R语言数据操作的利器与高级技术

![dplyr包函数详解:R语言数据操作的利器与高级技术](https://www.marsja.se/wp-content/uploads/2023/10/r_rename_column_dplyr_base.webp) # 1. dplyr包概述 在现代数据分析中,R语言的`dplyr`包已经成为处理和操作表格数据的首选工具。`dplyr`提供了简单而强大的语义化函数,这些函数不仅易于学习,而且执行速度快,非常适合于复杂的数据操作。通过`dplyr`,我们能够高效地执行筛选、排序、汇总、分组和变量变换等任务,使得数据分析流程变得更为清晰和高效。 在本章中,我们将概述`dplyr`包的基

R语言中的概率图模型:使用BayesTree包进行图模型构建(图模型构建入门)

![R语言中的概率图模型:使用BayesTree包进行图模型构建(图模型构建入门)](https://siepsi.com.co/wp-content/uploads/2022/10/t13-1024x576.jpg) # 1. 概率图模型基础与R语言入门 ## 1.1 R语言简介 R语言作为数据分析领域的重要工具,具备丰富的统计分析、图形表示功能。它是一种开源的、以数据操作、分析和展示为强项的编程语言,非常适合进行概率图模型的研究与应用。 ```r # 安装R语言基础包 install.packages("stats") ``` ## 1.2 概率图模型简介 概率图模型(Probabi

【R语言数据包mlr的深度学习入门】:构建神经网络模型的创新途径

![【R语言数据包mlr的深度学习入门】:构建神经网络模型的创新途径](https://media.geeksforgeeks.org/wp-content/uploads/20220603131009/Group42.jpg) # 1. R语言和mlr包的简介 ## 简述R语言 R语言是一种用于统计分析和图形表示的编程语言,广泛应用于数据分析、机器学习、数据挖掘等领域。由于其灵活性和强大的社区支持,R已经成为数据科学家和统计学家不可或缺的工具之一。 ## mlr包的引入 mlr是R语言中的一个高性能的机器学习包,它提供了一个统一的接口来使用各种机器学习算法。这极大地简化了模型的选择、训练

R语言文本挖掘实战:社交媒体数据分析

![R语言文本挖掘实战:社交媒体数据分析](https://opengraph.githubassets.com/9df97bb42bb05bcb9f0527d3ab968e398d1ec2e44bef6f586e37c336a250fe25/tidyverse/stringr) # 1. R语言与文本挖掘简介 在当今信息爆炸的时代,数据成为了企业和社会决策的关键。文本作为数据的一种形式,其背后隐藏的深层含义和模式需要通过文本挖掘技术来挖掘。R语言是一种用于统计分析、图形表示和报告的编程语言和软件环境,它在文本挖掘领域展现出了强大的功能和灵活性。文本挖掘,简而言之,是利用各种计算技术从大量的

R语言e1071包处理不平衡数据集:重采样与权重调整,优化模型训练

![R语言e1071包处理不平衡数据集:重采样与权重调整,优化模型训练](https://nwzimg.wezhan.cn/contents/sitefiles2052/10264816/images/40998315.png) # 1. 不平衡数据集的挑战和处理方法 在数据驱动的机器学习应用中,不平衡数据集是一个常见而具有挑战性的问题。不平衡数据指的是类别分布不均衡,一个或多个类别的样本数量远超过其他类别。这种不均衡往往会导致机器学习模型在预测时偏向于多数类,从而忽视少数类,造成性能下降。 为了应对这种挑战,研究人员开发了多种处理不平衡数据集的方法,如数据层面的重采样、在算法层面使用不同