1. 首页 > Hadoop教程 > 正文

大数据教程FG048-Flume日志采集部署实战

内容简介:本文详细介绍Flume日志采集的部署方法与生产实战应用。风哥教程参考Flume官方文档Installation、Configuration等内容,涵盖Flume安装部署、配置文件编写、服务管理、日志采集配置等核心功能,结合生产环境实际案例,帮助读者掌握Flume日志采集部署的实战技能。

目录大纲

Part01-基础概念与理论知识
  1.1 Flume架构概述
  1.2 部署模式分类
  1.3 核心组件介绍
Part02-生产环境规划与建议
  2.1 部署架构设计
  2.2 硬件资源规划
  2.3 网络配置建议
Part03-生产环境项目实施方案
  3.1 Flume安装部署实战
  3.2 配置文件编写实战
  3.3 服务管理实战
Part04-生产案例与实战讲解
  4.1 Web服务器日志采集案例
  4.2 应用服务器日志采集案例
  4.3 分布式日志采集案例
Part05-风哥经验总结与分享
  5.1 部署最佳实践
  5.2 常见问题与解决方案
  5.3 生产环境注意事项

Part01-基础概念与理论知识

1.1 Flume架构概述

Flume是Apache顶级项目,专为大规模日志数据采集设计。更多视频教程www.fgedu.net.cn

Flume核心特性:

1. 分布式、高可靠
2. 支持多级Agent级联
3. 支持故障转移和负载均衡
4. 可扩展的插件机制
5. 实时数据采集

Flume架构组件:

1. Agent:JVM进程,承载Source、Channel、Sink
2. Source:数据源,接收数据
3. Channel:数据通道,暂存数据
4. Sink:数据目的地,发送数据
5. Event:数据单元,包含header和body

1.2 部署模式分类

Flume支持多种部署模式:学习交流加群风哥微信: itpux-com

— 部署模式
— 1. 单Agent模式
— 适用场景: 单服务器日志采集
— 架构: Source -> Channel -> Sink

— 2. 多级Agent模式
— 适用场景: 分布式环境
— 架构: Agent1 -> Agent2 -> HDFS

— 3. 扇入模式
— 适用场景: 多源数据汇总
— 架构: 多Source -> 单Channel -> Sink

— 4. 扇出模式
— 适用场景: 数据分发
— 架构: Source -> 多Channel -> 多Sink

1.3 核心组件介绍

Flume三大核心组件:

— Source组件
— Avro Source: 接收Avro RPC数据
— Netcat Source: 监听TCP端口
— Exec Source: 执行命令获取数据
— Spooling Directory Source: 监控目录文件
— Taildir Source: 监控文件尾部
— Kafka Source: 从Kafka消费数据

— Channel组件
— Memory Channel: 内存通道,高性能
— File Channel: 文件通道,高可靠
— Kafka Channel: Kafka作为通道

— Sink组件
— HDFS Sink: 写入HDFS
— Avro Sink: 发送到Avro Source
— Kafka Sink: 写入Kafka
— Logger Sink: 日志输出
— File Roll Sink: 写入本地文件

Part02-生产环境规划与建议

2.1 部署架构设计

部署架构需要根据数据量和可靠性要求设计。风哥提示:合理的架构设计是Flume稳定运行的基础。

— 架构设计原则
— 1. 单Agent单职责
— 2. 关键节点冗余
— 3. 数据传输安全
— 4. 监控告警到位

— 推荐架构
— 小规模环境: 单Agent
— 中规模环境: 多级Agent
— 大规模环境: 分布式集群

— 高可用架构
— 使用File Channel
— 配置Sink故障转移
— 部署多个Agent节点

2.2 硬件资源规划

硬件资源规划需要考虑数据量和处理能力:更多学习教程公众号风哥教程itpux_com

— 硬件要求
— CPU: 4核以上
— 内存: 8GB以上
— 磁盘: 500GB以上(File Channel)
— 网络: 千兆以上

— 内存分配
— JVM堆内存: 2-4GB
— 预留系统内存: 4GB以上

— 存储规划
— File Channel数据目录: 独立磁盘
— 日志目录: 独立分区
— 临时文件目录: 足够空间

2.3 网络配置建议

网络配置影响Flume数据传输效率:

— 网络配置
— 1. 带宽要求
— 小规模: 千兆网络
— 大规模: 万兆网络

— 2. 网络延迟
— 控制在10ms以内
— 避免网络拥塞

