https://zhuanlan.zhihu.com/p/129375187
 

以前在不少场合浅度使用过 Fluentd,将日志汇聚到一个地方。它给我的大体印象是

简单且能解决问题

直到最近遇到一个业务量稍大、逻辑较复杂的场景,Fluentd 的优点和缺点明显地展现了出来。

优点

它的日志采集方式非常丰富,有 tail、http、命令等等。方便地将日志采集起来。特别是 tail,考虑到了文件名包含日期的日志,日志的轮转等方面,让人觉得十分放心。

Fluentd 中 tag,label 两个概念使得可以实现灵活的处理逻辑。比如通过 rewrite_tag_filter 插件实现根据数据内容修改此数据的 tag,这条数据后续进入对应 tag 的处理逻辑,相当于路由功能;通过第三方插件 record_splitter 可用于拆分包含批量操作的日志;通过 copy 与 relabel 插件可将一条数据复制到两条流水线上。

作为一个日志传输工具,Fluentd 考虑到了传输过程中的很多问题,比如接收方跟不上时的可以设置缓存,接收方不可达时的可设置候选接收方(secondary),可设置多个接收方。

Fluentd 有丰富的插件,基本上想要的功能都有插件实现。因为插件都是 Ruby 脚本,编写的门槛很低,所以即使没有现成插件很多人也敢自己编写。

缺点

首先是性能。Fluentd 的宣传里有高性能这一项,可能相对于 logstash 的确好很多,但还是不太够。在实际使用中,解析 -> 转换 -> 入库 整个过程性能并不理想。比如实现上面提及的 rewrite_tagsplitcopy 然后写入数据库,单进程每秒 2000 条日志,CPU 100%,内存占用 2-3GB。而且受限于 Ruby 的 GIL,它并不能真正多线程。多进程也受限于插件是否支持。

总之,Fluentd 的性能既因为 Ruby 消耗过多计算和内存资源,又因为 Ruby 难以受益与多核。对数据吞吐量大的业务来说它是很昂贵的。灵活和性能并不完全冲突,比如 Nginx 足够灵活,性能也足够强。

除了性能,Fluentd 的插件质量也不够好,第三方插件大多是使用者根据自己业务需要编写,只为实现特定需求,没有足够的泛化,也没有足够的测试和性能评估。不少常用的插件也以额外安装的方式添加,带来不必要的麻烦。

另外就是配置文件,一个 filter 里只能做一个转换,比如:

<filter a.tag>
@type parse
...
</filter>
<filter a.tag>
@type transform_record
...
</filter>

总觉得没有下面这样来的干脆

<filter a.tag>
<item>
@type parse
...
</item>
<item>
@type stransform_record
...
</item>
</filter>

最后

我觉得 Fluentd 在数据量不大的场景下还是很不错的,省心省事。

如果转换逻辑简单数据量很大,那可以考虑 Fluentd 的小伙伴 Fluent Bit,性能更高,占用资源少很多,但插件少一点。

如果转换逻辑较复杂,数据量很大,可以在采集端使用 Fluentd/Fluent Bit,数据汇聚处自己写程序。

