详细数据:用户行为分析之数据采集

优采云 发布时间: 2020-10-12 09:00

  用户行为分析数据采集

  用户行为简介

  用户行为分析的主要指标可以概括如下:哪个用户执行了什么操作,在哪里进行了操作,为什么要进行这些操作,通过什么方法,花费了多长时间以及其他问题,归纳为WHO,何时,何地,什么,为什么以及如何?时间。

  基于以上5个W和2H,让我们讨论如何实现它们。

  WHO,首先,您需要x以获得登录用户的个人信息。用户名,角色等。

  何时获取用户访问页面每个模块的时间,开始时间,结束时间等

  什么,在获取用户登录页面后已经执行了哪些操作,单击了哪些页面和模块,等等。

  为什么,分析用户点击这些模块的目的

  如何,用户如何访问系统,网络,APP,小程序等。

  HOW TIME,用户访问每个模块多长时间,浏览特定页面等

  以上是我们需要获取的所有数据。只有获得相关数据,我们才能分析用户行为。

  用户行为数据采集掩埋点

  掩埋点通常分为非掩埋点和代码掩埋点。这两个都有各自的优缺点,这里仅作简要介绍:

  全掩埋点是一种前端掩埋方法。 SDK嵌入在产品中,这是最统一的掩埋点。关键行为是通过接口配置方法定义的,以完成埋入点采集,这是前端的埋入点方式之一。

  优势:

  缺点:

  作为前端掩埋点,会有一些自然的缺点

  代码掩埋点,这也是我们当前使用的掩埋方法。代码埋入点分为前端代码埋入点和后端代码埋入点。前端埋入点类似于完整埋入点,并且还需要嵌入到SDK中。区别在于对于每种事件行为,您需要调用SDK代码,传入必要的事件名称,属性参数等,然后将其发送到后台数据服务器。后端嵌入式点通过调用SDK接口的后端模块将事件和属性发送到后端服务器。

  我们使用代码掩埋点,将其分为前端和后端。嵌入是一个特别重要的过程。它是数据的来源。如果数据源存在问题,则数据本身存在问题,分析结果将失去意义。

  因为我负责日志检测,即埋入点之后事件日志的检测警报,并通知相应的埋入点开发人员,操作员和产品方面,所以我遇到了很多凹坑,其中大多数是过程。

  事件属性具有元数据管理系统,并且行业中的某些服务也具有此结构。通常,首先定义事件和属性,然后掩埋点。原因是需要检查事件日志数据。有必要检查事件是否存在,属性是否丢失,数据是否正常等等。

  遇到的坑

  数据错误。这种情况很难发现。需要在操作产品的分析中找到它。这也有点不舒服

  基于上述想法,让我们谈谈实现的相关技术问题以及如何进行用户行为分析。

  数据采集

  根据操作定义的嵌入式点接口形式获取的用户访问日志数据,必须预先在后端和前端定义数据存储格式,即字段内容为保存,并且嵌入点数据需要符合协议。格式统一并封装起来,以便于存储和分析。

  以下数据采集神器Flume已耗尽。

  实时掩埋点数据采集通常有两种方法:

  直接触发的日志将发送到指定的HTTP端口,并写入kafka,然后Flume将kafka消耗到HDFS用户访问日志到磁盘,在相应的主机上部署flume代理,并将文件发送到采集记录目录到Kafka,然后将Flume部署到云中以将Kafka数据消耗到HDFS中

  然后,Flume 采集系统的安装相对简单,只需两个步骤:

  flume配置模板:

  a1.sources = source1

a1.sinks = k1

a1.channels = c1

a1.sources.source1.type = org.apache.flume.source.kafka.KafkaSource

a1.sources.source1.channels = c1

a1.sources.source1.kafka.bootstrap.servers = kafka-host1:port1,kafka-host2:port2...

a1.sources.source1.kafka.topics = flume-test

a1.sources.source1.kafka.consumer.group.id = flume-test-group

# Describe the sink

a1.sinks.k1.type = hdfs

a1.sinks.k1.hdfs.path = /tmp/flume/test-data

a1.sinks.k1.hdfs.fileType=DataStream

# Use a channel which buffers events in memory

a1.channels.c1.type = memory

a1.channels.c1.capacity = 100

a1.channels.c1.transactionCapacity = 100

# Bind the source and sink to the channel

a1.sources.source1.channels = c1

a1.sinks.k1.channel = c1

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线