1. filebeat介绍
filebeat最初是基于logstash-forwarder源码的日志数据shipper。Filebeat安装在服务器上作为代理来监视日志目录或特定的日志文件,要么将日志转发到Logstash进行解析,要么发送到Elasticsearch或Redis等组件进行索引
2. filebeat相比于logstash优缺点
filebeat的优点:
- logstash是基于JVM的,资源额外开销十分巨大。filebeat是基于Golang开发的,相当于资源消耗更小,更便捷的logstash
- filebeat是elastic.co公司开发的,官方对filebeat提供了最全面的支持。filebeat的性能非常好,部署简单,是一个非常理想的文件采集工具
- 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端配置调优
output.elasticsearch端配置调优
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的效率不尽如人意。
每当执行到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%,如下图所示:
为什么可以这么写?那么在此聊一聊filebeat的几个关键点:
- 一次Publish,上传多少行的日志量?这个这个值在filebeat.spool_size中定义
- Publish中做了什么?启动worker个协程推送filebeat.spool_size行日志到ES中,阻塞,等待所有协程推送完毕后继续执行。因此,上部分代码不会影响此处
- offset问题,offset会不会导致不同publish线程发送重复数据?Harvester组件对offset进行修改(读日志组件,在Publish)之前,因此offset不会影响日志publish重复问题
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生态体系中的一个重要组成部分,它是一款轻量级的日志收集工具,用于从日志文件中持续地摄取数据,并将其转发到指定的目的地,如Elasticsearch、Logstash或Kibana等。这个“filebeat-7.0.0-...
总的来说,通过FileBeat将MQ日志推送到Elasticsearch,我们可以实现日志的集中管理和智能分析,提升运维效率,保障系统的稳定运行。在这个过程中,理解FileBeat的配置、MQ日志的格式以及Elasticsearch的数据处理和...
在IT行业中,Filebeat通常被用来从服务器、应用程序或容器中收集日志数据,并将这些数据转发到中央日志管理系统,如Elasticsearch、Logstash或者Kibana,形成ELK(Elasticsearch、Logstash、Kibana)栈的一部分。...
Filebeat是 Elastic Stack 的一个重要组件,它是一款轻量级的日志收集工具,常用于日志转发,将数据从服务器发送到中央存储库,如Elasticsearch或Logstash。"filebeat-7.10.1-linux-x86_64.tar.gz" 是Filebeat的一个...
6.1.1 版本的 Filebeat 提供了稳定性和性能的优化,以及一些新的特性,例如增强的过滤和转换能力。 在压缩包内,除了 ARM 架构的二进制文件 "filebeat" 外,还包含了一个 "filebeat-6.1.1-linux-x86_64" 文件,这是...
Filebeat是 Elastic Stack 的一部分,它是轻量级的日志收集工具,用于从主机系统中摄取日志事件并转发到诸如 Logstash 或直接发送到 Elasticsearch 进行分析和存储。在给定的“filebeat-6.3.0-windows-x86_64.zip”...
基于docker-compose构建filebeat + Logstash +Elasticsearch+ kibana日志系统 对nginx日志进行正则切割字段。 https://www.jianshu.com/p/f7927591d530
在实际应用中,结合Elasticsearch存储和分析日志数据,Kibana提供可视化界面,可以方便地查看和搜索日志,而Logstash则可以在Filebeat和Elasticsearch之间进行数据转换和过滤,增强日志处理能力。这种组合对于日志...
Filebeat是一款轻量级的日志收集工具,由 Elastic 公司开发,它被广泛用于日志管理和ELK(Elasticsearch、Logstash、Kibana)堆栈的数据输入阶段。版本号"6.2.4"表明这是Filebeat的一个旧版本,可能不包含最新特性,...
总的来说,Filebeat 是一款强大的日志管理工具,能够帮助 IT 专业人员有效地收集、转发和分析系统及应用日志,为故障排查、性能优化和安全监控提供有力支持。通过合理配置和利用其特性,可以实现高效、可靠的日志...
**Filebeat**是 Elastic Stack(以前称为 ELK Stack,即 Elasticsearch、Logstash 和 Kibana)中的一个轻量级日志收集工具。它被设计为在资源有限的系统上高效运行,用于持续地从日志文件中提取数据,并将这些数据...
Filebeat是 Elastic Stack 的一个...总的来说,Filebeat是ELK堆栈中负责日志采集的一环,它的6.2.2版本专为64位Linux系统设计,能有效地帮助IT管理员监控系统日志,提供数据洞察,对故障排查和性能优化起到关键作用。
在IT领域,尤其是日志管理和分析中,`filebeat`是至关重要的工具,它是ELK(Elasticsearch, Logstash, Kibana)堆栈的一部分。`filebeat`由 Elastic 公司开发,主要用于收集和转发日志数据。这个压缩包文件`filebeat...
为了开始使用Filebeat,你需要编辑 `config/filebeat.yml`,配置输入源(如日志文件路径)和输出目标(如Elasticsearch的地址),然后启动Filebeat: ```bash ./filebeat-6.3.2-linux-x86_64/filebeat -c filebeat-...
5. **性能提升**:每个版本的Filebeat都会进行性能优化,7.10.0也不例外。这可能包括更快的事件处理速度、更低的内存占用以及更好的资源管理。 6. **安全性和合规性**:Filebeat支持SSL/TLS加密和身份验证,确保...
Elasticsearch不仅用于存储Filebeat收集的日志数据,还可以进行实时搜索、分析和可视化,从而提升运维效率和决策支持。 总之,Filebeat是企业级日志管理和分析的首选工具,其高效、稳定和易用的特点使其在复杂IT...
在6.1.2版本中,Elasticsearch增强了性能和稳定性,支持更高效的数据处理和查询。 `elasticsearch-6.1.2.tar.gz` 文件是Elasticsearch 6.1.2的源代码包,解压后可以部署到服务器上运行。安装和配置时,需要注意内存...
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是 Elastic Stack 的一个重要组件,它是一款轻量级的日志收集工具,广泛应用于日志...在日常运维中,你可以利用Filebeat收集的日志数据进行故障排查、性能分析,甚至构建自定义的监控报警系统,提升运维效率。