`

filebeat to elasticsearch针对于filebeat端性能优化--性能提升230%

阅读更多

1. filebeat介绍

filebeat最初是基于logstash-forwarder源码的日志数据shipper。Filebeat安装在服务器上作为代理来监视日志目录或特定的日志文件,要么将日志转发到Logstash进行解析,要么发送到Elasticsearch或Redis等组件进行索引

2. filebeat相比于logstash优缺点

filebeat的优点:

  1. logstash是基于JVM的,资源额外开销十分巨大。filebeat是基于Golang开发的,相当于资源消耗更小,更便捷的logstash
  2. filebeat是elastic.co公司开发的,官方对filebeat提供了最全面的支持。filebeat的性能非常好,部署简单,是一个非常理想的文件采集工具
  3. filebeat是基于elastic.co官方提供的libbeat库开发的,代码量不大,我们可以迅速的掌握filebeat,对其进行改造与优化

filebeat的缺点(目前就能想出来这么一个):

filebeat官方提供的功能比较单一,往往无法满足我们的需求(比如说允许写入Redis但不允许从Reids中读出来,若需要读则需要借助logstash这样笨重的组件。不允许写到Metaq一类的中间件做消息存储以缓解ES端的压力)

2. 问题的由来–为什么需要优化filebeat?

filebeat是性能非常出色的文件采集工具,绝大多数的业务日志可以很容易的在1秒内收集至elasticsearch内。但是,个别业务大日志量业务日志无法及时收集

我们做过这样的测试,filebeat运行至Kubernetes集群中,我为filebeat容器分配了“1核心”CPU,其按照官方默认配置写ES的速率低于1M/s

修改了足够多的配置与测试,我们最终优化其性能达到2.3M/s左右。但是这个性能依然无法满足我们部分业务的日质量需求。因而我们这边对filebeat进行源码层面的优化

3. 先来看看filebeat.yml配置文件的优化

方便起见,我直接贴图片了。当然,这些配置只能作为参考。不同的机器性能、网络带宽等适用的配置也不会相同

input端配置调优

image

output.elasticsearch端配置调优

image

4. filebeat源码层面优化

通过上端的配置优化,filebeat写es的性能有了质的提升,“1核心单位”CPU情况下写ES效率可达2.3M/s。毫无疑问,这个日志量可以满足绝大多数的业务。但是其仍然无法满足我们个别大日志量业务。

通过源码中加log,屏蔽了publish相关的源码,filebeat read to spool的效率高达25.3M/s(1核心单位CPU的容器环境下),由此得知filebeat的性能瓶颈在publish层面。也就是write to es的效率不尽如人意。

image

每当执行到p.Publish()时,程序会阻塞直至es端收集日志完毕filebeat.spool_size的日志后回馈给filebeat继续publish。由此写入完全跟不上读取的速率。官方说async目前在试验阶段,不建议使用。本人对async方式进行过测试,性能并没有什么显著的增长

我对此部分代码做了如下更改:

const MAX_PUBLISH_CNT int = 5

func (p *syncLogPublisher) Start() {
    // init connection pool
    for index := 0; index < MAX_PUBLISH_CNT; index++ {
        p.client[index] = p.pub.Connect()
    }

    p.wg.Add(MAX_PUBLISH_CNT)

    runtime.GOMAXPROCS(MAX_PUBLISH_CNT)

    for index := 0; index < MAX_PUBLISH_CNT; index++ {
        go func(index int) {
            defer p.wg.Done()

            logp.Info("Start sending events to output")
            defer logp.Debug("publisher", "Shutting down sync publisher")

            // logp.Info("index: %d", index)
            for {
                err := p.Publish(index)
                if err != nil {
                    return
                }
            }
        } (index)
    }
}

由于golang的便捷性以及filebeat本身出色的设计,保证了我此处的改动没有线程安全问题。效果的提升是显而易见的,性能在原先的基础上提升了100%,如下图所示:

image

为什么可以这么写?那么在此聊一聊filebeat的几个关键点:

  • 一次Publish,上传多少行的日志量?这个这个值在filebeat.spool_size中定义
  • Publish中做了什么?启动worker个协程推送filebeat.spool_size行日志到ES中,阻塞,等待所有协程推送完毕后继续执行。因此,上部分代码不会影响此处
  • offset问题,offset会不会导致不同publish线程发送重复数据?Harvester组件对offset进行修改(读日志组件,在Publish)之前,因此offset不会影响日志publish重复问题

image

5. 进一步可优化项

  • filebeat.template-es2x.json
  • filebeat.template.json

减少filebeat为日志添加的不必要的字段。性能预估可再度提升50%。这样足够满足了我们公司的所有业务的日志读取问题(6.5M/s/POD的日质拉取速率)

6. 展望:还能为filebeat做些什么?

随着越来越多的业务接入,ES毫无疑问会到达瓶颈,我们不能仅仅通过单一的水平扩容来解决es性能瓶颈问题。可以考虑Redis或Metaq这类组件作为中间件存储。可以良好的利用ES资源,避免流量高峰期ES陷入性能瓶颈。流量低峰时不必要的资源浪费问题。这些均可在源码层面对filebeat进行功能扩充

分享到:
评论

相关推荐

    filebeat+elasticSearch+kibana 学习体会

    就是学习这三个的一些心得体会,适合初学者,适合给他人讲解使用!

    filebeat-7.0.0-linux-x86_64.tar.gz elasticsearch配套使用的组件,可收集数据

    Filebeat是Elasticsearch生态体系中的一个重要组成部分,它是一款轻量级的日志收集工具,用于从日志文件中持续地摄取数据,并将其转发到指定的目的地,如Elasticsearch、Logstash或Kibana等。这个“filebeat-7.0.0-...

    使用FileBeat采集MQ日志到Elasticsearch时所需资料

    总的来说,通过FileBeat将MQ日志推送到Elasticsearch,我们可以实现日志的集中管理和智能分析,提升运维效率,保障系统的稳定运行。在这个过程中,理解FileBeat的配置、MQ日志的格式以及Elasticsearch的数据处理和...

    filebeat-6.1.1-linux-arm_64.zip

    6.1.1 版本的 Filebeat 提供了稳定性和性能的优化,以及一些新的特性,例如增强的过滤和转换能力。 在压缩包内,除了 ARM 架构的二进制文件 "filebeat" 外,还包含了一个 "filebeat-6.1.1-linux-x86_64" 文件,这是...

    filebeat-7.10.1-linux-x86_64.tar.gz

    Filebeat是 Elastic Stack 的一个重要组件,它是一款轻量级的日志收集工具,常用于日志转发,将数据从服务器发送到中央存储库,如Elasticsearch或Logstash。"filebeat-7.10.1-linux-x86_64.tar.gz" 是Filebeat的一个...

    filebeat-7.10.2-linux-x86_64.tar.gz

    在IT行业中,Filebeat通常被用来从服务器、应用程序或容器中收集日志数据,并将这些数据转发到中央日志管理系统,如Elasticsearch、Logstash或者Kibana,形成ELK(Elasticsearch、Logstash、Kibana)栈的一部分。...

    基于docker-compose构建filebeat + Logstash +Elasticsearch+ kibana日志系统

    基于docker-compose构建filebeat + Logstash +Elasticsearch+ kibana日志系统 对nginx日志进行正则切割字段。 https://www.jianshu.com/p/f7927591d530

    filebeat-6.3.0-windows-x86_64.zip

    Filebeat是 Elastic Stack 的一部分,它是轻量级的日志收集工具,用于从主机系统中摄取日志事件并转发到诸如 Logstash 或直接发送到 Elasticsearch 进行分析和存储。在给定的“filebeat-6.3.0-windows-x86_64.zip”...

    filebeat-6.2.4-linux-arm.tar.gz

    Filebeat是一款轻量级的日志收集工具,由 Elastic 公司开发,它被广泛用于日志管理和ELK(Elasticsearch、Logstash、Kibana)堆栈的数据输入阶段。版本号"6.2.4"表明这是Filebeat的一个旧版本,可能不包含最新特性,...

    最新版本filebeat-8.11.3-linux-x86-64.tar

    在实际应用中,结合Elasticsearch存储和分析日志数据,Kibana提供可视化界面,可以方便地查看和搜索日志,而Logstash则可以在Filebeat和Elasticsearch之间进行数据转换和过滤,增强日志处理能力。这种组合对于日志...

    filebeat-7.5.1-windows-x86_64.zip

    总的来说,Filebeat 是一款强大的日志管理工具,能够帮助 IT 专业人员有效地收集、转发和分析系统及应用日志,为故障排查、性能优化和安全监控提供有力支持。通过合理配置和利用其特性,可以实现高效、可靠的日志...

    filebeat-5.6.0-darwin-x86_64.tar_filebeat_

    **Filebeat**是 Elastic Stack(以前称为 ELK Stack,即 Elasticsearch、Logstash 和 Kibana)中的一个轻量级日志收集工具。它被设计为在资源有限的系统上高效运行,用于持续地从日志文件中提取数据,并将这些数据...

    filebeat-6.2.2-linux-x86_64.tar.gz下载

    Filebeat是 Elastic Stack 的一个...总的来说,Filebeat是ELK堆栈中负责日志采集的一环,它的6.2.2版本专为64位Linux系统设计,能有效地帮助IT管理员监控系统日志,提供数据洞察,对故障排查和性能优化起到关键作用。

    filebeat-7.12.1-linux-x86_64.tar.gz

    在IT领域,尤其是日志管理和分析中,`filebeat`是至关重要的工具,它是ELK(Elasticsearch, Logstash, Kibana)堆栈的一部分。`filebeat`由 Elastic 公司开发,主要用于收集和转发日志数据。这个压缩包文件`filebeat...

    filebeat-6.3.2-linux-x86_64.tar.gz

    为了开始使用Filebeat,你需要编辑 `config/filebeat.yml`,配置输入源(如日志文件路径)和输出目标(如Elasticsearch的地址),然后启动Filebeat: ```bash ./filebeat-6.3.2-linux-x86_64/filebeat -c filebeat-...

    filebeat-7.10.0-linux-x86_64.tar.gz

    5. **性能提升**:每个版本的Filebeat都会进行性能优化,7.10.0也不例外。这可能包括更快的事件处理速度、更低的内存占用以及更好的资源管理。 6. **安全性和合规性**:Filebeat支持SSL/TLS加密和身份验证,确保...

    ELK6.1.2,filebeat及es的常用head和ik插件

    在6.1.2版本中,Elasticsearch增强了性能和稳定性,支持更高效的数据处理和查询。 `elasticsearch-6.1.2.tar.gz` 文件是Elasticsearch 6.1.2的源代码包,解压后可以部署到服务器上运行。安装和配置时,需要注意内存...

    filebeat-7.8.0-windows-x86_64.zip

    Elasticsearch不仅用于存储Filebeat收集的日志数据,还可以进行实时搜索、分析和可视化,从而提升运维效率和决策支持。 总之,Filebeat是企业级日志管理和分析的首选工具,其高效、稳定和易用的特点使其在复杂IT...

    elasticsearch-7.9.1,EFK安装包

    elasticsearch-7.9.1-linux-x86_64.tar.gz elasticsearch-analysis-ik-7.9.1.zip filebeat-7.9.1-linux-x86_64.tar.gz kibana-7.9.1-linux-x86_64.tar.gz

    filebeat-7.8.0-linux-x86_64.tar.gz

    Filebeat是 Elastic Stack 的一个重要组件,它是一款轻量级的日志收集工具,广泛应用于日志...在日常运维中,你可以利用Filebeat收集的日志数据进行故障排查、性能分析,甚至构建自定义的监控报警系统,提升运维效率。

Global site tag (gtag.js) - Google Analytics