网站流量日志埋点收集- - 方案二--点击事件数据采集实现|学习笔记

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 快速学习网站流量日志埋点收集- -方案二--点击事件数据采集实现

开发者学堂课程【大数据分析之企业级网站流量运营分析系统开发实战(第一阶段)网站流量日志埋点收集- -方案二--点击事件数据采集实现】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/693/detail/12182


网站流量日志埋点收集- -方案二--点击事件数据采集实现


内容简介

一、页面点击事件

二、操作演示

本节内容我们学习自定义埋点收集用户行为数据的第二套方案:页面点击事件的采集。在这里我们将会学习如何通过去绑定相关事件来采集用户相关的行为数据。


一、页面点击事件

首先打开我们的资料,找到参考文档中的方案二

image.png

在这里为了方便,模拟了一个首页。

1.首先打开 index2.html,看到页面的 body 部分,我们创建了两个 a 标签。

一个跳转至 page1页面,另一个跳转至 page2页面。跳转中可以看到 clstag 属性是没有颜色的,所以这里存在一个小技巧:如果使用 Notoped++打开 html 页面,会发现当中只要是内置的属性,都以红色存在,因为 clstag 属性不是红色,说明它是用户自定义标签,这样的标签通常跟业务相关。

image.png

比如这里我们通过简单的三个单词 click|index|page1| 来告诉这个事件如果发生是怎样的数据,数据收集放在日志中,解读就是这里发生了点击事件,是从首页点击跳转至 page1,这样就可以清楚的知道这个行为发生在哪,是什么样的行为。

当然也可以结合具体业务进行各种标签的设置,不需要则可以舍去。

接下来查看埋点代码的编写(图中灰色部分)

代码为:

Var_maq =_ maq | |[];

_maq. push(['_ setAccount', 'AllenWoon']) ;

$ (function() {

$("a") .click (function() {

var clstag = $(this) .attr ("clstag") ;

var_ a_ value =$(this) .text() ;

_maq.push(['_ a_ value' ,_ a_ value]) ;

clstag = clstag.split('|');

for (i in clstag) {

_maq.push(['type'+i, clstag[i]]);

}

sendRequest() ;

})

}) ;

function sendRequest () {

var ma = document. createElement ('script') ;

ma.type = 'text/javascript' ;

ma.async = true;

ma.src = 'http://192.168 .227.153/ma.js';

var s = document . getEl ementsByTagName ('script') [0];

s.parentNode. insertBefore (ma, s) ;

}

</script>

在之前的采集过程是通过匿名函数自调用来触发采集,但在这里是通过点击事件来进行采集。首先为了方便书写 js,我们未写原生而是引入了 Jquery-3.2.1.min.js 。

这里给 a 标签绑定了一个 click 事件,接下来看下面的逻辑,首先是$(this),this表明哪个a标签被点击,this 就代表谁,通过 clatag 值去提取当中自定义标签属性值,接下来提取 text()文本值,提取之后把var clstag = $(this) .attr ("clstag") ;var_ a_ value =$(this) .text() ; 保存在我们创建的一个全局的数组 maq 中。之后因为标签值进行了优化,所以给它分割然后保存进数组中。保存完之后,我们调用了 sendRequest()方法,这个方法也是函数,我们发现它不再是匿名函数。

