- 浏览: 798770 次
- 性别:
- 来自: 西安
文章分类
- 全部博客 (307)
- struts (8)
- hibernate (3)
- spring (32)
- opensourceproject (12)
- javaScript (9)
- primeton EOS (2)
- journey of heart (10)
- Design pattern (6)
- ejb (17)
- point (37)
- Linux&Unix (22)
- ibatis (10)
- AJAX (6)
- DB (26)
- Protocol (6)
- chart (4)
- web server (11)
- webservice (7)
- integration (3)
- tuxedo (5)
- ext (4)
- android (1)
- c/c++ (12)
- JVM (1)
- paginationFrame (2)
- code (2)
- report (1)
- High-performance web (1)
- svn (1)
- JQuery (1)
- workDaily (2)
- cloud (16)
- Python (8)
- English (2)
- shell (5)
- googleCode (1)
- nio (1)
- hyper-v (1)
- debug (3)
- vbs (2)
- openstack (3)
- K8S (1)
- Mesos (0)
- Spark (0)
- Marathon (0)
最新评论
-
钱图大展:
chao2751021 写道lib包哪里去下载,找不到
大型网站用户行为记录的一个实现--基于clickStream(第一部分) -
钱图大展:
无法下载
大型网站用户行为记录的一个实现--基于clickStream(第一部分) -
fm395728572:
shell脚本中用到了环境变量,但是获取不到,例如脚本中有一句 ...
ganymed-ssh2 for Java -
liuhanjiang:
我qq147229234
大型网站用户行为记录的一个实现--基于clickStream(第一部分) -
liuhanjiang:
博主 我利用您提供的方法实现博文中介绍的clickstream ...
大型网站用户行为记录的一个实现--基于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可以直接使用
- myoa.rar (250.2 KB)
- 下载次数: 384
- clickstream-1.0.3.jar (18.2 KB)
- 下载次数: 290
评论
就是无法 调用TouchLogger 里面的方法
可以跟我说下不
[*]
引用
[/list][/img][/img][/url][/url][/url][/url][/url][/url][/url][/url][/flash][/flash]
你直接使用我的项目 可以成功吗?
现在可以成功了,没做什么修改,不知道为什么!谢谢您!
那就好 共同学习
你直接使用我的项目 可以成功吗?
现在可以成功了,没做什么修改,不知道为什么!谢谢您!
你直接使用我的项目 可以成功吗?
发表评论
-
JSP run
2012-03-02 21:12 1593经验教训: 1.cn.jsprun.filter.Wap ... -
JNA—JNI终结者(转载)
2011-06-22 06:42 1522介绍 给大家介绍一个最新的访问本机代码的 ... -
Eclipse
2011-04-12 08:25 1137如何导入Eclipse自定义的快捷键设置 http:/ ... -
Jgroup
2011-02-24 13:04 5852参考资料: 1. 单播 ... -
Castor学习笔记 (转载)
2011-02-17 19:31 14601. Castor是什么 Castor是一种将Jav ... -
玩了一下 ssl-explorer vpn(未完待续)
2011-01-09 23:53 7333SSL-Explorer是一个SSL VP ... -
大型网站用户行为记录的一个实现--基于clickStream(第二部分)
2010-02-09 11:25 4621在上一节,我们已经可以使用clickstream ... -
Apache Mina Server 2.0 抢鲜体验
2010-01-10 13:41 4070Apache Mina Server 是一 ... -
使用 AppFuse 快速构建 J2EE 应用
2009-12-24 22:09 1901http://www.ibm.com/developer ... -
DWR2.0 HelloWorld
2008-09-30 08:20 1715好早以前就使 ... -
WebService IP 地址查询详细步骤
2008-08-28 22:19 11610还是老套路上http://fhs.6617.com/getip ...
相关推荐
NULL 博文链接:https://8366.iteye.com/blog/591996
大型网站用户行为记录的一个实现--基于clickStream。源码中没有lib,需要自己添加,带测试数据。
clickstream-1.0.2.jar
python库。 资源全名:streammachine-schemas-clickstream-avro-0.2.0.tar.gz
1。 改组 根据点击流量按比例增加项目(主要项目) 2。 延长 注入与查询不匹配但通过点击点击量连接到查询的主要项目的新项目(次要项目) 3。 定制 增加和注入选定的项目类型,并利用点击点击量的选定组成部分...
clickstream-rest-proxy
quickstart-clickstream-analytics-ct AWS云上的Clickstream Analytics 此《快速入门》会在大约30分钟内自动在Amazon Web Services(AWS)上构建点击流分析解决方案。 它集成了AWS服务,例如Amazon Kinesis Data ...
clickstream_analyzer 一个基于决策树分析和预测网站点击活动的机器学习项目
elasticsearch-clickstream-demo 去做。
介面Service.CreateUser Service.AuthUser Service.GetUser Service.UpdateUser Service.DestroyUser 依存关系鲁鲁姆应用服务职责范围注册一个新的应用程序(这里的应用程序是用户的应用程序,可以在该应用程序中...
此R代码是使用Markov链和数据挖掘SPADE算法分析...我使用了R版本3.3.3(2017-03-06)-“另一个独木舟” 代码中提到了所有需要的软件包。 您只需要将数据导入为.csv文件,安装所需的软件包并运行代码即可! 执照 执照
本文从对这些数据的分析中回顾了主要的发展,涵盖了以下方面的进展:(1)Internet上的浏览和网站使用行为;(2)Internet作为广告和说服力的新媒介的作用和功效;以及(3)购物互联网(即电子商务)上的行为。 ...
ClickStream.create_stream_x创建一个流,该流产生表示鼠标 x 坐标的值。 ClickStream.create_stream_y创建一个产生代表鼠标 y 坐标的 vlaues 的流。 流是懒惰的 iex > stream = ClickStream . create_stream_x # ...
隐含马尔可夫模型的马尔可夫混合物的MOOC Clickstream挖掘该项目将包含用于使用隐马尔可夫模型的马尔可夫混合物来挖掘Coursera点击流转储的代码。要求带有sequence::hidden_markov_model MeTA(当前,这意味着MeTA的...
clickstream-1.0.2, dbunit-2.1, displaytag-1.1, dumbster-1.5, oracle,dwr-1.1.1, emma-2.0.53, hibernate-3.2, jakarta-commons, javamail-1.3.1, jmock-1.1.0, junit3.8.1 logging-log4j-1.2.11, pmd-3.0 ...
StatViz是PHP中的Web日志分析/统计程序,用于可视化Web流量。 StatViz生成两种类型的图形报告:1)汇总点击流分析和2)单独的会话跟踪。 DOT输出使用GraphViz可视化。
这项研究是第一个基于详细的消费者水平数据对与社会优惠券相关的消费者行为进行实证研究的研究。 他们的发现如下:(1)与理论上的预测相反,无论交易是否完成(足够多的人在交易开始前就已经购买了),团购都不会...
运行 01_loggen/generate_apache_logs.sh - 这将在 /opt/weblogs 中创建一个示例点击流日志 按照 02_ingestion/Flume/README.md 中的说明进行操作 - 这将向您展示如何使用 Flume 将我们生成的日志摄取到 Hadoop 中 ...