深入剖析美团基于Flume的网站日志收集系统
介绍
美团基于Apache Flume搭建了网站日志收集系统,Flume是一个高可靠、高可扩展、高可定制化的分布式日志收集系统,在实际应用中广泛被使用。
系统架构
日志生成端
网站的日志生成端包括Apache、Nginx服务器等,这些服务器会产生大量日志数据。
Agent
在日志生成端安装Agent组件,配置agent采集器参数,并将日志发送到Flume的Sink端进行处理。
Collector
在日志接收端安装Collector组件,将采集器接收到的日志数据缓存到本地存储。
Sink
在Collector组件中,将采集到的日志数据发送到Sink组件中进行存储。
Flume核心组件
Source
Source作为Flume架构中的第一环节,指Flume从外界数据源中采集数据的组件,它位于数据流的起点。通常情况下,Source组件会一直接收并且处理外界数据,直至Source组件被终止。
Channel
Channel指Flume架构中负责数据存储的组件,它以FIFO的方式,缓存Source接收到的数据,以便后续其他组件对数据进行处理。
Sink
Sink作为Flume架构中的最后一环节,指Flume将数据存储到数据目标之中的组件,它负责处理Channel中的数据,并将数据发送给下一个Flume Agent或数据存储的系统,如HDFS等。
示例1
在Flume Agent中配置Exec Source来获取生成于2019年6月1日 00:00~01:00之间的nginx日志信息,并将日志信息输出到文件中。以下是Flume Agent的配置文件:
a1.sources = s1
a1.sinks = k1
a1.channels = c1
a1.sources.s1.type = exec
a1.sources.s1.command = tail -f /var/log/nginx/access.log | grep '2019-06-01 00:00:00,000' -A 6000 -B 5000
a1.channels.c1.type = memory
a1.sinks.k1.type = file_roll
a1.sinks.k1.sink.directory = /tmp/flume
a1.sinks.k1.sink.rollInterval = 120
a1.sinks.k1.rollSize = 0
a1.sources.s1.channels = c1
a1.sinks.k1.channel = c1
示例2
在Flume Agent中配置TailDir Source实现对生成在/data/logs/目录下的日志文件进行实时采集,并将数据传输到HDFs存储中。以下是Flume Agent的配置文件:
a1.sources = s1
a1.sinks = k1
a1.channels = c1
a1.sources.s1.type = TAILDIR
a1.sources.s1.positionFile = /data/logs/flume/taildir_position.json
a1.sources.s1.filegroups = logs
a1.sources.s1.filegroups.logs = /data/logs/
a1.sources.s1.batchSize = 1000
a1.sources.s1.batchDurationMillis = 1000
a1.sources.s1.ignorePattern = ^.*(gz)$$
a1.sources.s1.readFromEnd = true
a1.channels.c1.type = memory
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = /user/flume/dynamic/%Y%m%d/%H/
a1.sinks.k1.hdfs.filePrefix = test-hdfs
a1.sinks.k1.hdfs.fileSuffix = .avro
a1.sinks.k1.hdfs.fileType = DataStream
a1.sinks.k1.hdfs.rollInterval = 3600
a1.sources.s1.channels = c1
a1.sinks.k1.channel = c1
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入剖析美团基于Flume的网站日志收集系统 - Python技术站