
# 通过Flume采集指定目录日志系统文件至HDFS
#### 应用场景
Flume是一个分布式、可靠和高可用的海量日志聚合的系统。它能够将不同数据源的海量日志数据进行高效收集、聚合、移动，最后存储到一个中心化数据存储系统中。支持在系统中定制各类数据发送方，用于收集数据。同时，提供对数据进行简单处理，并写到各种数据接受方（可定制）的能力。
Flume分为客户端和服务端，两者都是FlumeAgent。服务端对应着FlumeServer实例，直接部署在集群内部。而客户端部署更灵活，可以部署在集群内部，也可以部署在集群外。它们之间没有必然联系，都可以独立工作，并且提供的功能是一样的。
Flume客户端需要单独安装，支持将数据直接导到集群中的HDFS和Kafka等组件上。
本案例中，通过MRS自定义集群中的Flume组件，自动采集指定节点日志目录下新产生的文件并存储到HDFS文件系统中。
#### 方案架构
Flume-NG由多个Agent来组成，而每个Agent由Source、Channel、Sink三个模块组成，其中Source负责接收数据，Channel负责数据的传输，Sink则负责数据向下一端的发送。
图1Flume-NG架构   
![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000001326930797.png "点击放大")
表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]所示：
图2Flume结构图   
![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000001276090980.png "点击放大")
#### 操作流程
本实践操作流程如下所示：
1. [步骤1：创建MRS集群]：创建一个包含有Flume组件的MRS集群。
2. [步骤2：生成Flume配置文件]：根据业务场景配置Flume服务端和客户端侧配置文件。
3. [步骤3：安装Flume客户端]：在MRS集群中下载并安装Flume客户端。
4. [步骤4：查看日志采集结果]：查看日志采集结果。
 
 #### 步骤1：创建MRS集群
1. 创建并购买一个包含有Flume、HDFS组件的MRS集群，详情请参见[购买自定义集群](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0513.html)。
   
   ![](https://support.huaweicloud.com/bestpractice-mrs/public_sys-resources/note_3.0-zh-cn.png)
   本文以购买的MRS 3.1.0版本的集群为例，集群未开启Kerberos认证。
   
   
2. 集群购买成功后，登录集群的FusionInsight Manager界面，下载集群客户端并解压。 
   由于Flume客户端需要单独安装，需要首先下载集群的客户端安装包到待安装Flume客户端的节点上并解压。
   1. 在FusionInsight Manager"主页"页签的集群名称后单击![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000001326936233.png)，单击"下载客户端"下载集群客户端。
   
   2. 在"下载集群客户端"弹窗中填写集群客户端下载信息。
      图3下载集群客户端   
      ![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000001327135341.png)
      - "选择客户端类型"中选择"完整客户端"。
      
      - "选择平台类型"必须与待安装节点的架构匹配，以"x86_64"为例。
      
      - 勾选"仅保存到如下路径"，填写下载路径，本示例以"/tmp/FusionInsight-Client/"为例，需确保**omm**用户对该路径有操作权限。
       
   
   3. 客户端软件包下载完成后，以**root** 用户登录集群的主OMS节点，复制安装包到指定节点。
      客户端软件包默认下载至集群的主OMS节点（可通过FusionInsight Manager的"主机"界面查看带有![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000001276576406.png)标识的节点），如需要在集群内其他节点上安装，执行以下命令将软件包传输至其他节点，否则本步骤可忽略。
      **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配置文件   
   ![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000001275888986.png)
   双击模块图标，配置对应参数，各模块配置参数如下（其他参数保持默认）：
   
   | 类型             | 配置参数            | 描述                                                                    | 配置示例                        |
   |:---|:---|:---|:---|
   | Avro Source    | 名称              | 模块名称，可自定义。                                                            | test_source_1               |
   | Avro Source    | bind            | 待连接的Flume角色所在节点的IP地址，可在"集群 \> 服务 \> Flume \> 实例"页面查看任一Flume角色实例的IP地址。 | 192.168.10.192              |
   | Avro Source    | port            | 连接端口，建议从21154开始配置。                                                    | 21154                       |
   | Memory Channel | 名称              | 模块名称，可自定义。                                                            | test_channel_1              |
   | HDFS Sink      | 名称              | 模块名称，可自定义。                                                            | test_sink_1                 |
   | HDFS Sink      | hdfs.path       | 日志文件写入HDFS的目录。                                                        | hdfs://hacluster/flume/test |
   | HDFS Sink      | hdfs.filePrefix | 写入HDFS后的文件名前缀。                                                        | over_%{basename}            |
      
   
   
3. 单击"导出"按钮，下载"properties.properties"文件到本地。
4. 在FusionInsight Manager界面，单击"集群 \> 服务 \> Flume \> 实例"，单击准备上传配置文件的节点行的"Flume"角色，进入"实例配置"页面。 
   图5上传配置文件   
   ![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000001276049358.png "点击放大")
   
   
5. 选择"上传文件"，上传"properties.properties"文件。 
   单击"保存"，单击"确定"后等待配置完成。
   
   
6. 选择"集群 \> 服务 \> Flume \> 配置工具" 
   选择"Agent名"为"client"，分别选择"SpoolDir Source"、"Memory Channel"和"Avro Sink"模块，并连接。
   图6配置Flume   
   ![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000001276369938.png)
   双击模块图标，配置对应参数，各模块配置参数如下（其他参数请保持默认）：
   
   | 类型              | 配置参数     | 描述                                         | 配置示例                        |
   |:---|:---|:---|:---|
   | SpoolDir Source | 名称       | 模块名称，可自定义。                                 | test_source_1               |
   | SpoolDir Source | spoolDir | 需要采集日志的目录，该目录需要对flume运行用户具有读写权限，并放入文件进行验证。 | /var/log/Bigdata/audit/test |
   | Memory Channel  | 名称       | 模块名称，可自定义。                                 | test_channel_1              |
   | HDFS Sink       | 名称       | 模块名称，可自定义。                                 | test_sink_1                 |
   | HDFS Sink       | hostname | 待连接的Flume角色所在节点的IP地址。                      | 192.168.10.192              |
   | HDFS Sink       | 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界面。 
   图7HDFS服务概述   
   ![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000001327136373.png "点击放大")
   
   
4. 选择"Utilities \> Browse the file system"，观察HDFS上"/flume/test"目录下是否有产生数据。 
   图8查看HDFS文件   
   ![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000001326976417.png "点击放大")
   如上所示，文件目录下产生了收集的日志文件，文件名统一增加了前缀"over_"。
   下载日志文件"over_log1.txt"并查看内容，与写入的日志文件"log1.txt"内容一致。
   ```
   Test log file 1!!!
   ```
   
   
 
