`

Flume采集处理日志文件

 
阅读更多

 

  1. Flume简介

Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。

  1. 系统功能

    1. 日志收集

Flume最早是Cloudera提供的日志收集系统,目前是Apache下的一个孵化项目,Flume支持在日志系统中定制各类数据发送方,用于收集数据。

  1. 数据处理

Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力 Flume提供了从console(控制台)、RPC(Thrift-RPC)、text(文件)、tail(UNIX tail)、syslog(syslog日志系统,支持TCP和UDP等2种模式),exec(命令执行)等数据源上收集数据的能力。

  1. 工作方式

Flume采用了多Master的方式。为了保证配置数据的一致性,Flume[1] 引入了ZooKeeper,用于保存配置数据,ZooKeeper本身可保证配置数据的一致性和高可用,另外,在配置数据发生变化时,ZooKeeper可以通知Flume Master节点。Flume Master间使用gossip协议同步数据。

  1. 流程结构

Flume的结构主要分为三部分:source、channel以及sink.其中source为源头,负责采集日志;channel为通道,负责传输和暂时储存;sink为目的地,将采集到的日志保存起来。在真正日志采集的过程中,根据待采集日志的类型以及存储需求,选择相应的类型的source、channel和sink进行配置,从而将日志采集并且保存起来。

  1. Flume采集日志方案

    1. 需求分析

      1. 日志分类

操作系统:linux

日志更新类型:产生新日志,原日志结尾处追加

  1. 采集时间需求

采集周期:短周期(一天之内)

  1. 采集方案

    1. 采集构架

使用flume采集日志文件的过程较简洁,只需选择恰当的source、channel和sink并且配置起来即可,若有特殊需求也可自己进行二次开发实现个人需求。

具体过程为:按照需求配置一个agent,选取适当的source和sink,然后启动该agent,开始采集日志。

  1. source

flume提供多种source供用户进行选择,尽可能多的满足大部分日志采集的需求,常用的source的类型包括avro、exec、netcat、spooling-directory和syslog等。具体的使用范围和配置方法详见source.

  1. channel

flume中的channel不如source和sink那么重要,但却是不可忽视的组成部分。常用的channel为memory-channel,同时也有其他类型的channel,如JDBC、file-channel、custom-channel等,详情见channel.

  1. sink

flume的sink也有很多种,常用的包括avro、logger、HDFS、hbase以及file-roll等,除此之外还有其他类型的sink,如thrift、IRC、custom等。具体的使用范围和使用方法详见sink.

  1. Flume处理日志

Flume不止可以采集日志,还可以对日志进行简单的处理,在source处可以通过interceptor对日志正文处的重要内容进行过滤提取,在channel处可以通过header进行分类,将不同类型的日志投入不同的通道中,在sink处可以通过正则序列化来将正文内容进行进一步的过滤和分类。

  1. Flume Source Interceptors

Flume可以通过interceptor将重要信息提取出来并且加入到header中,常用的interceptor有时间戳、主机名和UUID等,用户也可以根据个人需求编写正则过滤器,将某些特定格式的日志内容过滤出来,以满足特殊需求。

  1. Flume Channel Selectors

Flume可以根据需求将不同的日志传输进不同的channel,具体方式有两种:复制和多路传输。复制就是不对日志进行分组,而是将所有日志都传输到每个通道中,对所有通道不做区别对待;多路传输就是根据指定的header将日志进行分类,根据分类规则将不同的日志投入到不同的channel中,从而将日志进行人为的初步分类。

  1. Flume Sink Processors

Flume在sink处也可以对日志进行处理,常见的sink处理器包括custom、failover、load balancing和default等,和interceptor一样,用户也可以根据特殊需求使用正则过滤处理器,将日志内容过滤出来,但和interceptor不同的是在sink处使用正则序列化过滤出的内容不会加入到header中,从而不会使日志的header显得过于臃肿。

 

  1. 附录

    1. 常见的source

      1. avro source

avro可以监听和收集指定端口的日志,使用avro的source需要说明被监听的主机ip和端口号,下面给出一个具体的例子:

a1.sources = r1

a1.channels = c1

a1.sources.r1.type = avro

a1.sources.r1.channels = c1

a1.sources.r1.bind = 0.0.0.0

a1.sources.r1.port = 4141

  1. exec source

exec可以通过指定的操作对日志进行读取,使用exec时需要指定shell命令,对日志进行读取,下面给出一个具体的例子:

a1.sources = r1

a1.channels = c1

a1.sources.r1.type = exec

a1.sources.r1.command = tail -F /var/log/secure

a1.sources.r1.channels = c1

  1. spooling-directory source

spo_dir可以读取文件夹里的日志,使用时指定一个文件夹,可以读取该文件夹中的所有文件,需要注意的是该文件夹中的文件在读取过程中不能修改,同时文件名也不能修改。下面给出一个具体的例子:

agent-1.channels = ch-1

agent-1.sources = src-1

 

agent-1.sources.src-1.type = spooldir

agent-1.sources.src-1.channels = ch-1

agent-1.sources.src-1.spoolDir = /var/log/apache/flumeSpool

agent-1.sources.src-1.fileHeader = true

  1. syslog source

syslog可以通过syslog协议读取系统日志,分为tcp和udp两种,使用时需指定ip和端口,下面给出一个udp的例子:

a1.sources = r1

a1.channels = c1

a1.sources.r1.type = syslogudp

a1.sources.r1.port = 5140

a1.sources.r1.host = localhost

a1.sources.r1.channels = c1

  1. 常见的channel

Flume的channel种类并不多,最常用的是memory channel,下面给出例子:

a1.channels = c1

a1.channels.c1.type = memory

a1.channels.c1.capacity = 10000

a1.channels.c1.transactionCapacity = 10000

a1.channels.c1.byteCapacityBufferPercentage = 20

a1.channels.c1.byteCapacity = 800000

  1. 常见的sink

    1. logger sink

logger顾名思义,就是将收集到的日志写到flume的log中,是个十分简单但非常实用的sink

  1. avro sink

avro可以将接受到的日志发送到指定端口,供级联agent的下一跳收集和接受日志,使用时需要指定目的ip和端口:例子如下:

a1.channels = c1

a1.sinks = k1

a1.sinks.k1.type = avro

a1.sinks.k1.channel = c1

a1.sinks.k1.hostname = 10.10.10.10

a1.sinks.k1.port = 4545

  1. file roll sink

file_roll可以将一定时间内收集到的日志写到一个指定的文件中,具体过程为用户指定一个文件夹和一个周期,然后启动agent,这时该文件夹会产生一个文件将该周期内收集到的日志全部写进该文件内,直到下一个周期再次产生一个新文件继续写入,以此类推,周而复始。下面给出一个具体的例子:

a1.channels = c1

a1.sinks = k1

a1.sinks.k1.type = file_roll

a1.sinks.k1.channel = c1

a1.sinks.k1.sink.directory = /var/log/flume

  1. hdfs sink

hdfs与file roll有些类似,都是将收集到的日志写入到新创建的文件中保存起来,但区别是file roll的文件存储路径为系统的本地路径,而hdfs的存储路径为分布式的文件系统hdfs的路径,同时hdfs创建新文件的周期可以是时间,也可以是文件的大小,还可以是采集日志的条数。具体实例如下:

a1.channels = c1

a1.sinks = k1

a1.sinks.k1.type = hdfs

a1.sinks.k1.channel = c1

a1.sinks.k1.hdfs.path = /flume/events/%y-%m-%d/%H%M/%S

a1.sinks.k1.hdfs.filePrefix = events-

a1.sinks.k1.hdfs.round = true

a1.sinks.k1.hdfs.roundValue = 10

a1.sinks.k1.hdfs.roundUnit = minute

  1. hbase sink

hbase是一种数据库,可以储存日志,使用时需要指定存储日志的表名和列族名,然后agent就可以将收集到的日志逐条插入到数据库中。例子如下:

a1.channels = c1

a1.sinks = k1

a1.sinks.k1.type = hbase

a1.sinks.k1.table = foo_table

a1.sinks.k1.columnFamily = bar_cf

a1.sinks.k1.serializer = org.apache.flume.sink.hbase.RegexHbaseEventSerializer

a1.sinks.k1.channel = c1

分享到:
评论

相关推荐

    Flume采集Nginx日志到Hive.rar

    Flume采集Nginx日志到Hive的事务表时需要导入到Flume下的Jar文件,具体使用方式可参见博文:https://blog.csdn.net/l1028386804/article/details/97975539

    Flume采集数据到Kafka,然后从kafka取数据存储到HDFS的方法思路和完整步骤

    本文将详细介绍如何利用Flume采集日志数据,并将其发送到Kafka中,最后将这些数据从Kafka取出并存储到HDFS上。这一流程不仅适用于大规模的日志数据采集场景,还能帮助读者快速熟悉Flume、Kafka和HDFS等大数据组件的...

    flume采集日志信息简报

    Flume 采集日志信息简报 Flume 是一个功能强大且灵活的日志采集工具,它可以从各种数据源采集日志信息,并将其传输到多种目的地。Flume 的强大之处在于它的 Output 方式多样,可以将日志信息输出到文件、数据库、...

    flume日志采集

    ### Flume日志采集知识点详解 #### 一、Flume简介 Apache Flume是一款高可靠、高性能的日志采集系统,支持在日志系统中定制各类数据发送方(source)、数据通道(channel)以及数据接收方(sink)。Flume提供对数据...

    Flume采集Nginx日志到新版Hive.rar

    在大数据处理领域,Flume是一个广泛使用的数据采集工具,它能够高效、可靠地从各种数据源收集、聚合和传输大量数据。在这个场景中,我们利用Flume来从Nginx服务器收集日志,并将这些日志数据导入到新版的Hive数据...

    kafka+flume 实时采集oracle数据到hive中.docx

    基于Kafka+Flume实时采集Oracle数据到Hive中 一、Kafka获取Oracle日志实时数据 Kafka是一种分布式流媒体平台,能够实时地从Oracle数据库中提取日志信息。为了实现这一点,需要先安装ZooKeeper和Kafka,然后配置...

    基于Flume的分布式日志聚合系统的研究.pdf

    日志采集是大数据处理中的关键环节,Flume作为一种高效、可靠的数据传输工具,常用于大规模日志的收集。它支持多种数据源,如网络、文件等,并能将数据高效地传输到目标存储系统。Flume的特性包括容错性、可扩展性和...

    flume采集日志存入MySQL,支持分库分表,动态加载配置文件-flume-mysql.zip

    在本项目"flume-mysql.zip"中,它被配置用于从各种源(如服务器日志文件)收集数据,并将这些数据高效地存储到 MySQL 数据库中,同时支持分库分表策略,以实现更灵活的数据管理和优化的数据库性能。 首先,Flume 的...

    大数据技术应用(一) 应用Flume+HBase采集和存储日志数据

    1. **配置Flume**: 首先,我们需要配置Flume的源,指定日志数据的来源,如Web服务器的日志文件或者syslog。接着,设置通道类型,比如内存通道或文件通道,以确保数据的可靠传输。最后,配置Sink指向HBase,需要提供...

    Flume 构建高可用、可扩展的海量日志采集系统

    根据提供的文件信息,实际内容与标题及描述严重不符,但基于题目要求,我们将重点解析标题“Flume 构建高可用、可扩展的海量日志采集系统”以及描述“flume 大数据导入数据首选”所涉及的知识点。 ### Flume 构建高...

    用Flume采集多台机器上的多种日志并存储于HDFS

    ### 使用Flume采集多台机器上的多种日志并存储于HDFS 在大数据处理与分析领域,日志数据采集是一项非常重要的工作。Apache Flume作为一款高性能、可靠的服务级应用,用于收集、聚合和移动大量日志数据。本文将详细...

    《数据采集与预处理》教学教案—07Flume采集数据上传到集群.pdf

    本文档提供了关于Flume采集数据上传到集群的教学教案,旨在帮助学生熟悉Flume的相关基础知识,学会将采集的日志数据转存到HDFS和HBase中的方法。 一、Flume简介 Flume是一个高可靠、可扩展、灵活的数据采集系统,...

    Flume-ng在windows环境搭建并测试+log4j日志通过Flume输出到HDFS.docx

    Flume-ng 是一个高可用、可靠、分布式的日志聚合系统,可以实时地从各种数据源(如日志文件、网络 socket、数据库等)中收集数据,并将其传输到目标系统中,如 HDFS、HBase 等。在本文中,我们将介绍如何在 Windows ...

    大数据采集技术-Flume监控日志到HDFS.pptx

    可以查看Flume的日志文件来检查数据采集过程中的错误或异常。 8. **高级特性**:Flume还支持动态配置更新、数据分片、数据过滤和转换等功能,可以根据需求进行更复杂的配置。 通过以上步骤,我们可以实现Flume对...

    Flume采集MySQL数据所需jar包.zip

    在大数据处理领域,Apache Flume 是一款用于收集、聚合和移动大量日志数据的可靠工具。它被广泛应用于从各种源收集数据并将其传输到集中式存储系统,如Hadoop HDFS。在这个场景中,我们关注的是如何使用 Flume 从 ...

    flime安装+配置+测试+案例(采集日志至HDFS)

    在本文中,我们将深入探讨 Flume 的安装、配置、测试以及如何将其应用于实际案例,即从不同节点采集日志并存储到 HDFS。 首先,我们从安装 Flume 开始。Flume 的安装包括解压安装包,重命名 Flume 目录,配置 `...

    大数据实时日志采集框架Flume实战(视频+课件+代码+工具+讲义)

    Flume中配置HDFS文件生成大小及时间分区 Flume中配置Spooling Dir的使用 Flume中配置Spooling Dir的文件过滤 Flume中配置扇入架构的介绍 Flume中配置扇入架构的测试实现 Flume中配置扇出架构的实现 Flume中...

    【实战Apache-Flume采集DB数据到kafka】

    在本实战中,我们将探讨如何使用 Apache Flume 从数据库(DB)中采集数据并将其传输到 Apache Kafka,这是一种流行的实时数据流处理平台。Flume 的强大之处在于它的灵活性和可扩展性,而 Kafka 则提供了高效的消息...

    基于Spark Streaming + Kafka + Flume 实现的日志收集处理系统.zip

    在本系统中,Flume负责从各种源(如服务器日志文件、网络设备等)收集日志数据,然后将这些数据可靠地推送到Kafka队列。Flume的灵活性和可配置性使其能够适应多种日志源,确保数据的完整性和一致性。 4. **后端开发...

    Flume日志采集手册.docx

    ### Flume日志采集系统详解 #### 一、Flume简介 **1、基础描述** Flume是由Cloudera开发的一款开源工具,主要用于大规模的日志数据采集、聚合和传输。其设计之初就是为了处理大规模的数据流,能够高效地从各种...

Global site tag (gtag.js) - Google Analytics