Fluentd是一个开源的数据收集器,专为处理数据流设计,有点像 syslogd(syslogd可以负责记录系统运作中,kernel或应用程式产生的各种讯息。这些讯息被写入到系统的纪录档中,让管理人员,进行故障排除、追踪尝试非法入侵的使用者) ,但是使用JSON作为数据格式。它采用了插件式的架构,具有高可扩展性高可用性,同时还实现了高可靠的信息转发。
据 分(Y)析(Y),Fluentd是由Fluent+d得来,d生动形象地标明了它是以一个守护进程的方式运行。官网上将其描述为data collector,在使用上,我们可以把各种不同来源的信息,首先发送给Fluentd,接着Fluentd根据配置通过不同的插件把信息转发到不同的 地方,比如文件、SaaS Platform、数据库,甚至可以转发到另一个Fluentd。
其采用Ruby编写,比较注重性能的地方采用C编写,Ruby的创始人松本老师这样评价Fluentd:
Fluentd proves you can achieve programmer happiness and performance at the same time. A great example of Ruby beyond the Web.
Heroku的联合创始人Adam Wiggins说的挺有道理:
Logs are streams, not files. I love that Fluentd puts this concept front-and-center, with a developer-friendly approach for distributed systems logging.
Fluentd的作用
官网给出的两张张图能让你很直观的了解Fluentd的作用。
使用Fluentd前,日志系统的状态:

使用Fluentd后,日志系统的状态:

Fluentd的功能
1)安装方便
2)占用空间小
3)半结构化数据日志记录
4)灵活的插件机制
5)可靠的缓冲
6)日志转发
Fluentd的部署和构架
Fluentd的部署和Flume非常相似:

——————————————————————————————–
Fluentd的架构设计和Flume如出一辙:

Fluentd的Input/Buffer/Output非常类似于Flume的Source/Channel/Sink。
Input
Input负责接收数据或者主动抓取数据。支持syslog,http,file tail等。
Buffer
Buffer负责数据获取的性能和可靠性,也有文件或内存等不同类型的Buffer可以配置。
Output
Output负责输出数据到目的地例如文件,AWS S3或者其它的Fluentd。
Fluentd的技术栈

Fluentd的结构
由于其简单的结构,Fluentd的核心只包含3000行Ruby。Fluentd收集各种输入源的事件并将它们写入输出接收器。 eg:输入源:HTTP, Syslog, Apache Log输出源:Files, Mail, RDBMS databases, NoSQL storages
下图显示了输入和输出的基本思想:

FLuentd 的扩展性非常好,客户可以自己定制(Ruby)Input/Buffer/Output。 Fluentd从各方面看都很像Flume,区别是使用Ruby开发,Footprint会小一些,但是也带来了跨平台的问题,并不能支持Windows 平台。另外采用JSON统一数据/日志格式是它的另一个特点。相对于Flumed,配置也相对简单一些。