文档首页/ MapReduce服务 MRS/ 最佳实践/ 数据分析/ 通过Flume采集指定目录日志系统文件至HDFS
更新时间:2024-11-12 GMT+08:00

通过Flume采集指定目录日志系统文件至HDFS

应用场景

Flume是一个分布式、可靠和高可用的海量日志聚合的系统。它能够将不同数据源的海量日志数据进行高效收集、聚合、移动,最后存储到一个中心化数据存储系统中。支持在系统中定制各类数据发送方,用于收集数据。同时,提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。

Flume分为客户端和服务端,两者都是FlumeAgent。服务端对应着FlumeServer实例,直接部署在集群内部。而客户端部署更灵活,可以部署在集群内部,也可以部署在集群外。它们之间没有必然联系,都可以独立工作,并且提供的功能是一样的。

Flume客户端需要单独安装,支持将数据直接导到集群中的HDFS和Kafka等组件上。

本案例中,通过MRS自定义集群中的Flume组件,自动采集指定节点日志目录下新产生的文件并存储到HDFS文件系统中。

方案架构

Flume-NG由多个Agent来组成,而每个Agent由Source、Channel、Sink三个模块组成,其中Source负责接收数据,Channel负责数据的传输,Sink则负责数据向下一端的发送。

图1 Flume-NG架构
表1 模块说明

名称

说明

Source

Source负责接收数据或通过特殊机制产生数据,并将数据批量放到一个或多个Channel。Source的类型有数据驱动和轮询两种。

典型的Source类型如下:

  • 和系统集成的Sources:Syslog、Netcat。
  • 自动生成事件的Sources:Exec、SEQ。
  • 用于Agent和Agent之间通信的IPC Sources:Avro。

Source必须至少和一个Channel关联。

Channel

Channel位于Source和Sink之间,用于缓存来自Source的数据,当Sink成功将数据发送到下一跳的Channel或最终目的地时,数据从Channel移除。

Channel提供的持久化水平与Channel的类型相关,有以下三类:

  • Memory Channel:非持久化。
  • File Channel:基于WAL(预写式日志Write-Ahead Logging)的持久化实现。
  • JDBC Channel:基于嵌入Database的持久化实现。

Channel支持事务,可提供较弱的顺序保证,可以和任何数量的Source和Sink工作。

Sink

Sink负责将数据传输到下一跳或最终目的,成功完成后将数据从Channel移除。

典型的Sink类型如下:

  • 存储数据到最终目的终端Sink,比如:HDFS、HBase。
  • 自动消耗的Sink,比如:Null Sink。
  • 用于Agent间通信的IPC sink:Avro。

Sink必须作用于一个确切的Channel。

Flume也可以配置成多个Source、Channel、Sink,如图2所示:

图2 Flume结构图

操作流程

本实践操作流程如下所示:

  1. 步骤1:创建MRS集群:创建一个包含有Flume组件的MRS集群。
  2. 步骤2:生成Flume配置文件:根据业务场景配置Flume服务端和客户端侧配置文件。
  3. 步骤3:安装Flume客户端:在MRS集群中下载并安装Flume客户端。
  4. 步骤4:查看日志采集结果:查看日志采集结果。

步骤1:创建MRS集群

  1. 创建并购买一个包含有Flume、HDFS组件的MRS集群,详情请参见购买自定义集群

    本文以购买的MRS 3.1.0版本的集群为例,集群未开启Kerberos认证。

  2. 集群购买成功后,登录集群的FusionInsight Manager界面,下载集群客户端并解压。

    由于Flume客户端需要单独安装,需要首先下载集群的客户端安装包到待安装Flume客户端的节点上并解压。

    1. 在FusionInsight Manager“主页”页签的集群名称后单击,单击“下载客户端”下载集群客户端。
    2. 在“下载集群客户端”弹窗中填写集群客户端下载信息。
      图3 下载集群客户端
      • “选择客户端类型”中选择“完整客户端”。
      • “选择平台类型”必须与待安装节点的架构匹配,以“x86_64”为例。
      • 勾选“仅保存到如下路径”,填写下载路径,本示例以“/tmp/FusionInsight-Client/”为例,需确保omm用户对该路径有操作权限。
    3. 客户端软件包下载完成后,以root用户登录集群的主OMS节点,复制安装包到指定节点。

      客户端软件包默认下载至集群的主OMS节点(可通过FusionInsight Manager的“主机”界面查看带有标识的节点),如需要在集群内其他节点上安装,执行以下命令将软件包传输至其他节点,否则本步骤可忽略。

      cd /tmp/FusionInsight-Client/

      scp -p FusionInsight_Cluster_1_Services_Client.tar 待安装Flume客户端节点的IP地址:/tmp

    4. root用户登录待安装Flume客户端的节点,进入客户端软件包所在目录后,执行以下命令解压软件包。

      tar -xvf FusionInsight_Cluster_1_Services_Client.tar

      tar -xvf FusionInsight_Cluster_1_Services_ClientConfig.tar