— 3. 防火墙配置
— 开放必要端口
— Avro Source: 41414
— Netcat Source: 44444

— 4. 网络拓扑
— 合理规划网络拓扑
— 避免网络瓶颈

Part03-生产环境项目实施方案

3.1 Flume安装部署实战

Flume安装部署是基础操作。from bigdata视频:www.itpux.com

— 下载Flume
wget https://downloads.apache.org/flume/1.11.0/apache-flume-1.11.0-bin.tar.gz

— 解压安装
mkdir -p /bigdata/app
tar -zxvf apache-flume-1.11.0-bin.tar.gz -C /bigdata/app/
ln -s /bigdata/app/apache-flume-1.11.0-bin /bigdata/app/flume

— 配置环境变量
echo “export FLUME_HOME=/bigdata/app/flume” >> /etc/profile
echo “export PATH=\$PATH:\$FLUME_HOME/bin” >> /etc/profile
source /etc/profile

— 验证安装
flume-ng version

# 安装过程
[root@fgedu01 ~]# wget https://downloads.apache.org/flume/1.11.0/apache-flume-1.11.0-bin.tar.gz
–2024-01-19 10:00:00– https://downloads.apache.org/flume/1.11.0/apache-flume-1.11.0-bin.tar.gz
Resolving downloads.apache.org (downloads.apache.org)… 88.99.95.219
Connecting to downloads.apache.org (downloads.apache.org)|88.99.95.219|:443… connected.
HTTP request sent, awaiting response… 200 OK
Length: 165432123 (158M) [application/x-gzip]
Saving to: ‘apache-flume-1.11.0-bin.tar.gz’

100%[======================================>] 165,432,123 10.2MB/s in 15s

2024-01-19 10:00:15 (10.4 MB/s) – ‘apache-flume-1.11.0-bin.tar.gz’ saved [165432123/165432123]

# 验证安装
[root@fgedu01 ~]# flume-ng version
Flume 1.11.0
Source code repository: https://git-wip-us.apache.org/repos/asf/flume.git
Revision: 5579e28981dd310a88f6a151b7008f8011b1514f
Compiled by dkakure on Fri Mar 17 21:45:58 UTC 2023
From source with checksum a96c6d895979432b0aa64a0b398bf144

3.2 配置文件编写实战

配置文件是Flume部署的核心:

— 配置文件结构
— /bigdata/app/flume/conf/flume-env.sh

# 编辑环境配置
cat > /bigdata/app/flume/conf/flume-env.sh << 'EOF' export JAVA_HOME=/bigdata/app/jdk export JAVA_OPTS="-Xms2048m -Xmx4096m -XX:+UseG1GC" export FLUME_CLASSPATH=/bigdata/app/flume/lib EOF -- 编写Agent配置 -- /bigdata/app/flume/conf/web-log.conf cat > /bigdata/app/flume/conf/web-log.conf << 'EOF' # 定义Agent组件 agent.sources = r1 agent.channels = c1 agent.sinks = k1 # 配置Source agent.sources.r1.type = exec agent.sources.r1.command = tail -F /var/log/nginx/access.log agent.sources.r1.shell = /bin/bash -c # 配置Channel agent.channels.c1.type = file agent.channels.c1.checkpointDir = /data/flume/checkpoint agent.channels.c1.dataDirs = /data/flume/data agent.channels.c1.capacity = 1000000 # 配置Sink agent.sinks.k1.type = hdfs agent.sinks.k1.hdfs.path = hdfs://fgedu01:8020/data/logs/web/%Y%m%d agent.sinks.k1.hdfs.fileType = DataStream agent.sinks.k1.hdfs.writeFormat = Text agent.sinks.k1.hdfs.rollSize = 134217728 agent.sinks.k1.hdfs.rollInterval = 3600 agent.sinks.k1.hdfs.rollCount = 0 agent.sinks.k1.hdfs.compress = true agent.sinks.k1.hdfs.compressionCodec = org.apache.hadoop.io.compress.SnappyCodec # 绑定组件 agent.sources.r1.channels = c1 agent.sinks.k1.channel = c1 EOF

3.3 服务管理实战

服务管理确保Flume稳定运行:

— 创建数据目录
mkdir -p /data/flume/checkpoint /data/flume/data
chown -R flume:flume /data/flume

— 启动Flume Agent
nohup flume-ng agent \
-n agent \
-c /bigdata/app/flume/conf \
-f /bigdata/app/flume/conf/web-log.conf \
-Dflume.root.logger=INFO,LOGFILE \
> /bigdata/logs/flume-web.log 2>&1 &

