1.百度统计
1.1百度网站统计
使用百度统计跟踪网站的流量,需要在网站的每一个网页中加入百度统计的JavaScript代码。统计代码在创建站点时获取,一个站点对应一个代码跟踪ID。
- 不支持代码改造。
- 不支持私有部署
- 支持单页应用跟踪
- 支持对https网站的统计。
- 代码以异步加载形式进行加载,到对网站打开速度完全没有影响
- 支持手动安装,自动安装,第三方建站工具安装
- 提供的分析报告:提供网站的流量、来源、页面、访客、转化、SEO等多种网站分析报告,
- 支持多维度细分和自定义查看,帮助您进行SEM、SEO优化,提高转化率。
- 支持数据的下载与发送
- 百度统计可监控的转化类型包括页面转化、事件转化、时长转化、页数转化。
1.1.1JSapi
trackPageview
用于发送某个指定URL的PV统计请求
trackEvent
用于触发某个事件,如某个按钮的点击,或播放器的播放/停止,以及游戏的开始/暂停等。事件跟踪的数据不会被记入到页面PV中,适合用来统计所有的不需要看做PV的页面事件点击。已有数据的事件可以在设置中添加为事件转化,跟更多维度数据结合(如来源、入口页面等),进行转化分析
_setCustomVar
通过设置接口的作用范围,可用于获得不同类型访客、访次和页面的流量数据
1.2百度移动统计
1.2.1实现思路
基于无埋点技术的全链路数据解决方案
1.2.2产品定位
- 监控核心业务数据:通过平台预定义的报表,实现对产品日常运营核心业务数据的精准监控,满足企业管理、运营和数据分析人员的日常数据统计需求。
- 监测崩溃辅助研发:通过错误报表监测产品稳定性,帮助研发人员快速定位bug,提升修复研发效率。
- 洞悉用户营销增长:结合用户管理与百度人群画像数据,帮助客户更好地分析洞察用户,是营销人员制定营销策略实现用户增长的重要依据。
- 服务产品迭代优化:从页面、事件、路径转化等数据反馈的信息中获悉用户对产品功能和体验的反馈,是产品经理思考产品迭代优化的科学标尺。
1.2.3特色功能
1、可视化圈选埋点
可视化圈选埋点也叫框架埋点,它将手机APP的界面同步至电脑端,在电脑端以点击圈选的方式完成埋点,实现采集APP相应控件点击数据的效果。该埋点方式无技术门槛,适合产品运营使用,降低研发成本的同时还提高了效率。
2、定制分析
定制分析支持用户选择任何的站内维度和指标构成自定义报表,同时将该报表固化为每日生成的常规报表,拓展报告库。它是对已有常规统计报表的补充,同时通过灵活、自由组合维度和指标,可以轻松验证各种分析思路。
3、用户分群
用户分群是指通过多种组合纬度将用户细分为不同目标群体,并支持查看不同人群的数据表现,分析人群画像等。它在针对特定人群的特征分析、价值分析、营销管理等方面作用显著,是实现以用户为导向的精细化运营的重要功能。
- 接入简单,只需简单配置
- SDK快速接入支持安卓,Objective C,Swift,CocoaPod,watchOS
- 支持在线调式: 秒级响应,日志详尽,数据无污染。
- 具有用户,渠道,留存,漏斗,事件,页面,错误分析等基础功能
- 开发文档完善
2.热云数据
TrackingIO是【热云数据】旗下的、面向广告主推出的第三方广告效果追踪和监测平台,包括从广告渠道方的点击、下载、安装启动到后续用户的活跃、付费、留存,等深度转化的数据,帮助客户更好的管理他们的市场预算,更有效率的买到优质的流量
2.1TrackingIO优势
- 数据中立:TrackingIO独立于渠道方和开发者,帮您做精准的推广数据统计,提供中立的推广效果监测。
- 科学算法
TrackingIO帮您做更深入的数据探究,发现优质的推广渠道,- 统计多维:提供了一系列的统计工具,比如漏斗分析、留存分析、事件分析、用户群等等,分析用户的行为,查询事件的细分
2.2支持平台
IOS,Android,Unity,Web/H5,微信小程序,DeepLink
2.3主要接口(web端为例)
- 初始化热云SDK TrackingIO.init(appkey)
- 统计用户注册数据 TrackingIO.register(accountId,params)
- 统计用户登录数据 TrackingIO.loggedin(accountId,params)
- 统计用户下单数据 TrackingIO.order(transactionid,params)
- 统计用户付费数据 TrackingIO.payment (transactionid,currencyamount,currencytype,paymenttype,params)
- 下载 TrackingIO.download(params)
2.4工具
2.4.1归因查询
通过输入设备信息可以查询到:激活的时间,归因结果,最后一次的点击时间以及指纹信息等
2.4.2日志
可以查看客户端SDK或者服务器端上报的最新近100条的用户行为日志数据。其中,what字段中:startup启动、install 初始化(激活)、reged 注册、loggedin登录、order订单、payment 充值成功、event自定义事件。
2.5防作弊卫士
基于热云全域数据,分析常见作弊手段及场景下产生的作弊数据特征,推出的反作弊策略
能够对匿名IP、数据中心、点击泛滥、点击劫持、Android分包劫持、模拟器、设备工厂、SDK报文劫持、IP黑名单库防护等作弊场景有一定的应对措施
- 实时监控关键数据指标
- 支持数据导出
3.神策
3.1神策分析的产品优势
- 1.可私有化部署
支持私有化一键自动部署。打造企业专属数据平台,沉淀数据资产 - 2.基础数据采集与建模
客户端,服务端,业务数据,线下数据等全端数据的采集
与建模 -
- 实时多维度分析
轻松上手事件,漏斗,留存,用户分群等分析模型,灵活组合,实时秒级相应
- 实时多维度分析
- 4.PaaS平台深度开发
开发全端数据接口,扩展自定义分析需求,无缝对接内部系统
3.2分析模块
- 事件分析
- Session 分析
- 漏斗分析
- 留存分析
- 分布分析
- 归因分析
- 用户路径分析
- 网页热力分析
- App 点击分析
- 间隔分析
- 用户分析
- 自定义sql查询
3.3数据格式
神策分析支持多种不同语言的 SDK,这些 SDK 虽然在外部提供的接口上有所不同,但是在内部实现上都使用统一的数据格式,并且 数据导入 都支持直接导入以文件形式存储的符合要求格式的数据
- 数据整体格式
日志文件是一行一个JSON,物理上对应一条数据,逻辑上对应一个描述了用户行为的事件,或是描述一个或多个用户属性的 Profile 操作。
说下神策,神策的建议应该是,可以客户端埋的点,尽量客户端埋,貌似服务器回传会漏,但是服务器埋的点,调整起来比较简单。各有利弊。
- 神策分析属性数据类型定义
- NUMBER
- BOOL
- STRING
- LIST 字符串数组
- DATETIME
- DATE yyyy-mm-dd
3.4神策标识用户
神策分析使用 神策 ID (即 events 表里的 user_id 和 users 表里的 id)来对每个产品的用户进行唯一的标识,而 神策 ID 是基于 distinct_id 按照一定规则生成的。一般来说,典型的 distinct_id 有以下两种:
- 设备 ID
- 登录 ID
3.4.1标识用户方案
- 方案一:仅使用设备
ID,不管用户是谁,只要设备未变(设备 ID 未变),神策 ID 不变。
- 方案二:关联设备 ID 和登录 ID(一对一),
当用户换手机后,登录账号之后的行为与换手机之前的行为贯通了,但是在新设备上首次登录之前的行为仍没法贯通,仍被识别为新的用户的行为。
当用户把旧手机送给朋友之后,由于旧手机已被关联到自己的登录 ID 了,无法再与朋友的登录 ID 关联。后续使用这台旧手机的用户们,若不登录就操作,则都会被识别为同一个用户。
- 方案三:关联设备 ID 和登录 ID(多对一)
当用户把旧手机送给朋友之后,由于旧手机已被关联到自己的登录 ID 了,无法再与朋友的登录 ID 关联。后续使用这台旧手机的用户们,若不登录就操作,则都会被识别为同一个用户)。
而事实上,旧手机上后续的匿名登录很难识别到底是谁,可能归为匿名登录之前最近一次登录的用户会更合理一些。
3.5多项目接入
神策分析的多个项目之间,数据、元数据、账号、权限、token、数据概览和书签都是完全隔离的,仅共享机器资源。
它适用于如下的一些使用场景:
- 有多个完全没有关系的产品,都需要使用神策分析,并且它们之间的数据并不需要关联在一起分析。在这种情况下,可以给每一个产品创建一个单独的项目,每个产品的数据分别导入对应的项目,然后再在每个项目里面,分别进行账号创建、权限设置、概览创建和分配等工作;
- 创建一个项目用于开发和测试。神策分析已经在正常接入数据和使用了,而还需要一个环境用于开发和调试,则可以新创建一个项目,例如叫做 测试环境 ,来用于开发和调试;
- 有多个不同的分析角度,例如一个租车产品,分别从车和人的角度来进行分析。在这种情况下,可以考虑用两个项目,分别解决车的分析需求和人的分析需求,然后将以车为“用户ID”的事件和 profile 相关操作,发给车所对应的项目,将以人为用户ID”的事件和 profile 相关操作,发给人所对应的项目。
格式(直接对接自己技术一般是这么给的)
3.6客户端SDK
- 3.6.1 C++
- 3.6.2 小程序:微信/支付宝/百度/字节跳动/QQ/快应用/微信小游戏
- 3.6.3 Web
(一)加载方式
支持异步载入/同步载入/CommonJS规范加载/AMD规范加载
(二)普通参数
普通参数对代码埋点有效,下面是必填参数:
sdk_url: sensorsdata.min.js 文件的地址,请从 GitHub 获取并且放在你们自己网站目录下。
name: SDK 使用的一个默认的全局变量,如定义成 sensors 的话,后面可以使用 sensors.track() 用来跟踪信息。为了防止变量名重复,你可以修改成其他名称比如 sensorsdata 等 。
server_url: 数据接收地址。
heatmap_url: heatmap.min.js 文件的地址,请从 GitHub 获取并且放在你们自己网站目录下。神策分析中点击分析及触达分析功能代码,代码生成工具会自动生成。如果神策代码中 sensorsdata.min.js 版本是 1.13.1 及以前版本,这个参数须配置,高于此版本不需要配置。
web_url: 神策分析后台地址,神策分析中点击分析及触达分析功能会用到此地址,代码生成工具会自动生成。如果神策后台版本及 sensorsdata.min.js 均是 1.10 及以上版本,这个参数不需要配置。如果有需要,也可以修改可选参数。
heatmap:点击图配置。配置成 {} 表示开启 $WebClick 和 $WebStay 的自动采集,默认 $WebClick 只采集 a,button,input 三个 dom 元素的点击事件。 详细配置参考:Web 全埋点
cross_subdomain: 设置成 true 后,表示在根域下设置 cookie 。也就是如果你有 zhidao.baidu.com 和 tieba.baidu.com 两个域,且有一个用户在同一个浏览器都登录过这两个域的话,我们会认为这个用户是一个用户。如果设置成 false 的话,会认为是两个用户。默认 true。
show_log: 设置 true 后会在网页控制台打 logger,会显示发送的数据,设置 false 表示不显示。默认 true。
use_client_time: 因为客户端系统时间的不准确,会导致发生这个事件的时间有误,所以这里默认为 false ,表示不使用客户端时间,使用服务端时间,如果设置为 true 表示使用客户端系统时间。如果你在属性中加入 {$time: new Date()} ,注意这里必须是 Date 类型,那么这条数据就会使用你在属性中传入的这个时间。
source_channel: 默认获取的来源是根据 utm_source 等 ga 标准来的,如果使用百度统计的 hmsr 等参数,需在此字段中加入对应参数,参数必须是数组,例如:['hmsr']。使用网页通用渠道添加自定义属性时,需将对应的自定义属性名添加到此字段。
source_type: 自定义搜索引擎流量,社交流量,搜索关键词。[详细配置参考] Web 渠道参数
max_string_length: 通用字符串最大长度,超过部分会被截取丢弃(由于超过 7000 的字符串会导致 url 超长发不出去,所以限制长度),默认值:500。
send_type: 默认值 'image' 表示使用图片 get 请求方式发数据,( 神策系统 1.10 版本以后 ) 可选使用 'ajax' 和 'beacon' 方式发送数据,这两种默认都是 post 方式, beacon 方式兼容性较差。
callback_timeout: 默认值 200 ,单位毫秒,表示回调函数超时时间,如果数据发送超过 callback_timeout 还未返回结果,会强制执行回调函数。(SDK 版本 1.11.6 以后支持)
queue_timeout: 默认值 300 ,单位毫秒,表示队列发送超时时间,如果数据发送时间超过 queue_timeout 还未返回结果,会强制发送下一条数据。(SDK 版本 1.11.6 以后支持)
datasend_timeout: 默认值 3000 ,单位毫秒,表示数据发送超时时间,如果数据发送超过 datasend_timeout 还未返回结果,会强制取消该请求。(SDK 版本 1.11.6 以后支持)
preset_properties: 是否开启 $latest 最近一次相关事件属性采集以及配置 $url 作为公共属性,默认值为一个对象。(SDK 版本 1.14.10 及以后支持) 详细配置参考:Web 渠道参数
is_track_single_page: 默认值 false,表示是否开启单页面自动采集 $pageview 功能,SDK 会在 url 改变之后自动采集web页面浏览事件 $pageview。(SDK 版本 1.12.18 以后支持)
batch_send: 默认值 false,表示不开启批量发送,设置为 true 表示开启批量采集,并且使用以下默认值 { datasend_timeout: 6000, 一次请求超过多少秒的话自动取消,防止请求无响应。send_interval: 6000, 间隔几秒发一次数据。one_send_max_length: 6 一次请求最大发送几条数据,防止数据太大 },也可以直接以 {} 的方式自定义这几个参数的值
(三)验证数据导入是否靠谱
var counter = 0;
function test_script_1(){
setTimeout(function(){
if(++counter <= 500 ){
sensors.track('test_script_1');
test_script_1();
}
},1000);
}
test_script_1();
(四)支持单页应用
(五一)Web关闭页面发数据
正常情况下,由于设备,浏览器,网络等因素影响,Web JS SDK 丢数据概率不超过 5%,但是在关闭页面的情况下,丢失率会增加。
尤其在移动网络环境下,丢失率严重。在手机 iOS 下的 Safari 丢失率极高
优化方案
- 采集跳转页面的 $pageview 事件
- 加 callback
- 3.6.4 Android
- 3.6.5 IOS
- 3.6.6 App第三方框架:React-Native/Flutter/Weex
3.7 服务端SDK
- C SDK
- C# SDK
- Java SDK
- Golang SDK
- PHP SDK
- Python SDK
- Ruby SDK
- SDK
3.8 可设置公共属性
某个事件的属性,在所有事件中都会出现,可以将该属性设置为事件公共属性
3.9 数据导入
神策分析提供几种不同的工具,方便用户将各种形式的数据导入系统中。
- BatchImporter:一般用于批量的导入历史数据。
- LogAgent:用于实时的从日志文件导入数据。
- FormatImporter:用于导入 CSV、MySQL 数据库等结构化数据,也可以一次性导入日志文件。
- HdfsImporter:适用于集群版的海量数据导入工具。
- Logstash + Filebeat:Filebeat 是 Elastic 公司为解决 Logstash "太重" 的问题推出的一款轻量级日志采集器,在处理数量众多的服务器、虚拟机和容器生成的日志时可使用 Logstash + Filebeat 的日志采集方式。
3.10 数据检验
3.10.1. 测试项目与正式项目
默认情况下,神策分析默认均有两个项目,即测试项目与正式项目。这两个项目命名和接收地址不同,配置上无其它区别,项目之间数据隔离。在测试的情况下,建议将数据传入测试项目,等测试完毕正式发版时,再将数据传入正式项目(修改 SDK 初始化时数据接收地址 server_url 的 project 参数)。
3.10.2. 导入实时查看
神策分析提供实时察看当前系统正在被接入数据的功能,导入实时查看。
3.10.3. 埋点管理
神策分析提供统一管理神策分析埋点以及查看数据导入进度和错误样例的功能,埋点管理。
模块:比如“登录注册模块”
3.11 数据导出
3.11.1 通过查询 API
此方法可以用于平台的计算结果,也可以通过写 SQL 的方式获取最细粒度的用户行为和属性数据,适用于一次性或者周期性地批量获取数据的需求,可用于所有版本的神策分析;注意,由于效率问题,此方式不建议用于导出大量的原始数据。
3.11.2 直接订阅实时数据
此方法用于实时获取最细粒度的用户行为和属性数据,适用于有实时计算实时获取数据的场景,可用于私有部署的单机版和集群版神策分析;
3.11.3 直接使用JDBC进行数据访问,
适用于有通过 JDBC协议与其它系统打通的应用场景;此方式相比 HTTP 查询API的性能更好,可以用于较大量数据的导出。
4.logan
Logan 开源的是一整套日志体系,包括日志的收集存储,上报分析以及可视化展示
支持平台:IOS,Android,Web(H5,浏览器),小程序(暂未开源)
解决卡顿,影响性能、日志丢失、安全性、日志分散等问题
特色功能:日志回捞、主动上报
4.1 Logan Website
Logan 网站为开发者提供了 App 上报日志与 Web 上报日志的浏览、检索等功能,帮助开发者以直观的方式查看日志。
Logan 网站为来自客户端(Android、iOS以及Web前端)的上报日志提供了基础的浏览检索功能,具体包括:
- 上报任务检索:根据日志上报时间、设备编号或用户标志等条件查找日志上报任务。
- 上报任务概览:概览单一任务中记录的所有日志条目。
- 日志类型筛选:根据客户端记录的日志类型对单一任务中记录的所有日志进行过滤筛选。
- 日志关键字筛选:根据关键字对单一任务中记录的所有日志条目进行筛选。
- 单条日志快速定位:提供MiniMap,可根据日志类型和记录时间快速定位到单条日志。
- 单条日志详情展示:展示某条日志原始记录。
4.2 核心体系由四大模块:
4.2.1.日志输入
常见的日志类型有:代码级日志、网络日志、用户行为日志、崩溃日志、H5日志等。这些都是Logan的输入层,在不影响原日志体系功能的情况下,可将内容往Logan中存储一份。Logan的优势在于:日志内容可以更加丰富,写入时可以携带更多信息,也没有日志采样,只会等待合适的时机进行统一上报,能够节省用户的流量和电量。
4.2.2.日志存储
Logan存储SDK是这个开源项目的重点,它解决了业界内大多数移动端日志库存在的几个缺陷:
- 卡顿,影响性能
- 日志丢失
- 安全性
- 日志分散
Logan自研的日志协议解决了日志本地聚合存储的问题,采用“先压缩再加密”的顺序,使用流式的加密和压缩,避免了CPU峰值,同时减少了CPU使用。
4.3.3.后端系统
后端是接收和处理数据中心,相当于Logan的大脑。主要有四个功能:
- 接收日志
- 日志解析归档
- 日志分析
- 数据平台
(一) 接收日志
客户端有两种日志上报的形式:主动上报和回捞上报。主动上报可以通过客服引导用户上报,也可以进行预埋,在特定行为发生时进行上报(例如用户投诉)。回捞上报是由后端向客户端发起回捞指令,这里不再赘述。所有日志上报都由Logan后端进行接收。
(二) 日志解析归档
客户端上报的日志经过加密和压缩处理,后端需要对数据解密、解压还原,继而对数据结构化归档存储。
(三) 日志分析
不同类型日志由不同的字段组合而成,携带着各自特有信息。网络日志有请求接口名称、端到端延时、发包大小、请求Headers等信息,用户行为日志有打开页面、点击事件等信息。对所有的各类型日志进行分析,把得到的信息串连起来,最终汇集形成一个完整的个人日志。
(四) 数据平台
数据平台是前端系统及第三方平台的数据来源,因为个人日志属于机密数据,所以数据获取有着严格的权限审核流程。同时数据平台会收集过往的Case,抽取其问题特征记录解决方案,为新Case提供建议。
4.4.4.前端系统
- 日志可视化。所有的日志都经过结构化处理后,按照时间顺序展示。
- 时间轴。数据可视化,利用图形方式进行语义分析。
- 日志搜索。快速定位到相关日志内容。
- 日志筛选。支持多类型日志,可选择需要分析的日志。
- 日志分享。分享单条日志后,点开分享链接自动定位到分享的日志位置。
4.5 上报的触发机制
用户端的日志上报触发机制一般分为两大类:
- 用户主动触发。优点是上报的日志能够对应到用户反馈的个案;缺点是存在交互上的用户教育成本,同时依赖用户反馈的异常处理流程,过于滞后。
- 代码层面触发。优点是用户无需感知上报流程;缺点是可能存在大量“无帮助”的上报日志,需要对触发条件做好频率控制。
4.6 Web端
Logan将存储与上报的实现封装在 Web 端的 SDK 内,开发者只需在页面脚本中引入该 SDK,便可直接使用 Logan 在 Web 端上的日志安全存储与上报能力。
4.6.1 技术实现
Logan Web 在底层利用了现有前端技术来实现大体积日志的安全存储:
- 存储方面:利用浏览器的 IndexedDB 作为本地日志的大容量存储容器。
- 日志安全方面:使用混合加密模式确保本地已存的隐私日志数据不会被破解。
4.6.2 相应api
initConfig(globalConfig)
该方法为 Logan 单例设定全局配置。一般情况下你只需在引入 Logan 后执行一次该方法,设定好全局参数即可
log(content, logType)
落地的日志存储
logWithEncryption(content, logType)
日志内容加密后再落地储存
report(reportConfig)
该 report() 异步方法会从本地 DB 库中获取指定天的日志逐天进行上报。上报完成后会返回一个天为 key,上报结果为 value 的对象。
4.6.3 一些限制
- 尽管IndexedDB众所周知具有很大的存储配额,但它仍然有限制。Logan Web允许最多7天的日志记录,并且每天最多有7MB的日志限制。过期的日志将在每次日志操作期间被删除。
- github上有相应平台的demo,可能版本有点老旧,官方文档也不是很完善,
4.7 移动端
Logan的解决方案是通过Native方式来实现日志底层的核心逻辑,也就是C编写底层库。这样做不光能解决Java GC问题,还做到了一份代码运行在Android和iOS两个平台上。同时在C层实现流式的压缩和加密数据,可以减少CPU峰值,使程序运行更加顺滑。而且先压缩再加密的方式压缩率比较高,整体效率较高
4.7.1 Android api
// 写日志
Logan.w
// 立即写日志到文件
Logan.f()
// 查看所有的日志文件信息
Map map = Logan.getAllFilesInfo();
// 上传日志
final String url = "https://openlogan.inf.test.sankuai.com/logan/upload.json";
Logan.s(url, loganTodaysDate(), "testAppId", "testUnionid", "testdDviceId", "testBuildVersion", "testAppVersion", new SendLogCallback() {
@Override
public void onLogSendCompleted(int statusCode, byte[] data) {
final String resultData = data != null ? new String(data) : "";
Log.d(TAG, "upload result, httpCode: " + statusCode + ", details: " + resultData);
}
});