步骤2:生成Flume配置文件

  1. 登录FusionInsight Manager,选择“集群 > 服务 > Flume > 配置工具”。
  2. 配置并导出“properties.properties”文件。

    选择“Agent名”为“server”,分别选择“Avro Source”、“Memory Channel”和“HDFS Sink”模块,并连接。

    图4 生成Flume配置文件

    双击模块图标,配置对应参数,各模块配置参数如下(其他参数保持默认):

    类型

    配置参数

    描述

    配置示例

    Avro Source

    名称

    模块名称,可自定义。

    test_source_1

    bind

    待连接的Flume角色所在节点的IP地址,可在“集群 > 服务 > Flume > 实例”页面查看任一Flume角色实例的IP地址。

    192.168.10.192

    port

    连接端口,建议从21154开始配置。

    21154

    Memory Channel

    名称

    模块名称,可自定义。

    test_channel_1

    HDFS Sink

    名称

    模块名称,可自定义。

    test_sink_1

    hdfs.path

    日志文件写入HDFS的目录。

    hdfs://hacluster/flume/test

    hdfs.filePrefix

    写入HDFS后的文件名前缀。

    over_%{basename}

  3. 单击“导出”按钮,下载“properties.properties”文件到本地。
  4. 在FusionInsight Manager界面,单击“集群 > 服务 > Flume > 实例”,单击准备上传配置文件的节点行的“Flume”角色,进入“实例配置”页面。

    图5 上传配置文件

  5. 选择“上传文件”,上传“properties.properties”文件。

    单击“保存”,单击“确定”后等待配置完成。

  6. 选择“集群 > 服务 > Flume > 配置工具”

    选择“Agent名”为“client”,分别选择“SpoolDir Source”、“Memory Channel”和“Avro Sink”模块,并连接。

    图6 配置Flume

    双击模块图标,配置对应参数,各模块配置参数如下(其他参数请保持默认):

    类型

    配置参数

    描述

    配置示例

    SpoolDir Source

    名称

    模块名称,可自定义。

    test_source_1

    spoolDir

    需要采集日志的目录,该目录需要对flume运行用户具有读写权限,并放入文件进行验证。

    /var/log/Bigdata/audit/test

    Memory Channel

    名称

    模块名称,可自定义。

    test_channel_1

    HDFS Sink

    名称

    模块名称,可自定义。

    test_sink_1

    hostname

    待连接的Flume角色所在节点的IP地址。

    192.168.10.192

    port

    连接端口,建议从21154开始配置。

    21154

  7. 单击“导出”按钮,下载“properties.properties”文件到本地。
  8. 将“properties.properties”文件重命名为“client.properties.properties”,然后将该文件上传并覆盖到Flume客户端节点的“集群客户端安装包解压路径/Flume/FlumeClient/flume/conf”目录下。

步骤3:安装Flume客户端

  1. root用户登录待安装Flume客户端所在节点。
  2. 进入客户端安装包解压路径,例如客户端安装包上传至“/tmp”目录下并解压。
  3. 执行以下命令安装Flume客户端,其中“/opt/FlumeClient”为自定义的Flume客户端安装路径。

    cd /tmp/FusionInsight-Client/FusionInsight_Cluster_1_Services_ClientConfig/Flume/FlumeClient

    ./install.sh -d /opt/FlumeClient -c flume/conf/client.properties.properties

    CST ... [flume-client install]: install flume client successfully.

步骤4:查看日志采集结果

  1. Flume客户端安装成功后,向日志采集目录写入新的日志文件,验证日志是否传输成功。

    例如在“/var/log/Bigdata/audit/test”目录下新建几个日志文件。

    cd /var/log/Bigdata/audit/test

    vi log1.txt

    Test log file 1!!!

    vi log2.txt

    Test log file 2!!!

  2. 写入日志文件后,执行ll命令查看文件列表,日志文件自动增加了后缀“.COMPLETED”,表示该文件已被采集。

    -rw-------. 1 root root      75 Jun  9 19:59 log1.txt.COMPLETED
    -rw-------. 1 root root      75 Jun  9 19:59 log2.txt.COMPLETED

  3. 登录FusionInsight Manager,选择“集群 > 服务 > HDFS”,单击“NameNode(主)”对应的链接,打开HDFS WebUI界面。

    图7 HDFS服务概述

  4. 选择“Utilities > Browse the file system”,观察HDFS上“/flume/test”目录下是否有产生数据。

    图8 查看HDFS文件

    如上所示,文件目录下产生了收集的日志文件,文件名统一增加了前缀“over_”。

    下载日志文件“over_log1.txt”并查看内容,与写入的日志文件“log1.txt”内容一致。

    Test log file 1!!!