— 查看进程
ps -ef | grep flume

— 查看日志
tail -f /bigdata/logs/flume-web.log

— 停止Flume
kill $(ps -ef | grep flume | grep -v grep | awk ‘{print $2}’)

# 启动Flume
[root@fgedu01 ~]# nohup flume-ng agent \
> -n agent \
> -c /bigdata/app/flume/conf \
> -f /bigdata/app/flume/conf/web-log.conf \
> -Dflume.root.logger=INFO,LOGFILE \
> > /bigdata/logs/flume-web.log 2>&1 &
[1] 12345

# 查看进程
[root@fgedu01 ~]# ps -ef | grep flume
flume 12345 1 0 10:05 ? 00:00:05 /bigdata/app/jdk/bin/java -Xms2048m -Xmx4096m -XX:+UseG1GC

# 查看日志
[root@fgedu01 ~]# tail -f /bigdata/logs/flume-web.log
2024-01-19 10:05:00 INFO node.Application: Starting Channel c1
2024-01-19 10:05:00 INFO node.Application: Starting Sink k1
2024-01-19 10:05:00 INFO node.Application: Starting Source r1
2024-01-19 10:05:00 INFO source.ExecSource: Exec source starting with command: tail -F /var/log/nginx/access.log
2024-01-19 10:05:01 INFO hdfs.HDFSSink: HDFS sink k1 started

Part04-生产案例与实战讲解

4.1 Web服务器日志采集案例

本案例演示Web服务器日志采集部署。更多视频教程www.fgedu.net.cn

#!/bin/bash
# web_log_deploy.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn

echo “=== Web服务器日志采集部署 ===”
echo “Date: $(date)”

# 创建Flume配置文件
cat > /bigdata/app/flume/conf/web-log.conf << 'EOF' agent.sources = r1 agent.channels = c1 agent.sinks = k1 agent.sources.r1.type = exec agent.sources.r1.command = tail -F /var/log/nginx/access.log agent.sources.r1.shell = /bin/bash -c agent.channels.c1.type = file agent.channels.c1.checkpointDir = /data/flume/checkpoint agent.channels.c1.dataDirs = /data/flume/data agent.channels.c1.capacity = 1000000 agent.sinks.k1.type = hdfs agent.sinks.k1.hdfs.path = hdfs://fgedu01:8020/data/logs/web/%Y%m%d agent.sinks.k1.hdfs.fileType = DataStream agent.sinks.k1.hdfs.writeFormat = Text agent.sinks.k1.hdfs.rollSize = 134217728 agent.sinks.k1.hdfs.rollInterval = 3600 agent.sinks.k1.hdfs.compress = true agent.sinks.k1.hdfs.compressionCodec = org.apache.hadoop.io.compress.SnappyCodec agent.sources.r1.channels = c1 agent.sinks.k1.channel = c1 EOF # 创建必要目录 mkdir -p /data/flume/checkpoint /data/flume/data chown -R flume:flume /data/flume # 启动Flume Agent echo "Starting Flume Agent..." nohup flume-ng agent \ -n agent \ -c /bigdata/app/flume/conf \ -f /bigdata/app/flume/conf/web-log.conf \ -Dflume.root.logger=INFO,LOGFILE \ > /bigdata/logs/flume-web.log 2>&1 &

# 验证部署
sleep 5
echo “Verifying deployment…”
ps -ef | grep flume | grep -v grep

# 查看HDFS目录
echo “Checking HDFS directory…”
hdfs dfs -ls -d /data/logs/web/$(date +%Y%m%d)

echo “=== 部署完成 ===”

=== Web服务器日志采集部署 ===
Date: Fri Jan 19 10:10:00 CST 2024

# 启动Flume
Starting Flume Agent…

# 验证部署
flume 12345 1 0 10:10 ? 00:00:01 /bigdata/app/jdk/bin/java -Xms2048m -Xmx4096m -XX:+UseG1GC

# 检查HDFS目录
Found 1 items
drwxr-xr-x – flume supergroup 0 2024-01-19 10:10 /data/logs/web/20240119

=== 部署完成 ===

4.2 应用服务器日志采集案例

应用服务器日志采集案例演示Java应用日志采集。学习交流加群风哥微信: itpux-com

— 应用服务器日志采集配置

