基于Flume的美团日志收集系统
基于Apache Flume的大数据日志收集系统
基于Apache Flume的大数据日志收集系统
于秦
【期刊名称】《中国新通信》
【年(卷),期】2016(018)018
【摘要】在信息化及大数据时代下,各种应用程序的分散及生成的日志信息成爆炸式增长,怎么有效的收集这些日志,并对它进行在线和离线分析,已经成为这领域的热点.我们在现有的Apache Flume、Hadoop等框架下,设计实现了一种大数据日志收集系统.
【总页数】1页(P41)
【作者】于秦
【作者单位】山东科技大学信息科学与工程学院
【正文语种】中文
【相关文献】
1.大数据生态下基于Apache Mahout的推荐系统研究 [J], 樊姗;刘丹
2.基于Flume、Kafka、Storm、HDFS的航空维修大数据系统 [J], 徐海荣;陈闵叶;张兴媛
3.基于Apache Flume的分布式日志收集系统设计与实现 [J], 郝璇
4.基于Flume和HDFS的大数据采集系统的研究与实现 [J], 方中纯;赵江鹏
5.基于Apache Flume的分布式日志收集系统设计与实现 [J], 郝璇
因版权原因,仅展示原文概要,查看原文内容请购买。
Flume日志收集
Flume⽇志收集⼀、Flume介绍Flume是⼀个分布式、可靠、和⾼可⽤的海量⽇志聚合的系统,⽀持在系统中定制各类数据发送⽅,⽤于收集数据;同时,Flume提供对数据进⾏简单处理,并写到各种数据接受⽅(可定制)的能⼒。
设计⽬标:(1) 可靠性当节点出现故障时,⽇志能够被传送到其他节点上⽽不会丢失。
Flume提供了三种级别的可靠性保障,从强到弱依次分别为:end-to-end(收到数据agent⾸先将event写到磁盘上,当数据传送成功后,再删除;如果数据发送失败,可以重新发送。
),Store on failure(这也是scribe采⽤的策略,当数据接收⽅crash时,将数据写到本地,待恢复后,继续发送),Best effort(数据发送到接收⽅后,不会进⾏确认)。
(2) 可扩展性Flume采⽤了三层架构,分别为agent,collector和storage,每⼀层均可以⽔平扩展。
其中,所有agent和collector由master统⼀管理,这使得系统容易监控和维护,且master允许有多个(使⽤ZooKeeper进⾏管理和负载均衡),这就避免了单点故障问题。
(3) 可管理性所有agent和colletor由master统⼀管理,这使得系统便于维护。
多master情况,Flume利⽤ZooKeeper和gossip,保证动态配置数据的⼀致性。
⽤户可以在master上查看各个数据源或者数据流执⾏情况,且可以对各个数据源配置和动态加载。
Flume提供了web 和shell script command两种形式对数据流进⾏管理。
(4) 功能可扩展性⽤户可以根据需要添加⾃⼰的agent,collector或者storage。
此外,Flume⾃带了很多组件,包括各种agent(file, syslog等),collector和storage(file,HDFS等)。
⼆、Flume架构flume的逻辑架构:正如前⾯提到的,Flume采⽤了分层架构:分别为agent,collector和storage。
flume采集日志、
flume采集日志、Flume是一个开源的分布式日志收集系统,被广泛应用于大数据领域。
它的设计目标是高可靠性、高可扩展性和高性能,能够实时地收集、聚合和传输海量的日志数据。
Flume的工作原理非常简单,它由三个主要组件组成:源(Source)、通道(Channel)和汇(Sink)。
源负责从日志产生的地方收集数据,通道用于存储和传输数据,汇将数据传输到目标地点。
通过这种方式,Flume能够将分散在不同机器上的日志数据集中起来,方便后续的处理和分析。
为了更好地理解Flume的采集过程,我们可以举一个实际的例子。
假设我们有一个分布式系统,由多台服务器组成,每台服务器上都有大量的日志文件需要收集和分析。
我们可以在每台服务器上安装Flume的Agent,并配置好相应的Source、Channel和Sink。
在每个Agent的配置文件中,我们可以指定要收集的日志文件的路径和文件名,这样Flume就知道从哪里开始收集了。
当日志文件产生新的数据时,Source会定期检查这些文件,并将新增的数据发送到Channel中。
Channel负责暂存数据,以防止数据丢失。
当Channel中的数据达到一定量或一定时间间隔时,Sink会将数据传输到指定的目标地点,比如HDFS、HBase或Kafka等。
Flume的采集过程是可靠的,即使在网络故障或其他异常情况下,它也能够保证数据不会丢失。
这得益于Flume的事务机制,Source、Channel和Sink之间的数据传输是通过事务来完成的。
当数据成功传输到Sink后,Flume会向Source发送确认消息,Source收到确认消息后才会删除已经传输的数据。
如果在传输过程中出现异常,Flume会自动回滚事务,重新发送数据,直到数据成功传输为止。
除了基本的日志收集功能,Flume还提供了一些高级特性,如多级代理、拦截器和过滤器等。
多级代理可以将多个Agent连接起来,形成一个分层的日志收集系统,方便管理和扩展。
基于Apache Flume的分布式日志收集系统设计与实现
基于Apache Flume的分布式日志收集系统设计与实现作者:郝璇来源:《软件导刊》2014年第07期摘要:基于Apache Flume的开源日志收集系统,设计并实现了一个适用于异构网站平台间的分布式日志收集系统。
该系统将多个网站的日志集中存储,为进行下一步的日志分析提供了数据支持,也为云平台下的网站日志收集方案提供了参考依据。
关键词:Apache Flume;分布式;日志收集中图分类号:TP319文献标识码:A文章编号:1672 7800(2014)007 0110 020引言对于网站而言,通过采集系统日志,分析系统的运行和安全状况以及客户的访问行为至关重要[1]。
传统的日志采集模式都是直接将信息记录在本地服务器,然后通过Linux命令行或其它日志分析工具对其进行分析[2,3]。
然而,随着信息规模的扩大,一个网站系统可能会包含多个组件,并部署到多个不同的服务器上。
采用传统的方式对其日志分别进行维护和分析会带来一些麻烦和问题。
另一方面,随着虚拟化技术和云计算技术的应用,任何一个节点都可以动态地根据一定的策略分布或迁移,传统的本地日志收集模式势必不能适应虚拟环境的需要。
本文基于开源日志收集系统Apache Flume,设计并实现了一个分布式环境下的日志集中收集系统。
该系统可以实现异构网站之间的日志集中收集,从而为下一步的日志分析与统一监控提供数据支持。
1Apache FlumeApache Flume是Cloudera开源的分布式日志,其内置了非常齐全的各种组件,减少了用户使用的复杂度。
Flume架构具有简单、可靠、灵活的特点,并且为HDFS提供了直接的支持,可以比较方便地实现与HBase的集成[4]。
本文采用Apache Flume NG系统进行分布式日志的收集。
NG是New Generation的缩写,与Apache Flume 0.9x版本存在区分。
Flume NG对传统的Apache Flume进行了精简,去掉了Master和Collector两种角色,只保留了Agent一种角色。
基于Flume的分布式日志聚合系统的研究
炎 、 【 寺 ,彩维 眨 数 批 指怀 的 腱 示
果 } 受 果川 I ] P C的 l l I l 、 . 1 I l 数 【 『 】 . 充成数 的 步畏啦 随卉数 源的 1 增 l 久圾 时代. I t 忠数州 分 的多 化前 求 1 一J 多种 ¨忠 分析 f J J 】 . 【 I 术端 要 恂 心层 次 化 的 采 _ l = l ! 设的均 衡 i n 1 ] u x t l I 】 十 £水 、 I m t ・ l l P F ' l u m ¨ I H l i ‘ - s H I r ‘ ・ h + 1 t l l i l h + K i l Ⅲ ⅢI ) 、 川 ’ i l ) ・ 和 接 收 数 泺 “ { : 送 数 据 的 , J ( : I k 1 、 至 I J J i 疋 i . f l _ 他J l J n J f { 辣¨ 1 志 分 技 术 I " h m ̄ t , 、 ’ 1 f ) Hj 士 聚 刈 K务J 一 / i 要 列 并 发f 1 _ 1 忠 数 掘 分 惭 水 进 行 转 化 嗣】 A 芝 l 持 的J l 川1 . 能够 l 效的录氍 、 埭 f ¨ f 0 输海 f ¨忠 敏 分离 . , ~ l q l 、 戡J l , ; ,  ̄I l k纾 拔 均 : ’ j・ 力 ‘ 斯 耍 埘 实 叫 数 据 流 逊 仃
5 , c i c uo. N re c l m ol og )Vi s i  ̄
科 技 视 界
科技・ 探索・ 争鸣
基于 F l u me 的分布 式 口志聚合 系统 的研究
陈 军 ( 湖 ̄ L T, I I , 大学 , 湖北 武 汉 4 3 0 0 6 8 )
【 摘 要】 互联 网的迅 猛发展 以及 大数据相 关技 术的兴起 , 使得 E 1 志数据的规模 日溘剧增 . 给 已有的 日志 采集及分析系统带 采了 挑战; 长文 结 合使 J t ]H 、 l t i 【 r I以及 K i h d n a等技 术手段提 出了一种 分布式的 日志采集分析 系统 ,从 系统设 i } 和 架构等 方面提 出 了新的解 是思 路. 开针对 F I L m t 的 访 问 日志进 行 了实 时 采 集 和 分析 及 展 示 【 关键词 】 日志采集; I : h m . : I . ; l a s l i  ̄ a ¨ } 1 : K i l Ⅲ m l 对规 O ! l J J 』 l 簪 ¨ j 。 . ¨ t 多 个 什 进 仃 : ' r J L t f r抽 象 这 f l 0 引 言 h k l l l 1 ] ( ' l 选扦 器的数 路 … j 聚 合胤『 J 』 J l 为例.刈他川 1 ) ¨ m k规…r 』 l 1 『 j 随 荷“ 联 + ” _ 1 1 - 代的 到 、 求. 分 系统 啜处川} n 0 数 史 定 义舰 则 、 成 规 则摘 要 、 缃造 规【 J { f j 仪, I 』 l 以及舰! J ! l J 执 处川 个j 』 久、 数 利 炎匹 i 谢 和数 【 l f _ 要求 更高 . 【 『 【 『 …分 叫 I数抓泊 进} r j 所 提… 1 具 仃 适 恋 l 辽的 ¨忠 聚 f i - M『 j = ! 『 J 编 馍 j 技 术I I 趟 ‘ I ( I 】 刈 蚌 发海 : 数 的 l I J 处 . 掬 满 魄城 均衡 , _. I J ’ } r 腱一 H : 、 『 、 i r 川 … 手 1 】 持, 人化多种特 r I _ _ l J 『 数 分 系统 j 仃 3 分 布 式 日志 聚 合 系统 框 架 较 人挑 战 数拥 f 、 f 《 1 ] l ’ f | 发 的数 据 椎 送 求 I I . f . 心i 发进 仃 伉 分" 乖 I 】 / i J l 究 r I l J l n r . 以及} I 忠 规『 J ! J l 的;  ̄ , 6 1 1 1 f . f I 忠j , 哉均 嘶. 夫 』 篮的减 , 数 槲 的缓 仃 叫 问 : 数 系统 的 I ’ 于 r 爬 r l 析 系统 分 ^ 』 ℃、 “ 发 的特 性 , 将} 1 忠聚 系统 分 数 采集 、 聚 I i i - 川 r 肄 数 的 处 . 刈 缃化f ¨I I : 化教 的 窬 处 务f ¨ 数 川 化 次 【 f 志 汞 i 成 刈 多 样 化 数据 源敬 的 : 而 数 流 的 叫 数扎 忻 系统 t 籽要通 过 j 一衔 』 ℃ 的 f f 障 录q . 能够 × , j 。 ; J I 化 I I } : r i f { 』 化数J J , t . i  ̄f U 步的{ I ‘ 、 ; 聚 合』 j } 杰 眷也 j r 系统 的 岛呵j } J : … 刈 数 桐 1 数 分析指 进 ”持 久化 , 芷持 尚』 f 发 求 的 化 f ¨ 分离 、 数 流Ⅲ { 垮f 『 l } 1 数 的 聚合 ; 数 c 『 . ’ I { 发的写人 迎以 D 的A “ F I m u J 发 5 ( 拆; 采 投 术 从 化 乏”定 ; l i l J f P  ̄ i 1 1 9 数 指标 小 . 脱 刈J J t J 、 I l K , 好器饥城 I ' l 靖& 毅州 聚 合 的 f l计 分 ( f I J : Ll 1 志 系统 进 .  ̄ f 6 J £
构建基于FlumeNG的海量日志收集系统
构建基于FlumeNG的海量日志收集系统作者:李志刚张鑫赵青娟纪占林来源:《消费电子·理论版》2013年第07期摘要:随着互联网技术的快速发展和Web2.0技术的逐渐成熟,各种应用程序在运行过程中所产生的日志的数量呈爆炸式增长。
如何高效的收集海量的日志数据,成为了一个亟需解决的难题。
本研究基于FlumeNG、Hadoop等开源框架设计并实现了一套完善的海量日志数据的实时收集系统。
关键词:FlumeNG;Hadoop;日志收集中图分类号:TP311 文献标识码:A 文章编号:1674-7712 (2013) 14-0000-01日志的收集是了解和分析应用程序运行情况的必要前提[1]。
通过使用FlumeNG等技术,可以实时的、可靠的收集网络应用程序所产生的海量日志数据。
一、FlumeNGFlumeNG是分布式的、可靠的、高可用的、高性能的开源日志收集系统[2]。
它能够从各种日志源上收集日志,存储到一个中央存储系统(可以是NFS,HDFS等)上[3],以便于进行集中统计分析处理。
二、日志收集系统的架构Event是FlumeNG中所传输的基本单元。
客户端应用程序需要将产生的日志数据封装成FlumeNG所能识别的Event对象。
FlumeNG就是以Event的方式将数据从日志源头传送到最终的存储目的地。
Agent是FlumeNG配置管理的基本运行组件。
一个Agent是包括Sources,Channels,Sinks和其他组件的单独JVM运行实体。
其中,Sources负责接送客户端应用程序所产生的Event,并将这些Events以事务的方式来批量的添加到一个或者多个Channels中。
系统内置的的Sources包括:Syslog、Avro、Exec等。
Channel位于Source和Sink之间,用于缓存由Source进来的Events,提高系统的可靠性和吞吐量。
MemoryChannel和FileChannel是使用最多的两种Channel。
项目7 Flume日志采集系统-任务7.2 Flume采集方案说明与可靠性保证
B I T C项目7 Flume日志采集系统任务7.2 Flume采集方案说明与可靠性保证主讲教师:马东波学习目标Title Works About Help章节概要在大数据系统的开发中,数据收集工作无疑是开发者首要解决的一个难题,但由于生产数据的源头丰富多样,其中包含网站日志数据、后台监控数据、用户浏览网页数据等,数据工程师要想将它们分门别类的采集到HDFS系统中,就可以使用Apache Flume(数据采集)系统。
本章将针对Flume系统的基本概念、安装及应用方式详细讲解,让读者掌握Flume系统的原理与应用。
C O N T E N T SFlume采集方案说明PART 01Flume的可靠性保证PART 02Flume Sources在编写Flume采集方案时,首先必须明确采集的数据源类型、出处;接着,根据这些信息与Flume已提供支持的Flume Sources进行匹配,选择对应的数据采集器类型(即sources.type);再根据选择的数据采集器类型,配置必要和非必要的数据采集器属性,Flume提供并支持的Flume Sources种类如下所示。
Avro Source Thrift Source Exec SourceJMS Source Spooling Directory Source Twitter 1% firehose SourceKafka Source NetCat TCP Source NetCat UDP SourceSequence GeneratorSyslog TCP Source Multiport Syslog TCP SourceSourceSyslog UDP Source HTTP Source Stress SourceAvro Legacy Source Thrift Legacy Source Custom SourceScribe Source Taildir SourceTitle Works About HelpFlume Sources监听Avro端口并从外部Avro客户端流中接收event数据,当与另一个Flume Agent 上的Avro Sink配对时,可创建分层集合拓扑,利用Avro Source可以实现多级流动、扇出流、扇入流等效果,Avro Source常用配置属性如下。
基于Flume的美团日志收集系统
基于Flume的美团日志收集系统(一)架构和设计?Agent丰富程度提供丰富的Agent,包括avro/thriftsocket, text, tail等主要是thrift端口Store丰富程度可以直接写hdfs, text, console, tcp;写hdfs时支持对text和sequence的压缩;提供buffer, network, file(hdfs, text)等代码结构系统框架好,模块分明,易于开发代码简单3 美团日志收集系统架构美团的日志收集系统负责美团的所有业务日志的收集,并分别给Hadoop平台提供离线数据和Storm平台提供实时数据流。
美团的日志收集系统基于Flume设计和搭建而成。
目前每天收集和处理约T级别的日志数据。
下图是美团的日志收集系统的整体框架图。
a. 整个系统分为三层:Agent层,Collector层和Store层。
其中Agent层每个机器部署一个进程,负责对单机的日志收集工作;Collector层部署在中心服务器上,负责接收Agent层发送的日志,并且将日志根据路由规则写到相应的Store层中;Store层负责提供永久或者临时的日志存储服务,或者将日志流导向其它服务器。
b. Agent到Collector使用LoadBalance策略,将所有的日志均衡地发到所有的Collector上,达到负载均衡的目标,同时并处理单个Collector失效的问题。
c. Collector层的目标主要有三个:SinkHdfs, SinkKafka和SinkBypass。
分别提供离线的数据到Hdfs,和提供实时的日志流到Kafka和Bypass。
其中SinkHdfs又根据日志量的大小分为SinkHdfs_b,SinkHdfs_m和SinkHdfs_s三个Sink,以提高写入到Hdfs的性能,具体见后面介绍。
d. 对于Store来说,Hdfs负责永久地存储所有日志;Kafka存储最新的7天日志,并给Storm 系统提供实时日志流;Bypass负责给其它服务器和应用提供实时日志流。
项目7 Flume日志采集系统-任务7.2 Flume采集方案说明与可靠性保证
–
组件类型名需必须是memory
capacity
transactionCapacity
keep-alive byteCapacityBuffer
Percentage byteCapacity
100
100 3 20
等于JVM可用的最大 内存的80%
存储在channel中的最大event数
channel从source接收或向sink传递的每 个事务中最大event数
本章将针对Flume系统的基本概念、安装及应用方式详细讲 解,让读者掌握Flume系统的原理与应用。
CONTENTS
PART 01
Flume采集方案说 明
PART 02
Flume的可靠性保 证
PART01
Flume采集方案 说明
Flume采集方案说明
Flume Sources
在编写Flume采集方案时,首先必须明确采集的数据源类型、出处;接着,根据 这些信息与Flume已提供支持的Flume Sources进行匹配,选择对应的数据采集器类型 (即sources.type);再根据选择的数据采集器类型,配置必要和非必要的数据采集器 属性,Flume提供并支持的Flume Sources种类如下所示。
属性名称
默认值
channels
美团软件体系结构分析讲解
2模块业务流程 图分析
用户接口模块将从以上三个方面进行介绍,分别是整个模块的概 述,模块业务流程图分析,各子模块及其构件概述
16
4.1.1模块总体概述 用户接口
用户接口模块是美 团网四大模块中的核心 模块,主要实现与用户 的互动,站在用户的角 度上看到的美团网的基 本功能。该模块又分为 顾客注册、会员登录、 团购搜索、订单管理、 售后模块 五个子模块, 从而实习用户的基本需
界面约束
对于产品要有详细的说明,并且界面简单大方美观。 通过超链接检索所有商品 为获取远程服务而设计表单,用于检索信息、定购产品等
功能约束
优惠策略限时; 稳定的数据库管理保证用户的信息和资金安全;
14
4.美团的模块视图
美团网系统
用 户 接 口 模 块
管 理 员 接 口 模 块
商
数
家
据
接
服
口
务
美团体系结构的结构分析
系统功能
美 团
数据流
概念视图
模块视图
美团软件设计与分析,南昌大学软件学院 09
1.美团的系统功能
商家
发布商品信息、 准确获取优质消 费者。
用户
快捷地搜寻感 兴趣的、优惠的、 可靠的商户进行 消费。
平台管理者
维护平台的稳 定;优化用户的 体验;业务的拓 展。
美团软件设计与分析,南昌大学软件学院 10
基本构件
用户状态维 护构件 、日志 填写构件 、分 页显示构件 、 数据库操作构 件 、异常处理 构件等 。
支撑构件
包括系统数 据库构件 、报 表格式定义构 件。
毕业设计第二次汇报,段公子,西北工业大学航空学院
4.2管理员接口模块
Flume日志采集
Flume⽇志采集案例分析:假设有⼀个⽣产场景,两台服务器A、B在实时产⽣⽇志数据,⽇志数据类型主要为access.log、nginx.log和web.log。
现在需要将A、B两台服务器产⽣的⽇志数据access.log、nginx.log和web.log采集汇总到C服务器上,并统⼀收集上传到HDFS上保存。
此案例将 node02 和 node03 分别作为A服务器和B服务器进⾏第⼀阶段的⽇志数据采集,将 node01 作为C服务器进⾏⽇志数据汇总并上传到 HDFS。
⼀、服务系统搭建与配置1、Flume 安装配置在node01上执⾏以下操作:上传 apache-flume-1.8.0-bin.tar.gz 安装包并解压cd /export/softwares#上传安装包rz#将安装包解压到/export/servers ⽬录下tar -zxvf apache-flume-1.8.0-bin.tar.gz -C ../serverscd /export/servers#重命名解压的⽂件名mv apache-flume-1.8.0-bin flume修改 flume-env.shcd /export/servers/flume/confmv flume-env.sh.template flume-env.sh# vim flume-env.sh或者⽤ notepad++# 修改 JAVA_HOMEexport JAVA_HOME=/export/servers/jdk1.8.0_141修改 /etc/profile# 在⽂档底部添加以下内容:export FLUME_HOME=/export/servers/flumeexport PATH=:$FLUME_HOME/bin:$PATH# 刷新配置⽂件$ source /etc/profile2、分发安装包node01 上执⾏以下命令:scp -r /export/servers/flume/ node02:/export/servers/scp -r /export/servers/flume/ node03:/export/servers/# 刷新配置⽂件scp /etc/profile node02:/etc/profilescp /etc/profile node03:/etc/prof⼆、配置采集⽅案1、在node02 和 node03 各⾃的 /export/servers/flume/conf ⽬录下编写相同的⽇志采集⽅案 exec-avro_logCollection.conf# define agenta1.sources=r1 r2 r3a1.sinks=k1a1.channels=c1# desc (first) source:r1a1.sources.r1.type=execmand=tail -F /root/logs/access.loga1.sources.r1.interceptors=i1a1.sources.r1.interceptors.i1.type=statica1.sources.r1.interceptors.i1.key=typea1.sources.r1.interceptors.i1.value=access#desc (second) source:r2a1.sources.r2.type=execmand=tail -F /root/logs/nginx.loga1.sources.r2.interceptors=i2a1.sources.r2.interceptors.i2.type=statica1.sources.r2.interceptors.i2.key=typea1.sources.r2.interceptors.i2.value=nginx#desc source:r3a1.sources.r3.type=execmand=tail -F /root/logs/web.loga1.sources.r3.interceptors=i3a1.sources.r3.interceptors.i3.type=statica1.sources.r3.interceptors.i3.key=typea1.sources.r3.interceptors.i3.value=web# desc channel:c1a1.channels.c1.type=memorya1.channels.c1.capacity=2000000a1.channels.c1.transactionCapacity=100000# desc sink:k1a1.sinks.k1.type=avroa1.sinks.k1.hostname=node01a1.sinks.k1.port=41414# desc source channel sinka1.sources.r1.channels=c1a1.sources.r2.channels=c1a1.sources.r3.channels=c1a1.sinks.k1.channel=c12、在 node01 的 /export/servers/flume/conf ⽬录下编写第⼆级⽇志采集⽅案 avro-hdfs_logCollection.conf# desc agenta1.sources=r1a1.sinks=k1a1.channels=c1# desc source:r1a1.sources.r1.type=avroa1.sources.r1.bind=node01a1.sources.r1.port=41414# desc interceptorsa1.sources.r1.interceptors=i1a1.sources.r1.interceptors.i1.type=timestamp# desc channel:c1a1.channels.c1.type=memorya1.channels.c1.capacity=20000a1.channels.c1.transactionCapacity=10000# desc sink:k1a1.sinks.k1.type=hdfsa1.sinks.k1.hdfs.path=hdfs://node01:8020/source/logs/%{type}/%Y%m%da1.sinks.k1.hdfs.filePrefix=eventsa1.sinks.k1.hdfs.fileType=DataStreama1.sinks.k1.hdfs.writeFormat=Text# file_numa1.sinks.k1.hdfs.rollCount=0#file_timea1.sinks.k1.hdfs.rollInterval=0#file_sizea1.sinks.k1.hdfs.rollSize=10485760# HDFS_NUMa1.sinks.k1.hdfs.batchSize=20# HDFS_TIMEOUTa1.sinks.k1.hdfs.callTimeout=30000# source sink channela1.sources.r1.channels=c1a1.sinks.k1.channel=c1三、启动⽇志采集系统1、启动 Hadoop 集群在 node01 上执⾏以下命令cd/export/servers/hadoop-2.6.0-cdh5.14.0sbin/start-dfs.shsbin/start-yarn.sh通过 jps 查看当前进程,应该有6个进程NameNodeDataNodeResourceManagerSecondaryNameNodeNodeManagerJps#通过 jps 查看 node02、node03 的进程,应该有3个DataNodeNodeManagerJps2、启动 Flume 系统# 先在 node01 上启动 Flume 系统cd /export/servers/flumebin/flume-ng agent -c conf -f conf/avro-hdfs_logCollection.conf -name a1 -Dflume.root.logger=INFO,console# 然后在 node02、node03 上启动cd /export/servers/flumebin/flume-ng agent -c conf -f conf/exec-avro_logCollection.conf -name a1 -Dflume.root.logger=INFO,console3、在 node01 界⾯查看 Flume 启动效果四、⽇志采集系统测试1、产⽣⽇志数据# 先检查 /root/logs 是否存在,如不存在,⾃⾏在三台机器上创建mkdir /root/logs# 在 node02、node03 上分别克隆3个会话窗⼝,并且在打开的3个窗⼝中分别执⾏如下指令,⽤来产⽣⽇志数据while true;do echo"access access ..." >>/root/logs/access.log;sleep1;donewhile true;do echo"nginx nginx ..." >>/root/logs/nginx.log;sleep1;done while true;do echo"web web ..." >>/root/logs/web.log;sleep1;done2、查看 node01 的会话窗⼝信息3、查看 UI 界⾯# ⽹址node01:50070。
浅析Flume大数据日志采集系统
浅析Flume大数据日志采集系统作者:付宇来源:《科学与财富》2020年第33期摘要:随着大数据、社交网络、云计算等技术不断融入我们的生活以及现有的计算能力、存储空间、网络带宽的高速发展,人类积累的数据在互联网、通信、金融、商业、医疗等诸多领域不断地增长和累积。
在大数裾学习、开发过程中,会产生各种各样的数据源信息,如网站流量日志分析系统产生的日志数据,这些数据的收集、监听、使用非常重要。
针对类似业务需求,通常会使用 Apache旗下的Flume日志采集系统完成相关数据采集工作。
本文主要对Flume大数据日志采集系统进行介绍。
关键词:大数据;Flume;日志采集近几年来,随着计算机和信息技术的迅猛发展和普及应用,行业应用系统的规模迅速扩大,行业应用所产生的数据呈爆炸性增长。
动辄达到数百TB甚至数十至数百PB规模的行业/企业大数据已远远超出了现有传统的计算技术和信息系统的处理能力。
如何对产生的大数据进行采集是大数据处理面临的问题之一。
Apache Flume是一个高可靠、高可用的分布式系统,用于高效地从许多不同的数据源收集、聚合大批量的日志数据,进行集中式存储。
Flume最早是Cloudera公司提供的一个高可用的、高可靠的、分布式海量日志采集、聚合和传输系统,之后纳入到了 Apache旗下,作为一个顶级开源项目。
Apache Flume不仅只限于日志数据的采集,由于Flume采集的数据源是可定制的,因此Flume还可用于传输大量事件数据,包括但不限于网络流量数据、社交媒体生成的数据、电子邮件消息以及几乎任何可能的数据源。
本文接下来主要对Flume的架构和相关组件进行介绍。
1 Flume的运行机制和系统结构1.1Flume运行机制Flume中有3个核心组件,它们分别是数据采集器(Source)、缓冲通道(Channel)以及接收器(Sink)。
Flume的核心运行机制就是把数据从数据源,例如Web Server,通过数据采集器(Source)收集过来,再将收集的数据通过缓冲通道(Channel)汇集到指定的接收器(Sink)。
flume采集日志、
flume采集日志、Flume是一种开源的分布式日志采集系统,用于快速、可靠地采集、聚合和传输大量的日志数据。
它具有高可靠性、高扩展性和高性能的特点,被广泛应用于大数据领域。
在现代互联网应用中,日志数据的采集和处理是非常重要的一环。
通过对系统日志、应用日志、访问日志等进行采集和分析,可以帮助企业监控系统的健康状态、分析用户行为、故障排查等。
而Flume作为一种高效的日志采集工具,可以帮助企业快速构建起完善的日志采集体系。
Flume的架构非常灵活,可以根据不同的需求进行定制化配置。
其核心概念包括三个部分:Agent、Source和Sink。
Agent是Flume 的执行单位,负责接收、处理和传输数据。
Source负责从各种数据源中采集数据,并将其传输给Agent。
Sink则负责将Agent接收到的数据传输到目标存储或下一个Agent。
通过这样一套灵活的架构,Flume可以满足各种不同场景下的日志采集需求。
在Flume中,数据的采集和传输是通过事件驱动的方式进行的。
当Source采集到数据后,会将其封装成一个事件,然后通过Channel 传输给Sink。
Channel是Source和Sink之间的缓冲区,用于存储事件。
Flume提供了多种类型的Channel实现,例如内存Channel、文件Channel和Kafka Channel等,用户可以根据实际需求选择不同的Channel类型。
除了基本的日志采集功能外,Flume还提供了一些高级特性,例如数据过滤、数据转换和数据路由等。
通过配置Interceptor,可以对采集到的数据进行过滤和转换,以满足特定的需求。
通过配置Channel Selector,可以根据不同的条件将数据路由到不同的Sink。
这些高级特性使得Flume在实际应用中更加灵活和强大。
Flume的应用场景非常广泛。
在大数据领域,Flume可以与Hadoop、Spark等其他大数据处理框架结合使用,实现实时数据采集和批量处理。
基于Apache Flume 的大数据日志收集系统
基于Apache Flume 的大数据日志收集系统作者:于秦来源:《中国新通信》2016年第18期【摘要】在信息化及大数据时代下,各种应用程序的分散及生成的日志信息成爆炸式增长,怎么有效的收集这些日志,并对它进行在线和离线分析,已经成为这领域的热点。
我们在现有的Apache Flume、Hadoop等框架下,设计实现了一种大数据日志收集系统。
【关键词】 Apache Flume 日志收集 Hadoop大数据及互联网时代下,为了更有效的管理各种应用和系统程序的运行,通过收集它们的日志信息,进行离线和在线分析,来了解它们的运行和安全情况。
在信息化及大数据下,分布式系统用的越来越多,日志的存储路径及分布情况越来越多。
为了能更好的聚集存储分析这些分布式日志,本文基于开源的Apache Flume 、Hadoop 框架下,设计实现了一种大数据分布式的日志收集系统,并将收集的日志用于监控分析。
一、 FlumeFlume 是一种开源的分布式日志管理架构,它可以将日志聚集,有可用性高、性能高、事务管理、失败重启等功能。
将各个分布式系统上的日志源聚集到一个存储上,方便日志的统一的分析和处理。
数据处理速度快,完全可以用于生产环境[4]。
Flume的核心是agent :(1)agent是一个java进程,运行在日志收集端,通过agent接收日志,然后暂存起来,再发送到目的地;(2)agent里面包含3个核心组件:source、channel、sink。
source 组件是专用于收集日志的,可以处理各种类型各种格式的日志数据,source组件把数据收集来以后,临时存放在channel中。
channel 组件是在agent中专用于临时存储数据的,channel中的数据只有在sink发送成功之后才会被删除。
sink 组件是用于把数据发送到目的地的组件,目的地包括hdfs、logger、avro、thrift、ipc、file、null、hbase、solr、自定义。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于Flume的美团日志收集系统(一)架构和设计Agent丰富程度提供丰富的Agent,包括avro/thriftsocket, text, tail等主要是thrift端口Store丰富程度可以直接写hdfs, text, console, tcp;写hdfs时支持对text和sequence的压缩;提供buffer, network, file(hdfs,text)等代码结构系统框架好,模块分明,易于开发代码简单3 美团日志收集系统架构美团的日志收集系统负责美团的所有业务日志的收集,并分别给Hadoop平台提供离线数据和Storm平台提供实时数据流。
美团的日志收集系统基于Flume设计和搭建而成。
目前每天收集和处理约T级别的日志数据。
下图是美团的日志收集系统的整体框架图。
a. 整个系统分为三层:Agent层,Collector层和Store层。
其中Agent层每个机器部署一个进程,负责对单机的日志收集工作;Collector层部署在中心服务器上,负责接收Agent 层发送的日志,并且将日志根据路由规则写到相应的Store层中;Store层负责提供永久或者临时的日志存储服务,或者将日志流导向其它服务器。
b. Agent到Collector使用LoadBalance策略,将所有的日志均衡地发到所有的Collector上,达到负载均衡的目标,同时并处理单个Collector失效的问题。
c. Collector层的目标主要有三个:SinkHdfs, SinkKafka和SinkBypass。
分别提供离线的数据到Hdfs,和提供实时的日志流到Kafka和Bypass。
其中SinkHdfs又根据日志量的大小分为SinkHdfs_b,SinkHdfs_m和SinkHdfs_s三个Sink,以提高写入到Hdfs的性能,具体见后面介绍。
d. 对于Store来说,Hdfs负责永久地存储所有日志;Kafka存储最新的7天日志,并给Storm 系统提供实时日志流;Bypass负责给其它服务器和应用提供实时日志流。
下图是美团的日志收集系统的模块分解图,详解Agent, Collector和Bypass中的Source, Channel和Sink的关系。
a. 模块命名规则:所有的Source以src开头,所有的Channel以ch开头,所有的Sink 以sink开头;b. Channel统一使用美团开发的DualChannel,具体原因后面详述;对于过滤掉的日志使用NullChannel,具体原因后面详述;c. 模块之间部通信统一使用Avro接口;4 架构设计考虑下面将从可用性,可靠性,可扩展性和兼容性等方面,对上述的架构做细致的解析。
4.1 可用性(availablity)对日志收集系统来说,可用性(availablity)指固定周期系统无故障运行总时间。
要想提高系统的可用性,就需要消除系统的单点,提高系统的冗余度。
下面来看看美团的日志收集系统在可用性方面的考虑。
4.1.1 Agent死掉Agent死掉分为两种情况:机器死机或者Agent进程死掉。
对于机器死机的情况来说,由于产生日志的进程也同样会死掉,所以不会再产生新的日志,不存在不提供服务的情况。
对于Agent进程死掉的情况来说,确实会降低系统的可用性。
对此,我们有下面三种方式来提高系统的可用性。
首先,所有的Agent在supervise的方式下启动,如果进程死掉会被系统立即重启,以提供服务。
其次,对所有的Agent进行存活监控,发现Agent死掉立即报警。
最后,对于非常重要的日志,建议应用直接将日志写磁盘,Agent使用spooldir 的方式获得最新的日志。
4.1.2 Collector死掉由于中心服务器提供的是对等的且无差别的服务,且Agent访问Collector做了LoadBalance和重试机制。
所以当某个Collector无法提供服务时,Agent的重试策略会将数据发送到其它可用的Collector上面。
所以整个服务不受影响。
4.1.3 Hdfs正常停机我们在Collector的HdfsSink中提供了开关选项,可以控制Collector停止写Hdfs,并且将所有的events缓存到FileChannel的功能。
4.1.4 Hdfs异常停机或不可访问假如Hdfs异常停机或不可访问,此时Collector无法写Hdfs。
由于我们使用DualChannel,Collector可以将所收到的events缓存到FileChannel,保存在磁盘上,继续提供服务。
当Hdfs恢复服务以后,再将FileChannel中缓存的events再发送到Hdfs上。
这种机制类似于Scribe,可以提供较好的容错性。
4.1.5 Collector变慢或者Agent/Collector网络变慢如果Collector处理速度变慢(比如机器load过高)或者Agent/Collector之间的网络变慢,可能导致Agent发送到Collector的速度变慢。
同样的,对于此种情况,我们在Agent 端使用DualChannel,Agent可以将收到的events缓存到FileChannel,保存在磁盘上,继续提供服务。
当Collector恢复服务以后,再将FileChannel中缓存的events再发送给Collector。
4.1.6 Hdfs变慢当Hadoop上的任务较多且有大量的读写操作时,Hdfs的读写数据往往变的很慢。
由于每天,每周都有高峰使用期,所以这种情况非常普遍。
对于Hdfs变慢的问题,我们同样使用DualChannel来解决。
当Hdfs写入较快时,所有的events只经过MemChannel传递数据,减少磁盘IO,获得较高性能。
当Hdfs写入较慢时,所有的events只经过FileChannel传递数据,有一个较大的数据缓存空间。
4.2 可靠性(reliability)对日志收集系统来说,可靠性(reliability)是指Flume在数据流的传输过程中,保证events 的可靠传递。
对Flume来说,所有的events都被保存在Agent的Channel中,然后被发送到数据流中的下一个Agent或者最终的存储服务中。
那么一个Agent的Channel中的events什么时候被删除呢?当且仅当它们被保存到下一个Agent的Channel中或者被保存到最终的存储服务中。
这就是Flume提供数据流中点到点的可靠性保证的最基本的单跳消息传递语义。
那么Flume是如何做到上述最基本的消息传递语义呢?首先,Agent间的事务交换。
Flume使用事务的办法来保证event的可靠传递。
Source 和Sink分别被封装在事务中,这些事务由保存event的存储提供或者由Channel提供。
这就保证了event在数据流的点对点传输中是可靠的。
在多级数据流中,如下图,上一级的Sink和下一级的Source都被包含在事务中,保证数据可靠地从一个Channel到另一个Channel转移。
其次,数据流中Channel的持久性。
Flume中MemoryChannel是可能丢失数据的(当Agent死掉时),而FileChannel是持久性的,提供类似mysql的日志机制,保证数据不丢失。
4.3 可扩展性(scalability)对日志收集系统来说,可扩展性(scalability)是指系统能够线性扩展。
当日志量增大时,系统能够以简单的增加机器来达到线性扩容的目的。
对于基于Flume的日志收集系统来说,需要在设计的每一层,都可以做到线性扩展地提供服务。
下面将对每一层的可扩展性做相应的说明。
4.3.1 Agent层对于Agent这一层来说,每个机器部署一个Agent,可以水平扩展,不受限制。
一个方面,Agent收集日志的能力受限于机器的性能,正常情况下一个Agent可以为单机提供足够服务。
另一方面,如果机器比较多,可能受限于后端Collector提供的服务,但Agent到Collector是有Load Balance机制,使得Collector可以线性扩展提高能力。
4.3.2 Collector层对于Collector这一层,Agent到Collector是有Load Balance机制,并且Collector 提供无差别服务,所以可以线性扩展。
其性能主要受限于Store层提供的能力。
4.3.3 Store层对于Store这一层来说,Hdfs和Kafka都是分布式系统,可以做到线性扩展。
Bypass属于临时的应用,只对应于某一类日志,性能不是瓶颈。
4.4 Channel的选择Flume1.4.0中,其官方提供常用的MemoryChannel和FileChannel供大家选择。
其优劣如下:●MemoryChannel: 所有的events被保存在存中。
优点是高吞吐。
缺点是容量有限并且Agent死掉时会丢失存中的数据。
●FileChannel: 所有的events被保存在文件中。
优点是容量较大且死掉时数据可恢复。
缺点是速度较慢。
上述两种Channel,优缺点相反,分别有自己适合的场景。
然而,对于大部分应用来说,我们希望Channel可以同提供高吞吐和大缓存。
基于此,我们开发了DualChannel。
●DualChannel:基于MemoryChannel和FileChannel开发。
当堆积在Channel中的events数小于阈值时,所有的events被保存在MemoryChannel中,Sink从MemoryChannel中读取数据;当堆积在Channel中的events数大于阈值时,所有的events被自动存放在FileChannel中,Sink从FileChannel中读取数据。
这样当系统正常运行时,我们可以使用MemoryChannel的高吞吐特性;当系统有异常时,我们可以利用FileChannel的大缓存的特性。
4.5 和scribe兼容在设计之初,我们就要求每类日志都有一个category相对应,并且Flume的Agent提供AvroSource和ScribeSource两种服务。
这将保持和之前的Scribe相对应,减少业务的更改成本。
4.6 权限控制在目前的日志收集系统中,我们只使用最简单的权限控制。
只有设定的category才可以进入到存储系统。
所以目前的权限控制就是category过滤。
如果权限控制放在Agent端,优势是可以较好地控制垃圾数据在系统中流转。
但劣势是配置修改麻烦,每增加一个日志就需要重启或者重载Agent的配置。
如果权限控制放在Collector端,优势是方便进行配置的修改和加载。
劣势是部分没有注册的数据可能在Agent/Collector之间传输。