`
8366
  • 浏览: 812811 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类

大型网站用户行为记录的一个实现--基于clickStream(第一部分)

阅读更多

  大型互联网应用记录用户的行为是一个问题,如何在不影响用户体验的情况下,异步的追踪用户的行为,apache 的开源项目clickstream 是个不错的选择,根据session 的 建立和销毁 来记录用户的行为日志。

 

Clickstream 概述
一个用来跟踪正在你的站点上访问的用户所到达位置细节的工具。它允许你跟踪访问你的站点的“点击流”或者“传输路径”。请访问JIRA的更新日志 来了解Clickstream最近的发展。

特性

• 当用户会话产生时,开始跟踪点击流。(通过一个监听器 )
• 跟踪用户产生的每次点击信息。(通过一个过滤器 )
• 当用户会话终止时,将完整的点击流记录到文件或者PrintStream中。
• 设法发现用户是不是机器人,并进行适当的过滤(目前可以检测252种机器人)

 

下面我使用 以前的一个SSH 整合的OA  系统来做为例子,给这个系统加上 用户行为记录(先记录到控制台上),稍后我们记录到远程的日志服务器上

 

 

步骤:

 

1. 在web.xml 中加上 clickstream 的filter ,配置 clickstream 拦截的行为 ,注意顺序,需要配置在web.xml的 靠前部分

 

<!-- clickStream 配置开始-->
<filter>
		<filter-name>clickstream</filter-name>
		<filter-class>
			com.opensymphony.clickstream.ClickstreamFilter
		</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>clickstream</filter-name>
		<url-pattern>*.jsp</url-pattern>
	</filter-mapping>
	<filter-mapping>
		<filter-name>clickstream</filter-name>
		<url-pattern>*.html</url-pattern>
	</filter-mapping>
	<filter-mapping>
		<filter-name>clickstream</filter-name>
		<url-pattern>*.htm</url-pattern>
	</filter-mapping>
	
	<filter-mapping>
		<filter-name>clickstream</filter-name>
		<url-pattern>*.do</url-pattern>
	</filter-mapping>
	
<listener>
		<listener-class>
			com.opensymphony.clickstream.ClickstreamListener
		</listener-class>
	</listener>
<!-- clickStream 配置结束-->

 

2.  session 超时以后,需要调用哪个方法来完成行为日志得记录?也就是把某个sessionID 关联的行为记录下来,需要我们实现一个clickstream 的接口 ClickstreamLogger 接口,在 session  超时的时候,它会调用 log 方法,在log方法中我们可以通过  遍历 list 的方式 拿到 clickstream 帮我们记录的 某个具体的 sessionID  的行为,然后我们根据自己的业务要求来进行 持久化--- 交给日志服务器

 

 

package com.demo.struts.util;

import java.util.Iterator;
import java.util.List;

import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;

import com.opensymphony.clickstream.Clickstream;
import com.opensymphony.clickstream.ClickstreamRequest;
import com.opensymphony.clickstream.logger.ClickstreamLogger;

public class TouchLogger implements ClickstreamLogger{
	private static final Logger log = Logger.getLogger(TouchLogger.class);
	
	/**
	 * 由于行为采集将是一个比较消耗资源的操作(用户量大,点击量大),所以在优化方面
	 * 可以考虑以下方法:
	 * 1.每web服务器将日志信息记录在本地
	 * 2.对于用户每次登录,并不是每作一次操作都要进行一次db的数据插入,而是当该用户的session过期的时候再进行,这样避免
	 * 多次的数据库操作。但是考虑到数据采集的真实性需要在每次点击的时候将点击时间进行记录
	 * 
	 */
	public void log(Clickstream cs) {
		log.info("session超时,记录日志中~~~");
		List list = cs.getStream();
		HttpSession session = cs.getSession();
		String userName=(String)session.getAttribute("username");
		for (Iterator iter = list.iterator(); iter.hasNext();) 
		{
			ClickstreamRequest cr = (ClickstreamRequest) iter.next();
			String servletPath = null;
			if(cr.getQueryString()==null){
				servletPath = cr.getRequestURI();
			}else{
				servletPath = cr.getRequestURI()+"?"+cr.getQueryString();
			}
			//if(urllist.contains(servletPath)){
			String ip = cr.getIp();
			
		log.error("记录日志中:userName:"+userName+",IP:"+ip+",servletPath:"+servletPath);
		}
	}
	
	
}

 

 

 

3. 写 clickstream.xml (固定格式,网上抄一个),告诉 clickstream 单session 超时的时候 需要调用哪个方法来处理

 

4. 在tomcat 中配置好项目的访问路径以后启动项目,我们观察控制台,首先需要你配置下项目的 log4j.properties ,将clickstream 配置成 DEBUG 级别,方便我们观察 clickstream  的运作流程

 

   a.首先进入主页面 ,观察控制台,返现 clickstream   已经为 我们创建了一个 clickstream  流

 

 

b.输入用户名密码之后,我们做一些页面从操作,看到控制台已经 [DEBUG][2010-02-07 17:47:04] Applying clickstream filter to request.  也就是 我们做的操作已经被拦截,并且已经加入到 clickstream  流中,帮我们缓存起来了

 

 

 

c. 等待session超时,在观察控制台 ,session 超时,日志被记录

 

 

 

 

5. 下面则需要我们将 clickstream 中的数据流写到 日志服务器上,而不是控制台,这样可以吧日志保存到远程日志服务器,便于以后查找和分析用户的行为,则需要我们在项目中修改log4j.properties 的 配置文件,加上远程 服务器IP和端口

 

log4j.logger.com.demo.struts.util.TouchLogger=ERROR,A2

#日志服务器配置
log4j.appender.A2=org.apache.log4j.net.SocketAppender
log4j.appender.A2.RemoteHost = 127.0.0.1
log4j.appender.A2.Port = 12345
log4j.appender.SOCKET.LocationInfo=true

#远程服务器日志格式
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%m%n

 

 6. log4j 的日志服务器 其实就是启动一个socke ,监听本地的一个端口,有数据过来的时候,把数据持久化一下,比如记录在文件中,其实这个socket log4j已经给我们实现了,并且内部使用了多线程机制,高效的记录日志,使用fatjar(肥jar) 将下面的 类和 依赖的log4j 整体打一个jar包,对外暴漏一个启动的main方法,步骤可以参考我的  用Fat Jar Eclipse Plug-In打包可执行jar文件   http://8366.iteye.com/admin/blogs/480652

 

 

package cn.com.xinli.log;
import org.apache.log4j.net.SimpleSocketServer;

/**
 * 日志服务器 启动的时候接受两个参数
 * 第一个参数为监听端口号
 * 第二个是配置文件名称,内容和log4j.properties 内容一致,就是接受到了日志流如何保存
 * 
 * 原理:
 * 使用log4j 中的 SimpleSocketServer.main 方法 在本地启动一个 socket
 * 监听制定端口,当监听端口上有数据的时候,内部使用 多线程(Thread)机制完成 对数据流的 读取,
 * 并且会根据你制定的配置文件来保存数据
 * 
 * 
 * @author huxl
 *
 */

public class LogServer
{
	public LogServer()
	{
	}

	public static void main(String args[])
		throws Exception
	{
		
		if (args.length == 2)
		{
			String port = args[0];
			String configFile = args[1];
			System.out.println("日志服务监听端口:"+args[0]);
			System.out.println("日志服务配置文件名字:"+args[1]);
			SimpleSocketServer.main(new String[] {
				port, configFile
			});
			
		}
		else
		{
			System.out.println("日志服务器启动失败:可能是参数不正确造成,参数个数为2,第一个参数为监听端口号,第二个是配置文件名称");
			System.exit(0);
		}
	}
}

 

 

 还需要一个配置文件,就是说监听到端口上有数据了,数据该持久化到哪,是一个标准的log4j.properties文件 logServer.properties 文件内容

 

log4j.rootLogger=,A1
log4j.appender.console =org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%m%n

log4j.appender.A1 =org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.DatePattern='.'yyyy-MM-dd
log4j.appender.A1.File =logfiles/testlog.txt
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%m%n

 

 

启动 :将 打好的 logServer_fat.jar 和 logServer.properties 放在同级 目录下 执行启动

 

D:\workspace\logServer>java -jar logServer_fat.jar 12345 logServer.properties


日志服务监听端口:12345
日志服务配置文件名字:logServer.properties

 

当有数据到来时 它会在当前的目录下产生 logfiles/testlog.txt 并且每天都谁产生一个 日期为文件名字的日志文件,这样,我们的日志文件就可以持久化了

 

 

   使用clickstream  最大的好处就是 可以异步的来 跟踪用户在网站上的行为,并且内部实现缓冲机制,对于高并发的大型互联网应用时一个不错的选择,利用 sessionID 来追踪用户的行为

 

 

备注:

 

1.附件中是整个项目,没有lib 文件,可以再 我的这个blog 中去下载

 

http://8366.iteye.com/admin/blogs/476923

 

 

2. 还需要 clickstream-1.0.3.jar 在附加中

 

3. 使用sql 文件来建立数据库和表结构

 

4. 导入到eclipse可以直接使用

 

 

 

 

分享到:
评论
11 楼 钱图大展 2017-03-09  
chao2751021 写道
lib包哪里去下载,找不到

10 楼 钱图大展 2017-02-28  
无法下载 
9 楼 liuhanjiang 2016-08-03  
我qq147229234
8 楼 liuhanjiang 2016-08-03  
博主 我利用您提供的方法实现博文中介绍的clickstream,在我的控制台上只显示:Applying clickstream filter to request.无法看到:用户名,IP,访问路径,我也配置clickstream.xml这个文件
   就是无法 调用TouchLogger 里面的方法
可以跟我说下不
7 楼 zqs13552522 2014-07-07  
[flash=200,200][flash=200,200][url][url][url][url][url][url][url][url][img][img][list]
[*]
引用

[/list][/img][/img][/url][/url][/url][/url][/url][/url][/url][/url][/flash][/flash]
6 楼 chao2751021 2014-05-19  
lib包哪里去下载,找不到
5 楼 8366 2011-08-28  
chenggongxun 写道
8366 写道
chenggongxun 写道
博主,您好!我利用您提供的方法实现博文中介绍的clickstream,在我的控制台上只显示:Applying clickstream filter to request.无法看到:用户名,IP,访问路径,我也配置clickstream.xml这个文件,请问如何才能实现看到:用户名,IP,访问路径,谢谢!!

你直接使用我的项目 可以成功吗?

现在可以成功了,没做什么修改,不知道为什么!谢谢您!


那就好 共同学习
4 楼 chenggongxun 2011-08-28  
8366 写道
chenggongxun 写道
博主,您好!我利用您提供的方法实现博文中介绍的clickstream,在我的控制台上只显示:Applying clickstream filter to request.无法看到:用户名,IP,访问路径,我也配置clickstream.xml这个文件,请问如何才能实现看到:用户名,IP,访问路径,谢谢!!

你直接使用我的项目 可以成功吗?

现在可以成功了,没做什么修改,不知道为什么!谢谢您!
3 楼 8366 2011-08-26  
chenggongxun 写道
博主,您好!我利用您提供的方法实现博文中介绍的clickstream,在我的控制台上只显示:Applying clickstream filter to request.无法看到:用户名,IP,访问路径,我也配置clickstream.xml这个文件,请问如何才能实现看到:用户名,IP,访问路径,谢谢!!

你直接使用我的项目 可以成功吗?
2 楼 chenggongxun 2011-08-25  
请问clickstream是不是只能过滤servlet?
1 楼 chenggongxun 2011-08-25  
博主,您好!我利用您提供的方法实现博文中介绍的clickstream,在我的控制台上只显示:Applying clickstream filter to request.无法看到:用户名,IP,访问路径,我也配置clickstream.xml这个文件,请问如何才能实现看到:用户名,IP,访问路径,谢谢!!

相关推荐

    大型网站用户行为记录的一个实现--基于clickStream(第二部分)

    【标题】:“大型网站用户行为记录的一个实现--基于clickStream(第二部分)” 在这个主题中,我们将深入探讨如何在大型网站环境中实现用户行为记录,特别是利用clickStream技术。clickStream是指用户在网站上的点击...

    myoa.rar_基于clickstream

    【标题】"myoa.rar_基于clickstream" 指的是一个使用Clickstream技术实现的大型网站用户行为记录系统。Clickstream技术主要用于收集、分析和理解用户在网站上的浏览路径和交互行为,这对于网站优化、用户体验提升...

    Python库 | streammachine-schemas-clickstream-avro-0.2.0.tar.gz

    标题中的"streammachine-schemas-clickstream-avro-0.2.0.tar.gz"是一个针对Python的库,它被封装在一个tar.gz压缩包内。这个库专注于处理clickstream数据,clickstream是指用户在浏览网站时产生的连续点击行为的...

    clickstream-1.0.2.jar

    clickstream-1.0.2.jar

    clickstream-rest-proxy

    "clickstream-rest-proxy"是一个基于Java开发的RESTful API代理服务,主要目的是处理和转发clickstream数据。Clickstream数据是指用户在浏览网站时产生的点击行为序列,这些数据对于理解用户行为、优化用户体验以及...

    elasticsearch-clickstream-demo

    本项目"elasticsearch-clickstream-demo"是一个基于Python的示例,用于展示如何使用Elasticsearch处理和分析点击流数据。点击流数据是用户在网站上浏览时产生的序列化记录,包括用户访问的页面、时间戳和其他相关...

    clickstream_analyzer:一个基于决策树分析和预测网站点击活动的机器学习项目

    `clickstream_analyzer`项目正是这样一个专注于这方面分析的工具,它运用了机器学习中的决策树算法,旨在揭示用户在网站上的行为模式,从而帮助开发者和分析师更好地理解用户行为并作出相应的策略调整。 一、项目...

    Solr-ctf-query-parser:使用Clickstream数据重新排名和扩展Solr查询返回

    1。 改组 根据点击流量按比例增加项目(主要项目) 2。 延长 注入与查询不匹配但通过点击点击量连接到查询的主要项目的新项目(次要项目) 3。 定制 增加和注入选定的项目类型,并利用点击点击量的选定组成部分...

    基于web 的数据挖掘

    基于Web的数据挖掘是当前非常热门的研究领域之一,它不仅帮助网站管理者深入了解用户行为,还能提供宝贵的商业洞察。通过结合多种数据挖掘技术和XML等标准化工具,可以有效地处理Web上的半结构化数据,为企业带来...

    电子商务点击流和交易数据集 E-commerce Clickstream and Transaction 70K+ 记录 CSV

    该数据集为电子商务平台上的用户交互提供模拟数据。它包括一系列事件,例如页面浏览量、点击量、产品浏览量和购买量。每条记录都捕获会话中的用户活动,因此适用于分析点击流路径和事务序列。 特征: 用户 ID:每...

    quickstart-ct-clickstream-analytics:AWS快速入门团队

    quickstart-clickstream-analytics-ct AWS云上的Clickstream Analytics 此《快速入门》会在大约30分钟内自动在Amazon Web Services(AWS)上构建点击流分析解决方案。 它集成了AWS服务,例如Amazon Kinesis Data ...

    大数据Spark技术 使用Apache Spark预测Messy Clickstream数据中的安装程序保留共34页.pdf

    文中描述的是针对用户在安装游戏后的第一周内是否会重新玩游戏的预测。用户留存率是衡量用户满意度和产品吸引力的重要指标,对于游戏公司而言,准确预测用户留存对于商业决策至关重要。 总结以上知识点,文章详细...

    基于AWS和Apache Kylin实现数据分析服务.pptx

    该文件介绍了一个基于AWS(Amazon Web Services)和Apache Kylin的数据分析服务解决方案。这个解决方案旨在帮助那些不熟悉大数据技术的用户也能从数据分析中受益,通过提供一站式建站服务和微信小程序,服务全球数...

    StatViz: graphical clickstream analysis-开源

    StatViz是一个基于PHP的开源项目,专门设计用于分析和可视化Web流量的工具。这个工具的核心功能在于解析和理解Web服务器的日志数据,通过提供直观的图形报告来帮助用户了解网站用户的点击行为模式。StatViz的主要...

    数据分析框架标准建设.pdf

    - **Clickstream Data**:点击流数据记录用户的浏览路径,包括直接输入URL的数量、访客来源和地理位置,这些信息可用来分析用户的行为模式和导航习惯。 - **Outcomes Data**:结果型数据关注用户行为的最终结果...

    clickstream:学士论文项目

    介面Service.CreateUser Service.AuthUser Service.GetUser Service.UpdateUser Service.DestroyUser 依存关系鲁鲁姆应用服务职责范围注册一个新的应用程序(这里的应用程序是用户的应用程序,可以在该应用程序中...

    clickstreamresultoutput.zip

    例如,可以编写一个Map函数解析每一条clickstream记录,提取出所需字段,再由Reduce函数计算各类统计指标,如页面访问频率、用户停留时间分布等。 此外,Hadoop生态系统中的其他工具,如Hive用于数据仓库构建,Pig...

Global site tag (gtag.js) - Google Analytics