cat > /bigdata/app/flume/conf/app-log.conf << 'EOF' agent.sources = r1 agent.channels = c1 agent.sinks = k1 agent.sources.r1.type = spooldir agent.sources.r1.spoolDir = /data/logs/fgedu_app agent.sources.r1.fileSuffix = .COMPLETED agent.sources.r1.deletePolicy = never agent.sources.r1.trackerDir = /data/flume/tracker agent.sources.r1.ignorePattern = ^\. agent.channels.c1.type = file agent.channels.c1.checkpointDir = /data/flume/checkpoint agent.channels.c1.dataDirs = /data/flume/data agent.sinks.k1.type = hdfs agent.sinks.k1.hdfs.path = hdfs://fgedu01:8020/data/logs/app/%Y%m%d agent.sinks.k1.hdfs.fileType = DataStream agent.sinks.k1.hdfs.writeFormat = Text agent.sinks.k1.hdfs.rollSize = 134217728 agent.sinks.k1.hdfs.rollInterval = 3600 agent.sources.r1.channels = c1 agent.sinks.k1.channel = c1 EOF -- 启动Agent nohup flume-ng agent \ -n agent \ -c /bigdata/app/flume/conf \ -f /bigdata/app/flume/conf/app-log.conf \ -Dflume.root.logger=INFO,LOGFILE \ > /bigdata/logs/flume-app.log 2>&1 &

4.3 分布式日志采集案例

分布式日志采集案例演示多级Agent部署。风哥提示:多级架构可以提高系统的可靠性和扩展性。

— 第一级Agent配置(应用服务器)

cat > /bigdata/app/flume/conf/collector.conf << 'EOF' agent.sources = r1 agent.channels = c1 agent.sinks = k1 agent.sources.r1.type = exec agent.sources.r1.command = tail -F /var/log/app.log agent.sources.r1.shell = /bin/bash -c agent.channels.c1.type = memory agent.channels.c1.capacity = 10000 agent.sinks.k1.type = avro agent.sinks.k1.hostname = fgedu-aggregator agent.sinks.k1.port = 41414 agent.sinks.k1.batch-size = 1000 agent.sources.r1.channels = c1 agent.sinks.k1.channel = c1 EOF -- 第二级Agent配置(聚合服务器) cat > /bigdata/app/flume/conf/aggregator.conf << 'EOF' agent.sources = r1 agent.channels = c1 agent.sinks = k1 agent.sources.r1.type = avro agent.sources.r1.bind = 0.0.0.0 agent.sources.r1.port = 41414 agent.sources.r1.threads = 20 agent.channels.c1.type = file agent.channels.c1.capacity = 1000000 agent.sinks.k1.type = hdfs agent.sinks.k1.hdfs.path = hdfs://fgedu01:8020/data/logs/aggregated/%Y%m%d agent.sinks.k1.hdfs.fileType = DataStream agent.sinks.k1.hdfs.writeFormat = Text agent.sinks.k1.hdfs.rollSize = 134217728 agent.sources.r1.channels = c1 agent.sinks.k1.channel = c1 EOF -- 启动聚合服务器Agent flume-ng agent -n agent -c /bigdata/app/flume/conf -f /bigdata/app/flume/conf/aggregator.conf & -- 启动采集服务器Agent flume-ng agent -n agent -c /bigdata/app/flume/conf -f /bigdata/app/flume/conf/collector.conf &

Part05-风哥经验总结与分享

5.1 部署最佳实践

风哥在生产环境中的Flume部署经验总结:from bigdata视频:www.itpux.com

1. 架构设计:

根据数据量选择合适的部署模式

2. 配置优化:

合理配置Channel和Sink参数

3. 监控管理:

建立完善的监控和告警体系

5.2 常见问题与解决方案

问题1:Agent启动失败

解决方案:检查配置文件语法,查看日志错误信息。

— 检查配置文件
flume-ng agent -n agent -c /bigdata/app/flume/conf -f /bigdata/app/flume/conf/web-log.conf -Dflume.root.logger=DEBUG,console

问题2:数据丢失

解决方案:使用File Channel,配置合适的容量。学习交流加群风哥QQ113257174

5.3 生产环境注意事项

1. 资源监控:监控Agent内存和CPU使用。

2. 日志管理:定期清理Flume运行日志。

3. 配置管理:使用版本控制管理配置文件。

风哥提示:Flume部署是日志采集的基础。在生产环境中,要选择合适的部署架构,优化配置参数,建立完善的监控和告警机制,确保日志采集的稳定性和可靠性。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息