程序员人生 网站导航

如何结合AWS与Fluented进行数据收集

栏目:互联网时间:2014-10-15 07:16:54

近日,亚马逊在其官方博客发布了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技术论坛提出,稍后会有专家进行答疑。 

                                                                                                            (译者/李雪 责编/王玉平) 

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