网站程序自带的采集器采集文章(网站流量分析内容导航分析转化分析(漏斗模型分析))

优采云 发布时间: 2021-08-31 12:14

  网站程序自带的采集器采集文章(网站流量分析内容导航分析转化分析(漏斗模型分析))

  内容

  网站流量日志分析的意义

  通过分析用户行为数据,让更多的用户安顿下来,成为会员,赚更多的钱。

  如何进行网站analysis流量分析

  - 质量分析 在看重数量的同时 需要关注流量的质量 所谓的质量指的是流量所能带来产生的价值。

- 多维度细分 维度指的是分析的问题的角度 在不同的维度下 问题所展示的特性是不一样的

  内容导航分析

  从页面的角度分析 用户的访问行为轨迹

  转化分析(漏斗模型分析)

  从转化目标分析 分析所谓的流失率转化率 漏斗模型:层层递减 逐级流失的形象描述

  网站流量日志分析的数据处理流程

  根据数据的流向,一个流行的概括是数据从哪里来,到哪里去。

  

  数据采集

  - 数据从无到有的过程:通过技术把客观事件量化成为数据(传感器收集 服务器日志收集)

- 数据搬运过程:把数据从一个存储介质传递到另一个存储介质中(Apache Flume)

  数据预处理

  - 目的:保证后续正式处理的数据是格式统一、干净规则的结构化数据

- 技术:任何语言软件只要能够接受数据处理数据并且最终输出数据 都可以用于数据预处理

**选择MapReduce**

- MR本身是java程序,语言比较熟悉 可以无缝的调用java现有的开源库进行数据处理

- MR是分布式的程序 在预处理中 如果数据量比较大 可以分布式并行计算处理 提高效率

  数据存储

  

  - 库:面向分析的数据仓库,也是就会Apache Hive

- 入库的本质:经过ETL(抽取、转换、加载)把各个不同的数据源集中加载到数仓的分析主题下面。

  数据分析

  - 本质:根据业务需求 使用hive sql计算统计出各种不同的指标 分析是一个持续的过程

  数据可视化

  尽量的使用图形表格的形式 把分析的结果规律展示给别人看 也称之为数据报表

  埋点数据采集

  从头开始数据采集如何将用户的访问行为记录到网站access日志中

  Data采集方法及其优缺点

  ### 网站日志文件

  网站的web服务器自带日志功能,可以简单方便的采集一些基本的属性信息

  普通web服务器(Tomcat nginx apache server(httpd))

   优点:简单便捷 自带功能 不需要配置就可以使用

缺点:收集的信息确定 不利于维护 收集的信息不够完整全面

### 埋点JavaScript收集

- 目标:不以影响用户的正常浏览体验作为标准 数据采集分析锦上添花

- 何为埋点

```

在待采集数据的页面上,预先置入一段JavaScript代码,当用户的某种行为满足JavaScript执行条件,触发JavaScript的执行,在执行的过程中进行数据的采集工作。

```

- 标准的URL

```

协议://主机:端口/资源路径?k1=v1&k2=v2

```

- 好处:可以根据业务需求 定制化收集的属性信息 在不影响用户浏览体验的情况下 进行更多数据的收集

  埋点js代码实现自定义采集用户数据

  

  (除了追求跑通,还要考虑性能和后期维护)

  问题:js和html页面耦合不利于后续js维护

  ```

把js单独提取处理变成一个文件 然后通过src属性引入页面 进行所谓解耦合

```

  问题:一台服务器多个角色,压力太大,降低服务器请求压力

  ```

单独的去部署服务器 专门用于采集数据的请求响应

可能会产生跨域问题(限制js跨域的数据发送)

**以请求图片的形式 把采集的数据拼接成为图片的参数 发送到指定的服务器上去 绕开js的跨域问题**

(图片的请求没有域的限制,js的请求会有。跨域问题:不能从一台服务器上的js发送至另一台。主机,协议,端口任何一个不一样,就是不同域。跨域的本质是为了限制js的请求不安全,是针对js的限制。在页面收集领域,通常采用 以请求图片的形式绕开所谓的跨域问题)

为了降低请求的图片对页面的视觉干扰,将图片定义为1*1像素。

```

  确认采集的信息

  通常在采集数据之前,根据业务需求分析的需要,确定应该采集哪些信息字段和采集方式。

  

  埋藏代码的编写

  本来埋代码的逻辑是真实数据采集的逻辑,但是为了方便后续维护,把实际采集数据的js提取出来,变成了js文件。在这种情况下,代码的埋藏变成了怎样?将这个js文件引入页面。

  直接通过src属性引入

  ```

```

  js匿名函数自调用

  创建匿名函数 自己调用自己 并且调用一次 通常用于页面初始化操作

```

(function() {

var ma = document.createElement('script'); ma.type = 'text/javascript'; ma.async = true;

ma.src = 'www.itcast.cn/collect.js';

var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ma, s);

})();

```

  前端采集数据js

  依然是匿名函数自调用格式,保证在页面引入后,可以自己调用执行,执行一次

  后台脚本

  所谓后端就是接受解析前端发送的采集data的服务器

  注意明确nginx中location模块的具体职责:用于请求URL资源路径匹配。

  日志格式

  考虑日志中字段之间的分隔符问题,方便后续流程处理数据为标准

  常用分隔符、制表符、空格、特殊符号\001

  日志分割

  nginx默认总是把日志写在access.log文件中,不利于后续的维护和移动操作。

  通过shell脚本向nginx进程发送usr1信号,告诉它的reload配置文件在重新加载配置文件时重新打开一个新的日志文件。配合crontab定时器完成间接时间控制文件滚动

  水槽数据采集

  Kafka 和flume 都是日志系统。 Kafka是一个分布式消息中间件,自带存储,提供push和pull数据访问功能。

  Flume 分为三部分:agent(data采集器)、collector(简单的数据处理和写入)、storage(存储),每个部分都可以自定义。比如agent使用RPC(Thrift-RPC)、text(file)等,storage指定为hdfs。

  水槽的每一部分都可以定制。 Kafka 更适合做日志缓存。水槽 data采集 部分做得很好。可以自定义许多数据源以减少开发量。

  要求:使用flume采集数据到hdfs通过文件大小控制滚动时,大小为:128M

  a1.sinks.k1.hdfs.rollInterval = 0

a1.sinks.k1.hdfs.rollSize = 134217728

a1.sinks.k1.hdfs.rollCount = 0

  flume上传文件到hdfs时,不满足控制文件滚动的条件怎么办?

  如果不满足,hdfs上的文件会一直处于临时状态xxx.tmp

  a1.sinks.k1.hdfs.rollInterval = 0 时间间隔

a1.sinks.k1.hdfs.rollSize = 134217728 文件的大小

a1.sinks.k1.hdfs.rollCount = 0 event数量

  解决方案:根据文件空闲时间滚动

  hdfs.idleTimeout 默认值是0 如果配置指定的时间 比如30s

意味着如果30s之内 文件没有数据写入 即是其他的滚动条件不满足 此时已然进行文件的滚动

避免文件一致处于所谓的临时状态

  清晨,阳光温暖,夜幕降临银河。少年有梦,远方有歌。红黄之上,春夏晚风。悠闲漫步,熙熙攘攘。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线