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进行功能扩充
相关推荐
1. 性能优化:新版本通常会针对性能进行优化,提高数据处理速度和资源利用率。 2. 新增或更新插件:可能会有新的输入、过滤或输出插件,以支持更多的数据源和目标,或者增强现有插件的功能。 3. 错误修复:修复了...
主要内容涵盖单选题和操作题两大部分。单选题涉及openGauss数据库的基本概念、数据模型、SQL语法、事务管理和用户权限等方面的知识点。操作题则围绕一个名为bookdb的图书购买信息数据库展开,具体任务包括插入图书信息、更新顾客信息、删除购买记录、查询特定图书信息以及创建视图、存储过程和触发器等实际操作。每道题目均附带详细的解题步骤和最终答案。
新建 Microsoft Word 文档 (9).docx
Delphi 12.3控件之nrCommLib Pro v9.54 Full Source for D10.3-D12.7z
内容概要:本文详细介绍了使用三菱PLC FX5U控制四轴伺服系统的全过程,涵盖硬件配置、电气接线、参数设置以及运动控制逻辑。硬件方面,选用三菱FX5U-64MT作为主控制器,搭配四个MR-JE-20A伺服驱动器和其他必要组件。软件部分则深入探讨了轴参数初始化、原点回归、多轴联动、HMI界面设计及报警处理等关键技术环节。特别针对旋转轴的特殊处理进行了详细说明,如双速原点回归、绝对定位指令的应用等。此外,还提供了调试经验和优化技巧,确保系统的高精度和平稳运行。 适合人群:从事自动化控制系统设计、调试的技术人员,尤其是对三菱PLC和伺服系统有一定了解的研发人员。 使用场景及目标:适用于工业自动化领域的四轴伺服控制系统开发,旨在帮助工程师掌握从硬件选型到软件编程的一整套解决方案,提高项目的成功率和技术水平。 其他说明:文中附有多份参考资料,包括完整的程序文件、界面工程、CAD接线图和伺服参数清单,便于读者进行实际操作和验证。
分阶段学习:先掌握基础,再深入细分领域。 理论与实践结合:学完算法后立刻用代码实现。 保持持续学习:AI技术迭代快,需跟踪最新进展。
电子硬件课程设计
Java项目基于ssm框架的课程设计,包含LW+ppt
脚本-压测相关-zyx编写
Java项目基于ssm框架的课程设计,包含LW+ppt
app.mobileconfig
内容概要:本文详细介绍了使用MotorCAD进行2极12槽永磁直流有刷电机的设计与优化方法。首先,通过Python脚本设置电机的基本参数,如外径、轴向长度、额定转速等。接着,深入探讨了磁钢选型、绕组设置、电磁仿真、热分析等多个关键技术环节。针对常见的设计难题,如齿槽转矩、磁钢充磁方向、绕组跨距等提供了具体的解决方案。同时,还分享了一些提高仿真精度和优化性能的实用技巧,如参数扫描、FEA计算、热管理等。最后,通过实测数据分析验证了设计方案的有效性。 适合人群:电机设计工程师、高校相关专业师生、对电机设计感兴趣的开发者。 使用场景及目标:适用于需要精确设计和优化小型永磁直流有刷电机的场合,帮助用户掌握MotorCAD的具体应用,提高设计效率和产品质量。 其他说明:文中提供的Python和VB脚本示例有助于自动化参数设置和批量处理任务,减少重复劳动。此外,还强调了在设计过程中需要注意的关键技术和常见陷阱,确保设计方案的可行性和可靠性。
内容概要:本文详细介绍了三相逆变器在MATLAB/Simulink环境下的PI闭环控制及解耦控制的实现方法。首先,通过坐标变换将三相电流从静止坐标系转换到旋转坐标系,确保功率守恒并实时更新转子位置角。接着,实现了带有抗饱和处理的PI控制器,防止积分风-up现象。然后,针对d轴和q轴之间的耦合问题,引入了解耦控制,通过低通滤波和交叉耦合项来稳定系统。此外,还讨论了PWM生成模块的死区时间和仿真结果的验证方法,强调了参数调试的重要性和具体策略。 适合人群:电力电子工程师、自动化控制领域的研究人员以及对三相逆变器控制感兴趣的高校师生。 使用场景及目标:适用于需要深入了解三相逆变器控制原理和技术实现的研究项目或工程应用。主要目标是掌握PI控制器的设计、解耦控制的应用及其在MATLAB/Simulink中的仿真实现。 其他说明:文中提供了详细的代码示例和调试技巧,帮助读者更好地理解和实践相关理论。同时提醒读者,仿真成功并不代表实际硬件运行无误,建议在实验过程中准备必要的保护措施。
58面经面试过程和题目.txt
OceanBase OBCP 实验指导手册V1.3
内容概要:本文详细介绍了ABB喷涂机器人IRC5P与PLC通过Profinet通讯进行程序号启动的具体步骤和注意事项。主要内容涵盖Profinet通讯的基本配置,包括设备名称、IP地址设置,RAPID代码编写,任务声明,信号映射,以及调试技巧。文中还分享了许多实际调试中的经验和常见错误,如大小写敏感、IP地址分配、程序号有效性和信号防抖处理等。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是负责机器人与PLC通讯配置的技术人员。 使用场景及目标:帮助技术人员正确配置ABB喷涂机器人IRC5P与PLC之间的Profinet通讯,确保程序号能够顺利启动,避免常见的配置错误和调试难题。 其他说明:文章强调了硬件和软件配置相结合的重要性,并提供了详细的代码示例和调试建议,有助于提高系统的稳定性和可靠性。
电子硬件课后习题题目及要求.docx
亲测开源好用的红盟云发卡源码对接支付宝等支持一件搭建,方便建立自己的发卡平台,源码全部开源无加密,可方便而开使用。 测试环境:php7.2+mysql+宝塔面板 安装教程: ①设置public运行目录 ②设置thinkphp伪静态 ③访问域名填写数据库信息根据提示安装
Delphi 12.3控件之MiTeC_System_Information_Component_Suite_15.1.0_Full_Source.7z
Delphi 12.3控件之StyleControls 5.80.7z