近日,亚马逊在其官方博客发布了AWS与Fluentd结合起来进行数据收集,存储和处理的相关操作方法和案例,AWS和Fluentd的结合使数据处理更加快捷。
以下为译文:
数据存储便宜,但数据收集并不便宜
数据存储十分便宜。但Kiyoto所说的便宜不是指其硬件很便宜,而是指数据的存储操作以及人工成本非常便宜。感谢IaaS的应用,就像AWS,我们不需要再花费很多时间进行容量规划(或者更好的是,可以用自动可扩展的方式提供资源)或者担心我们的服务器发生故障。
相对便宜的存储意味着我们的想法不再数据存储量而束缚。仅需要少数工程师就可以在Amazon Simple Storage Service(S3)平台中完成运行一组数据,或者是Redshift instances或者是管理大量日志数据备份,备份他们日常的工作记录。分析海量的数据不再仅仅属于那些独享大全,精通技术的公司。
然而,数据收集仍然是一个重大挑战:数据不会奇迹般的存储在系统中或者进行自行整理。因此,许多(临时)脚本被用作解析加载数据。这些脚本易变,易错,而且几乎不可能延伸。
这些问题都是Fluentd尝试要解决的:可扩展,灵活的实时收集数据。Kiyoto在博文中也讲到Fluentd的基本结构,同时分享了一些AWS使用案例。
Fluentd:大容量数据流的开源数据采集器
Fluentd原本是写在Treasure Data中的一个开源数据采集器。在2011年10月开源,并在过去的2年半时间获得了稳步牵引:今天,我们有一个蓬勃发展的社区,在GitHub有50人的贡献者和超过2100人的追随者,与Slideshare公司和Nintendo共同部署数据生产。
输入和输出
在最高的等级,Fluentd包含输入和输出。输入是指定Fluentd如何以及何时摄取数据。
普遍输入是:
1.跟踪日志文件和解析每行数据(或者同时解析多行数据)
2.接收系统日志信息
3.接收HTTP请求以及解析信息内容
输入的两个关键特征:JSON和标记
1.Fluentd采取JSON为它的核心数据形式,每个输入的作用是将接通的输入数据转换为一系列的JSON“事件”。
2.每个输入都为其摄取的数据提供了一个标签。根据标签,Fluentd决定如何处理不同来源的数据(如下)。
当数据通过Fluentd输入 ,Fluentd标记每个事件(在2中有所解释)然后指定线路输出标记,例如本地文件系统,RDBMSs,NoSQL数据库以及AWS服务。
开放和插件架构
为什么Fluentd已经有很多输入以及输出。秘诀是开放和插件架构。Ruby最基本的常识就是用户可以在短时间内构建一个新的插件。毋庸置疑,许多Fluentd用户非常热衷于AWS,所以,我们已经在如下的AWS服务中安置插件:
1.Amazon Simple Storage Service(S3) (输出)
2.Amazon Redshift (输出)
3.Amazon Simple Queue Service (SQS) (输入和输出)
4.Amazon Kinesis (输出)
5.Amazon DynamodB (输出)
6.AWS CloudWatch (输入)
性能和可靠性
当我“坦白”Fluentd大部分内容在Ruby中编写的,客户非常担心Fluentd的性能。不用担心,Fluentd非常快速,在现代的服务器中,它可以在单核中的处理速度达到15000次/秒,如果在多核中运行Fluentd,你可以获得更好的输出。
Fluentd可以达到这样的速度是通过使用C语言底层类库编写软件性能关键的部分。例如Fluentd运用Cool.io(Masahiro Nakagawa,Fluentd主要维护者)进行事件循环,和Ruby中的MessagePack(Sadayuki Furuhash,Fluentd的原作者)来提供内部数据形式。
速度很好,日志收集必须非常可靠:数据流失导致了坏数据和糟糕的决定。Fluentd通过缓冲来确保可靠性。输出插件可以通过记忆卡或者是闪存卡配置缓存数据,所以当数据传输发生错误时,它不会丢失。缓冲逻辑高度可调,并且可以为客户定制各种容量以及延迟需求。
举例:Apache日志归档入S3
Fluentd的功能概述,让我们深入一个例子。下面将会展示怎样设置Fluentd来实现Apache网络服务器日志归档于S3。
第一步:运行Fluentd
在Ruby的gem界面打开Fluentd (gem install fluentd)。也可以从Treasure Data中找到相关的td-agent。现在,我们运行td-agent,Kiyoto假设在Ubuntu Precise界面(12.04)。td-agent同样适用于Ubuntu Lucid和CentOS 5/6,以及即将发行的Ubuntu Trusty。
运行以下指令:
curl -L <a href="http://toolbelt.treasuredata.com/sh/install-ubuntu-precise.sh">http://toolbelt.treasuredata.com/sh/install-ubuntu-precise.sh</a> | sh
用户通过以下指令可以检查td-agent是否安装成功。
$ which td-agent /usr/sbin/td-agent
第二步:配置输入和输出
对于td-agent,该配置文件位于/etc/td-agent/td-agent.conf。再次配置,跟踪Apache日志文件。
<source> type tail format apache2 path /var/log/apache2/access_log pos_file /var/log/td-agent/apache2.access_log.pos tag s3.apache.access </source>这个片段配置Apache日志文件输入。Fluentd跟踪日志文件放置在/var/log/apache2/access_log,根据Apache组合日志形式解析,并且作标记s3.apache.access。
下面,我们配置S3输出,如下:
<match s3.*.*> type s3 s3_bucket YOUR_BUCKET_NAME path logs/ buffer_path /var/log/td-agent/s3 time_slice_format %Y%m%d%H time_slice_wait 10m utc format_json true include_time_key true include_tag_key true buffer_chunk_limit 256m </match>
<match s3.*.*>告诉Fluentd与以下标记相匹配1)三部分2)以S3为开头。所有来自Apache进入日志的事件都有s3.apache.access标记,它们在这里相配,然后输送入S3。
最后,让我们在更新配置上开始td-agent
$ sudo service td-agent start * Starting td-agent td-agent [OK]
你的数据中也许需要10分钟才会在S3中显示,这意味数据需要缓冲(参照"time_slice_wait")。但是,最终日志会在YOUR_BUCKET_NAME/logs/yyyyMMddHH中显示。同样的,要确保Fluentd有编写程序进入S3集。以下是IAM的设置。
{ "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*","s3:Put*", "s3:Post*" ], "Resource": [ "arn:aws:s3:::YOUR_BUCKET_NAME/logs/*", "arn:aws:s3::: YOUR_BUCKET_NAME" ] }上面的概述和例子只是Fluentd与AWS结合的使用的冰山一角,用户可以通过更多的资讯了解更多关于AWS的相关信息。
原文链接:http://aws.amazon.com/cn/blogs/aws/all-your-data-fluentd/
如您需要了解AWS最新资讯或是技术文档可访问AWS中文技术社区;如您有更多的疑问请在AWS技术论坛提出,稍后会有专家进行答疑。
订阅“AWS中文技术社区”微信公众号,实时掌握AWS技术及产品消息!
AWS中文技术社区为广大开发者提供了一个Amazon Web Service技术交流平台,推送AWS最新资讯、技术视频、技术文档、精彩技术博文等相关精彩内容,更有AWS社区专家与您直接沟通交流!快加入AWS中文技术社区,更快更好的了解AWS云计算技术。
如您需要了解AWS最新资讯或是技术文档可访问AWS中文技术社区;如您有更多的疑问请在AWS技术论坛提出,稍后会有专家进行答疑。
(译者/李雪 责编/王玉平)