接下来看 function sendRequest () { 部分的逻辑,首先创建了一个 script 标签,是 js 标签,是异步加载的 src 属性地址是'http://192.168 .227.153/ma.js'; 然后找到 document . getEl ementsByTagName 的父标签,进行插入放在dom 文档树上。

这一段逻辑就是之前所讲匿名函数自调用加载创建标签的逻辑,只不过这里不是匿名函数自调用行为触发,而是通过点击事件行为触发,调用sendRequest()行为就完成了标签的数据和用户地点击行为一一对应,只要点击 a 标签,事件 sendRequest()就会触发,触发后方法就会被调用,数据就会被收集。

2.下面学习跳转页面 page1.html

首先打开 page1.html

里面是匿名函数自调用,逻辑还是动态创建标签引入采集事件的js。

3.ma.js 和 nginx.conf 的代码基本一样,重点要注意当收集的参数属性变多之后,当中进行解析拼接会变多。

4.比如在 nginx 中,因为传递过来的参数变多,解析的参数就变多了 如图。

image.png


二、操作演示

打开服务器,来到node-1机器,根据我们的架构图,我们模拟的是对外提供web服务的服务器,所以需要把首页,juery-3.2.1.min.js

和两个跳转页面放入机器中。这里需要强调:当你想要把方案部署起来并且成功时,一定要确定首页的 ip 和环境的ip 吻合。

1.首先打开 node-1,查看 ip 为153,等下采集数据的 js 将会位于这台机器上,跳转是跳转到自己本机151。接下来打开page1,page2确保验证,都是153,所以没问题。

2.来到 node-1,node-1使用的 apache service,所以静态资源路径是 var/www/html,选择首页,juery-3.2.1.min.js和两个跳转页面,将它们发送至 node-1中

image.png

  1. 上传成功后,在页面中进行查看。

打开浏览器,选择192.168.227.151/index2.html

image.png

4.点击 F12,这时候就是个正常访问页面

image.png

但是没有进行数据收集,原因是未点击标签点击1和点击2,点击事件不会触发,不会触发方法就不会被调用,就不会进行数据收集。

5.接下来启动 nginx

首先来到 nginx 的安装目录,目录在 usr/local/nginx

image.png

再 cd 到 html 中,放入采集数据的 ma.js,上传之前确定一下里面的 IP 是否发生改变,确认无误后上传

image.png

6.上传成功后,需要针对 nginx 的配置文件进行修改,cd 至 conf 中,把之前的配置删了,把新的配置放入,上传之后回到根目录下进行启动,启动使用 sbin/nginx -c conf/nginx.conf 。这样就完成相关项目的启动

7.接下来查看相关效果是否正确,按下 ctri+h,把缓存删除,清除之后按下 F12,为了查看效果,需要把日志打开tail -f logs/user_defined.log

image.png

打开页面刷新后,日志并未改变,所以没有在采集用户数据,因为未点击,采集数据的 js:http://192.168.227.153.ma.js 模拟访问后可以获取。

所以接下来看埋点采集的时刻,是否可以收集数据。

点击 page1,发现日志开始收集

当我们点击标签时会进行两条标签的收集,如,点击这是点击2,日志跳转了两次,因为点击标签的行为会触发一条数据的收集,然后这个行为会让页面打开,页面打开自己加载时匿名函数调用自己也会采集一次,所以会触发两条数据的收集。

这也从侧面告诉大家在我们常见的电商类网站中为什么相关的各种行为会被收集,很简单,因为正常浏览商品时背后会进行数据收集,作为后面分析的依据。

但是出现问题:我们点击的是中文字,代码却是乱码。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
|
存储 监控 Serverless
阿里泛日志设计与实践问题之Grafana Loki在日志查询方案中存在哪些设计限制,如何解决
阿里泛日志设计与实践问题之Grafana Loki在日志查询方案中存在哪些设计限制,如何解决
|
14天前
|
Kubernetes API Docker
跟着iLogtail学习容器运行时与K8s下日志采集方案
iLogtail 作为开源可观测数据采集器,对 Kubernetes 环境下日志采集有着非常好的支持,本文跟随 iLogtail 的脚步,了解容器运行时与 K8s 下日志数据采集原理。
|
2月前
|
jenkins 持续交付
jenkins学习笔记之三:使用jenkins共享库实现日志格式化输出
jenkins学习笔记之三:使用jenkins共享库实现日志格式化输出
jenkins学习笔记之三:使用jenkins共享库实现日志格式化输出
|
5月前
|
存储 数据采集 Kubernetes
一文详解K8s环境下Job类日志采集方案
本文介绍了K8s中Job和Cronjob控制器用于非常驻容器编排的场景,以及Job容器的特点:增删频率高、生命周期短和突发并发大。文章重点讨论了Job日志采集的关键考虑点,包括容器发现速度、开始采集延时和弹性支持,并对比了5种采集方案:DaemonSet采集、Sidecar采集、ECI采集、同容器采集和独立存储采集。对于短生命周期Job,建议使用Sidecar或ECI采集,通过调整参数确保数据完整性。对于突发大量Job,需要关注服务端资源限制和采集容器的资源调整。文章总结了不同场景下的推荐采集方案,并指出iLogtail和SLS未来可能的优化方向。
|
2月前
|
Java 编译器 数据库
异步日志方案——spdlog
异步日志方案——spdlog
|
2月前
|
存储 Prometheus Kubernetes
在K8S中,如何收集K8S日志?有哪些方案?
在K8S中,如何收集K8S日志?有哪些方案?
|
2月前
|
存储 Kubernetes Java
阿里泛日志设计与实践问题之在写多查少的降本场景下,通过SLS Scan方案降低成本,如何实现
阿里泛日志设计与实践问题之在写多查少的降本场景下,通过SLS Scan方案降低成本,如何实现
|
3月前
|
Java API Apache
通用快照方案问题之Feign对日志的记录如何解决
通用快照方案问题之Feign对日志的记录如何解决
22 0
|
4月前
|
消息中间件 存储 监控
微服务日志监控的挑战及应对方案
【6月更文挑战第26天】微服务化带来模块独立与快速扩展,但也使得日志监控复杂。日志作用包括业务记录、异常追踪和性能定位。
|
3月前
|
存储 运维 监控
在Spring Boot中集成分布式日志收集方案
在Spring Boot中集成分布式日志收集方案