Flume 日志收集系统 Spooldir-Source HDFS-sink

简介: 日志即log,记录发生的事件。以Nginx为例,有error_log和access_log 2个日志。access_log是访问日志,每条访问记录会产生几百字节的数据,随着访问量增加,日志文件会越来越大,必须定期清理日志。

日志即log,记录发生的事件。以Nginx为例,有error_log和access_log 2个日志。access_log是访问日志,每条访问记录会产生几百字节的数据,随着访问量增加,日志文件会越来越大,必须定期清理日志。
现在数据越来越重要,因此不能简单丢弃,要保存这些数据做更多数据分析。可以将数据保存到HDFS系统上,Flume是一个数据搬运软件,它扩展了很多功能,支持很多数据源。不编写代码利用Flume就可以搭建一个将log保存到HDFS的可靠系统。

一、Flume 组件

  • Source 采集信息源
  • Channel 消息缓存队列
  • Sink 从缓存队列中拉取消息,并处理。

消息 Record,Source封装Event(事件)成为Record对象,并保存到Channel中,Sink拉取Record并保存到目标系统中。

Sink处理完成之后,会向Channel发送确认消息,提供消息处理的可靠性。

因为Flume是一个大数据组件,在刚接触的时候犯了思维惯性错误,以为Source、Channel、Sink是部署在不同主机上的。如图一个Agent包括了三个组件,运行在一台主机上,准确的说一个JVM进程。常见的Source是agent可监听的文件夹、文件,Sink是hdfs。

二、配置文件

LogAgent.sources = mysource
LogAgent.channels = mychannel
LogAgent.sinks = mysink
LogAgent.sources.mysource.type = spooldir
LogAgent.sources.mysource.channels = mychannel
LogAgent.sources.mysource.spoolDir =/Users/wangsen/hadoop/apache-flume-1.7.0-bin/conf_copy
LogAgent.sinks.mysink.channel = mychannel
LogAgent.sinks.mysink.type = hdfs
LogAgent.sinks.mysink.hdfs.path = hdfs://namenode:9000/data/logs2/
LogAgent.sinks.mysink.hdfs.rollInterval = 30
LogAgent.sinks.mysink.hdfs.batchSize = 10000
LogAgent.sinks.mysink.hdfs.rollSize = 0
LogAgent.sinks.mysink.hdfs.rollCount = 10000
LogAgent.sinks.mysink.hdfs.fileType = DataStream
LogAgent.sinks.mysink.hdfs.useLocalTimeStamp = true
LogAgent.channels.mychannel.type = memory
LogAgent.channels.mychannel.capacity = 10000
LogAgent.channels.mychannel.transactionCapacity = 10000

运行flume
bin/flume-ng agent --conf conf --conf-file conf/logagent.properties --name LogAgent -Dflume.root.logger=DEBUG,console

三、注意事项

1. sinks.mysink.hdfs.batchSize 和channels.mychannel.transactionCapacity

process failed
org.apache.flume.ChannelException: Take list for MemoryTransaction, capacity 100 full, consider committing more frequently, increasing capacity, or in creasing thread count

如果sink.batchSize 大于 transactionCapacity:channel的处理能力被占满,得不到sink的确认消息,因为没有达到sink批处理数。

2.spooldir 监听目录中的文件


spooldir监听文件目录,当出现新文件时,将新文件转化成事件。默认deseriallizer的值是LINE,文件的每行封装成一个Event。因此,在sink端也是按代表一行的Record进行处理。

3.hdfs sink 配置

hdfs.fileType = DataStream ##保存文件时不用压缩
hdfs.rollCount = 10000 ##每个文件记录10000条Record,超过10000条分割文件
hdfs.rollSize = 0 ## 不以文件的大小分割
hdfs.batchSize = 10000 ## 批处理数,没达到时保存在.tmp文件中
hdfs.rollInterval = 30 ##批处理超时时间,将tmp文件写入到正式文件,并提交确认。

四、实验结果

源文件夹:

drwxr-xr-x 2 wangsen staff 64 8 23 09:50 .flumespool
-rw-r--r-- 1 wangsen staff 1661 9 26 2016 flume-conf.properties.template.COMPLETED
-rw-r--r-- 1 wangsen staff 1455 9 26 2016 flume-env.ps1.template.COMPLETED
-rw-r--r-- 1 wangsen staff 1565 9 26 2016 flume-env.sh.template.COMPLETED
-rw-r--r-- 1 wangsen staff 3107 9 26 2016 log4j.properties.COMPLETED
-rw-r--r--@ 1 wangsen staff 778 8 23 09:49 logagent.properties.COMPLETED

处理成功数据,添加后缀.COMPLETED,此后缀可以在.properties文件中设置。
HDFS:

-rw-r--r-- 3 root supergroup 8567 2018-08-23 09:50 /data/logs2/FlumeData.1534989021404

生成一个文件,没有超过10000行就保存在一个文件。文件名称可以在.properties文件中配置。

总结

本文是Flume基本实验,TailDir是一种更强大的目录源Source,支持文件级的监听。通过设置Decoder可以文件作为事件(不以Line为Event),实现文件夹的同步。通过级联方式,实现多个主机之间高可靠文件/文件夹同步。

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
WGLOG日志管理系统是怎么收集日志的
WGLOG通过部署Agent客户端采集日志,Agent持续收集指定日志文件并上报Server,Server负责展示与分析。Agent与Server需保持相同版本。官网下载地址:www.wgstart.com
|
Prometheus 监控 Cloud Native
基于docker搭建监控系统&日志收集
Prometheus 是一款由 SoundCloud 开发的开源监控报警系统及时序数据库(TSDB),支持多维数据模型和灵活查询语言,适用于大规模集群监控。它通过 HTTP 拉取数据,支持服务发现、多种图表展示(如 Grafana),并可结合 Loki 实现日志聚合。本文介绍其架构、部署及与 Docker 集成的监控方案。
1063 122
基于docker搭建监控系统&日志收集
|
监控 API 开发工具
HarmonyOS Next的HiLog日志系统完全指南:从入门到精通
本文深入解析HarmonyOS Next的HiLog日志系统,涵盖日志级别、核心API、隐私保护与高级回调功能,助你从入门到精通掌握这一重要开发工具。
1021 1
|
12月前
|
数据采集 缓存 大数据
【赵渝强老师】大数据日志采集引擎Flume
Apache Flume 是一个分布式、可靠的数据采集系统,支持从多种数据源收集日志信息,并传输至指定目的地。其核心架构由Source、Channel、Sink三组件构成,通过Event封装数据,保障高效与可靠传输。
608 1
|
存储 前端开发 数据可视化
Grafana Loki,轻量级日志系统
本文介绍了基于Grafana、Loki和Alloy构建的轻量级日志系统。Loki是一个由Grafana Labs开发的日志聚合系统,具备高可用性和多租户支持,专注于日志而非指标,通过标签索引而非内容索引实现高效存储。Alloy则是用于收集和转发日志至Loki的强大工具。文章详细描述了系统的架构、组件及其工作流程,并提供了快速搭建指南,包括准备步骤、部署命令及验证方法。此外,还展示了如何使用Grafana查看日志,以及一些基本的LogQL查询示例。最后,作者探讨了Loki架构的独特之处,提出了“巨型单体模块化”的概念,即一个应用既可单体部署也可分布式部署,整体协同实现全部功能。
6816 189
Grafana Loki,轻量级日志系统
|
Ubuntu
在Ubuntu系统上设置syslog日志轮替与大小限制
请注意,在修改任何系统级别配置之前,请务必备份相应得原始档案并理解每项变更可能带来得影响。
1333 2
|
存储 消息中间件 缓存
MiniMax GenAI 可观测性分析 :基于阿里云 SelectDB 构建 PB 级别日志系统
基于阿里云SelectDB,MiniMax构建了覆盖国内及海外业务的日志可观测中台,总体数据规模超过数PB,日均新增日志写入量达数百TB。系统在P95分位查询场景下的响应时间小于3秒,峰值时刻实现了超过10GB/s的读写吞吐。通过存算分离、高压缩比算法和单副本热缓存等技术手段,MiniMax在优化性能的同时显著降低了建设成本,计算资源用量降低40%,热数据存储用量降低50%,为未来业务的高速发展和技术演进奠定了坚实基础。
839 1
MiniMax GenAI 可观测性分析 :基于阿里云 SelectDB 构建 PB 级别日志系统
WGLOG日志管理系统可以采集网络设备的日志吗
WGLOG日志审计系统提供开放接口,支持外部获取日志内容后发送至该接口,实现日志的存储与分析。详情请访问:https://www.wgstart.com/wglog/docs9.html
|
存储 JSON Go
PHP 日志系统的最佳搭档:一个 Go 写的远程日志收集服务
为了不再 SSH 上去翻日志,我写了个 Go 小脚本,用来接收远程日志。PHP 负责记录日志,Go 负责存储和展示,按天存储、支持 API 访问、可远程管理,终于能第一时间知道项目炸了。
472 10
|
存储 监控 安全
5款 Syslog集中系统日志常用工具对比推荐
集中管理Syslog有助于持续监控网络中的恶意活动,确保日志的搜索和分析更为便捷。常用工具包括Rsyslog、Syslog-ng、Logstash和Fluentd,它们各有优劣。Rsyslog通过多种协议确保日志传输的安全性;Syslog-ng支持高效收集和转发日志;Logstash能解析多源日志并索引;Fluentd将日志转换为JSON格式。卓豪EventLog Analyzer则提供一体化的日志管理,支持日志分析、报表生成、用户行为分析及实时告警,是全面的日志管理解决方案。
698 0

热门文章

最新文章