页面日志采集是指从页面上采集用户行为,将用户行为信息记录成日志,并将日志信息读取到消息队列的过程。一种比较常用的日志采集技术工具是:ngix+logstash+kafka。
进行页面日志的采集,需要在页面的最下端埋一个js代码片段。这个js代码片段通常在</body>的前面。这个js代码片段中有一行核心的代码:“src=XXXX/track.js”。当访问这个页面的时候,会从数据采集服务器上下载track.js。当页面渲染完成之后,会执行这个js,js就会采集到想要的数据,在track.js的最后会向数据采集服务器发送一个请求log.gif?args=……,数据采集服务器会立即返回一个“1*1”像素的图片,又来有回,意味着这次请求结束。在数据采集服务器的内部,会有一个内部的请求,相当于开了一个线程,这个线程专门用于记录log,将track.js发送过来的请求参数用log的形式写到日志文件里面。
可以通过修改ngix的配置(log_format tick{}),来定义log的形式。当log文件产生之后,可以通过flume、logstash等实时采集工具将数据写到消息队列中。这里使用kafka作为消息队列。
使用logstash将log文件的内容写到kafka里面,主要是配置logstash的配置文件,例如下面编写的logstash的配置文件(flow-kafka.conf),用于将log数据写到kafka中。
input{
file{
path=>"/home/hadoop/logs/ngix_logs/dir01/*.log"
discover_interval=>5
start_position=>"beginning"
}
}
output{
kafka{
topic_id=>"ngixGamelog02"
codec=>plain{
format=>"%{message}"
charset=>"UTF-8"
}
bootstrap_servers=>"mini02:9092,mini03:9092,mini04:9092"
}
}
接下来就是在集群上,启动kafka、logstash,进行页面数据采集:
//启动kafka
//1、需要先启动zookeeper
zkServer.sh start
//2、检查zookeeper是否启动成功
zkServer.sh status
//3、在集群上启动kafka
kafka-server-start.sh export/servers/kafka/config/server.properties &
#启动logstash进行数据采集
./export/servers/logstash/bin/logstash agent -f ./export/servers/logstash/config/flow-kafka.conf