[转帖]Fluentd 的优缺点的更多相关文章

  1. [转帖]LCD与LED的区别之背光原理与优缺点对比介绍

    LCD与LED的区别之背光原理与优缺点对比介绍 http://m.elecfans.com/article/620376.html 时下液晶面板与液晶电视技术已经达到炉火纯青的境界,并已经成为大屏幕平 ...

  2. [转帖]KMS 是什么 以及 优缺点

    产品激活 比如Windows激活 , office激活 等激活的原理是什么? KMS等激活工具安全吗? http://www.cnblogs.com/flowerslip/p/8370832.html ...

  3. 【转载】IE6 PNG透明终极解决方案(打造W3Cfuns-IE6PNG最强帖)

    原文地址:http://www.w3cfuns.com/thread-297-1-1.html 本文版权归W3Cfuns.com所有,转载需在文章页面明显位置以链接的方式给出原文链接,否则W3Cfun ...

  4. [转帖]批处理-For详解

    批处理-For详解 https://www.cnblogs.com/DswCnblog/p/5435300.html for 循环的写法 感觉非常好. 今天下午的时候简单测试了下. 多学习提高 非常重 ...

  5. DDD CQRS架构和传统架构的优缺点比较

    明天就是大年三十了,今天在家有空,想集中整理一下CQRS架构的特点以及相比传统架构的优缺点分析.先提前祝大家猴年新春快乐.万事如意.身体健康! 最近几年,在DDD的领域,我们经常会看到CQRS架构的概 ...

  6. [NodeJS] 优缺点及适用场景讨论

    概述: NodeJS宣称其目标是“旨在提供一种简单的构建可伸缩网络程序的方法”,那么它的出现是为了解决什么问题呢,它有什么优缺点以及它适用于什么场景呢? 本文就个人使用经验对这些问题进行探讨. 一. ...

  7. emmet,jade,haml, slim,less,sass,coffeescript等的实战优缺点

    摘要: 文章背景,来自于群内周五晚上的一次头脑风暴式的思维碰撞交流活动. 随着前端技术的蓬勃发展, 各种新技术随着生产力的需要不断的涌入我们的视野, 那今天探讨的话题是这些新时代的前端兵器谱: 一. ...

  8. kubernetes部署Fluentd+Elasticsearch+kibana 日志收集系统

    一.介绍 1. Fluentd 是一个开源收集事件和日志系统,用与各node节点日志数据的收集.处理等等.详细介绍移步-->官方地址:http://fluentd.org/ 2. Elastic ...

  9. sql server的优缺点

    sql server的优点众多,让其在数据库领域独占鳌头,成为最受欢迎的数据库系统,其优缺点也自然是喜爱者们所关注的,首先了解一下它的历史: sql server是一个关系型数据库管理系统,最初是由M ...

  10. 单页Web应用优缺点

    一.定义单页 Web 应用 (single-page application 简称为 SPA) 是一种特殊的 Web 应用.它将所有的活动局限于一个Web页面中,仅在该Web页面初始化时加载相应的HT ...

随机推荐

  1. Hystrix:Spring Cloud服务熔断与降级组件

    Hystrix:Spring Cloud服务熔断与降级组件 问题总结 熔断器? Spring Cloud Hystrix? Hystrix服务降级? 全局降级方法? 解耦降级逻辑? Hystrix服务 ...

  2. 使用Spring AI让你的Spring Boot应用快速拥有生成式AI能力

    之前分享了关于Spring新项目Spring AI的介绍视频.视频里演示了关于使用Spring AI将Open AI的能力整合到Spring应用中的操作,但有不少读者提到是否有博客形式的学习内容.所以 ...

  3. Flutter Getx 状态管理 --- (依赖管理) GetxController

    Flutter Getx 简单的状态管理(依赖管理) GetxController Getx 依赖管理简介 Get有一个简单而强大的依赖管理器,它允许你只用1行代码就能检索到与你的Bloc或Contr ...

  4. 干掉PPT!现场编码的职级晋升答辩你参加过么?

    摘要:研发讲究的是真本事,是骡子是马咱们还得代码上见真章. 最近这小半年的时间,凭借对各种API的巧妙应用,我从一个差点被淘汰的"前浪"变成了公司人人尊敬的技术委员会副主席,工作思 ...

  5. 4种Springboot RestTemplate 服务里发送HTTP请求用法

    摘要: RestTemplate与REST资源交互的方法涵盖了HTTP请求方法,包括get, post, put, delete. 本文分享自华为云社区<Springboot RestTempl ...

  6. DamiBus v0.51 发布

    DamiBus,专为本地多模块之间通讯解耦而设计(尤其是未知模块.隔离模块.领域模块).零依赖,特适合 DDD. 特点 结合 Bus 与 RPC 的概念,可作事件分发,可作接口调用,可作响应订阅. 支 ...

  7. Typora 一行显示多图

    图片下显示说明 ![](https://pic.cnblogs.com/avatar/80824/20200328151729.png) <center style="font-siz ...

  8. Mac 设置 JAVA_HOME

    Mac /System/Library/Frameworks/JavaVM.framework/Home/bin/java: No such file or directory 查找JAVA_HOME ...

  9. faker造数据

    faker是一个开源的python库,安装完成后只需要调用Facker库,就可以帮助我们创建需要的数据. pip install Faker demo from faker import Faker ...

  10. Maven 命令安装指定 jar 包到本地仓库

    Maven 命令安装指定jar包到本地仓库: mvn install:install-file -Dfile=D:\Java\maven-repository\com\huawei\convert-p ...