fluentd分布式日志管理系统
如何有效地收集和管理大量服务器的日志一直是企业很头疼的一个问题,部分企业应用shell脚本来管理,部分企业基于hadoop来开发自己的日志管理系统,第一种管理成本巨大,需要大量的人力来维护脚本的正常运行,第二种研发成本高昂,那么如何才能降低这两方面的成本呢。
答案是fluentd。
Fluentd是一个免费,而且完全开源的日志管理工具,简化了日志的收集、处理、和存储,你可以不需要在维护编写特殊的日志处理脚本。Fluentd的性能已经在各领域得到了证明:目前最大的用户从5000+服务器收集日志,每天5TB的数据量,在高峰时间处理50,000条信息每秒。
1.1宗旨
由于现代网络和移动应用程序生成大量的事件日志(eg:登入、登出、购买、跟踪日志等等。)这些日志能极大的帮助提高用户行为分析。而且如何简单、可靠、可伸缩性的收集这些日志仍然是个巨大的挑战。
Fluent为解决这一问题提供了一个简单的解决方案,具有以下功能:
1.安装方便
2.占用空间小
3.半结构化数据日志记录
4.灵活的插件机制
5.可靠的缓冲
6.日志转发
1.2简便安装
Fluentd可以通过一个内置的Ruby解码器以rpm或者deb包安装,几乎没有系统依赖关系。Fluentd也可以作为Ruby gem,并且可以作为一个命令安装
建议使用gem安装
1.3轻巧的结构
由于其简单的结构,Fluentd的核心只包含3000行Ruby。Fluentd收集各种输入源的事件并将它们写入输出接收器。
eg:
输入源:HTTP, Syslog, Apache Log
输出源:Files, Mail, RDBMS databases, NoSQL storages
1.4半结构化数据日志记录
一个收集事件日志包含三个组件:标签(tag),时间(time)和记录(record)。标签由一个字符串’.’隔开(如myapp.access)用于将事件分类。时间记录的是事件发生时UNIX的时间。包含事件信息的记录是一个JSON对象。
1.5灵活的插件机制
Fluentd的输入源和输出目的地可以通过编写适当的Ruby扩展插件。
插件可以通过Ruby gems出版;以下命令显示了可用插件列表::
$ gem search -rd fluent-plugin
1.6 可靠的缓冲
在传统的系统中,事件日志可能会由于出现意外输出情况造成丢失导致写失败发生(例如网络故障)。Fluentd为了解决这个问题,配备了一个可靠的缓冲策略。
Fluentd的缓冲块包含事件日志的队列,暂时存储收集事件:
当Fluentd从输入源接收到一个事件时,事件日志会附加到顶级块缓冲区。这个临时存储操作永远不会阻塞,即使下一个服务挂机。当顶级数据块的大小达到极限或计时器到期时,一个新的空数据块会被推入队列的顶部。一个单独的线程会将数据块从底部写入下一个服务器或存储服务器。如果这个写操作成功,这个数据块会从队列中移除。否则,数据块将在线程队列中等待,稍后再次尝试写操作。Fluentd缓冲区的实现是可插拔的。默认插件,设置‘Memory’,存储块在内存中。这种方式很快速但不持久。另一个插件,设置 ‘File’,将块存储在文件中。
1.7日志转发
Fluentd支持单节点和多节点配置。多节点配置通常用于事件日志转发到一个中心服务器进行分析。
应用程序服务器通过Fluentd节点转发本地日志至中心服务器的Fluentd节点: