文章采集程序(需求数据采集的需求广义上来说分为两大部分(组图))
优采云 发布时间: 2022-04-10 04:20文章采集程序(需求数据采集的需求广义上来说分为两大部分(组图))
需要
数据采集 需求大致分为两部分。
1)是用户对页面采集的访问行为,具体开发工作:
开发页面嵌入js,采集用户访问行为后台接受页面js请求记录日志
这部分工作也可以归类为“数据源”,其开发工作通常由web开发团队负责
2)是从web服务器到HDFS的日志聚合,是数据分析系统的数据采集,这部分工作由数据分析平台建设团队负责,有实现具体技术的方法有很多:
技术选型
在点击流日志分析的场景下,data采集部分的可靠性和容错性通常不是很严格,所以使用通用的flume log采集框架完全可以满足要求。
本项目使用flume实现日志采集。
Flume日志采集系统搭建1.数据来源信息
本项目分析的数据使用nginx服务器生成的流量日志存储在各个nginx服务器上,如:
/var/log/httpd/access_log.2015-11-10-13-00.log
/var/log/httpd/access_log.2015-11-10-14-00.log
/var/log/httpd/access_log.2015-11-10-15-00.log
/var/log/httpd/access_log.2015-11-10-16-00.log
2.示例数据内容
数据的具体内容在采集这个阶段不需要太在意
58.215.204.118 - - [18/Sep/2013:06:51:35 +0000]
"GET /wp-includes/js/jquery/jquery.js?ver=1.10.2 HTTP/1.1" 304 0
"http://blog.fens.me/nodejs-socketio-chat/" "Mozilla/5.0 (Windows NT 5.1; rv:23.0) Gecko/20100101 Firefox/23.0"
字段解析:
1. 访客ip地址: 58.215.204.118
2. 访客用户信息: - -
3. 请求时间:[18/Sep/2013:06:51:35 +0000]
4. 请求方式:GET
5. 请求的url:/wp-includes/js/jquery/jquery.js?ver=1.10.2
6. 请求所用协议:HTTP/1.1
7. 响应码:304
8. 返回的数据流量:0
9. 访客的来源url:http://blog.fens.me/nodejs-socketio-chat/
10. 访客所用浏览器:Mozilla/5.0 (Windows NT 5.1; rv:23.0) Gecko/20100101 Firefox/23.0
3.日志文件生成规则
基本规则是:
当前正在写入的文件是access_log;
当文件量达到64M,或者时间间隔达到60分钟时,滚动重命名切换到历史日志文件;
例如:access_log.2015-11-10-13-00.log
当然,每个公司的web服务器日志策略都不一样,可以在web程序的log4j.properties中定义,如下:
log4j.appender.logDailyFile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.logDailyFile.layout = org.apache.log4j.PatternLayout
log4j.appender.logDailyFile.layout.ConversionPattern = [%-5p][%-22d{yyyy/MM/dd HH:mm:ssS}][%l]%n%m%n
log4j.appender.logDailyFile.Threshold = DEBUG
log4j.appender.logDailyFile.ImmediateFlush = TRUE
log4j.appender.logDailyFile.Append = TRUE
log4j.appender.logDailyFile.File = /var/logs/access_log
log4j.appender.logDailyFile.DatePattern = '.'yyyy-MM-dd-HH-mm'.log'
log4j.appender.logDailyFile.Encoding = UTF-8
4.Flume采集实现
Flume采集系统的搭建比较简单:
在web服务器上部署代理节点,修改配置文件启动代理节点,将采集中的数据聚合到指定的HDFS目录中。
如下所示:
版本选择:apache-flume-1.6.0
采集规则设计:
采集来源:nginx服务器日志目录存放位置:hdfs目录/home/hadoop/weblogs/
采集规则配置详情:
agent1.sources = source1
agent1.sinks = sink1
agent1.channels = channel1
# Describe/configure spooldir source1
#agent1.sources.source1.type = spooldir
#agent1.sources.source1.spoolDir = /var/logs/nginx/
#agent1.sources.source1.fileHeader = false
# Describe/configure tail -F source1
#使用exec作为数据源source组件
agent1.sources.source1.type = exec
#使用tail -F命令实时收集新产生的日志数据
agent1.sources.source1.command = tail -F /var/logs/nginx/access_log
agent1.sources.source1.channels = channel1
#configure host for source
#配置一个*敏*感*词*插件
agent1.sources.source1.interceptors = i1
agent1.sources.source1.interceptors.i1.type = host
#使用*敏*感*词*插件获取agent所在服务器的主机名
agent1.sources.source1.interceptors.i1.hostHeader = hostname
#配置sink组件为hdfs
agent1.sinks.sink1.type = hdfs
#a1.sinks.k1.channel = c1
#agent1.sinks.sink1.hdfs.path=hdfs://hdp-node-01:9000/weblog/flume-collection/%y-%m-%d/%H%M%S
#指定文件sink到hdfs上的路径
agent1.sinks.sink1.hdfs.path=
hdfs://hdp-node-01:9000/weblog/flume-collection/%y-%m-%d/%H-%M_%hostname
#指定文件名前缀
agent1.sinks.sink1.hdfs.filePrefix = access_log
agent1.sinks.sink1.hdfs.maxOpenFiles = 5000
#指定每批下沉数据的记录条数
agent1.sinks.sink1.hdfs.batchSize= 100
agent1.sinks.sink1.hdfs.fileType = DataStream
agent1.sinks.sink1.hdfs.writeFormat =Text
#指定下沉文件按1G大小滚动
agent1.sinks.sink1.hdfs.rollSize = 1024*1024*1024
#指定下沉文件按1000000条数滚动
agent1.sinks.sink1.hdfs.rollCount = 1000000
#指定下沉文件按30分钟滚动
agent1.sinks.sink1.hdfs.rollInterval = 30
#agent1.sinks.sink1.hdfs.round = true
#agent1.sinks.sink1.hdfs.roundValue = 10
#agent1.sinks.sink1.hdfs.roundUnit = minute
agent1.sinks.sink1.hdfs.useLocalTimeStamp = true
# Use a channel which buffers events in memory
#使用memory类型channel
agent1.channels.channel1.type = memory
agent1.channels.channel1.keep-alive = 120
agent1.channels.channel1.capacity = 500000
agent1.channels.channel1.transactionCapacity = 600
# Bind the source and sink to the channel
agent1.sources.source1.channels = channel1
agent1.sinks.sink1.channel = channel1
启动采集
在部署flume的nginx服务器上,启动flume的代理,命令如下:
bin/flume-ng agent --conf ./conf -f ./conf/weblog.properties.2 -n agent
注意:启动命令中的-n参数应该给出配置文件中配置的代理名称。