文章采集程序(需求数据采集的需求广义上来说分为两大部分(组图))

优采云 发布时间: 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参数应该给出配置文件中配置的代理名称。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线