Data Analytics
概览
Data Analytics 是 BytePower 提供的数据分析工具,用于分析你的应用上报的事件,从而挖掘出产品和用户的价值信息,以辅助你进行下一步的产品优化和商业决策。Data Analytics 会把你的 App 上传的原始数据做去重、清洗的处理,把原始数据和处理后的数据全部存储到 AWS S3。除此之外,用户行为数据可以根据不同的国家(地区)来进行划分,你可以自定义不同地区抽取的数据的比例,这部分数据作为样本,会被上传到 Elasticsearch,根据事件类型创建不同的数据索引,并提供 Kibana 作为分析界面来让你探索并可视化你的数据。
接入配置
启用 Data Analytics
打开你的应用的 BytePower 控制台 Basic -> Data Analytics,把 Basic config 下的 Data Analytics Enable 勾选上。
查看数据统计
点击 Kibana Address,浏览器会在新窗口打开 Kibana 的控制台,在这里你可以查看 App 上传的数据,并通过 Kibana 控制台提供的功能做一些数据分析。
查看数据存储量
在 ES Storage Usage 下你可以查看你的 App 上传的数据使用 ES 存储的总量。
配置数据样本
你的 App 上传的总数据会被抽取部分样本,然后上传到 Elasticsearch,抽样规则在这里进行配置:
- Default: 初始状态下,默认配置全球区的抽样比例为 50%,这一项配置不能删除,但你可以自行更改抽样比例。
- Additional: 在这里你可以自定义某个国家(地区)的抽样比例。
注意
请注意这里的抽样比例是指:把某个地区的全部数据抽取出一定比例,上传到 Elasticsearch,用作数据分析。 而不是指在某个地区的抽样量占据全部抽样数据的比例。
上报数据
上报数据的地址
BytePower 目前没有对外开放直接上报数据的服务,如果使用请联系我们为你接入。
上报数据格式
在正式将你的应用接入 Data Analytics 之前,你需要知晓上报的事件数据在格式上的要求,才能被 BytePower 正确识别。目前,Data Analytics 接收的数据格式如下:
{
"country": string, // 用于基于地点的数据抽样(两位 country code\\ CN \\US)
"user_segment": int, // 用于基于用户比例的数据抽样 0-9999
... // 其他自定义公共字段
"events":[ // 用于对多个 event 事件进行压缩合并的列表值,服务器会在此处进行数据展开
{
"event_id": string, // 标记一个事件的唯一标识 UUID,用于数据去重
"event_type": string, // OPTIONAL,标记事件的类型,用于数据转存时进行分组
... // 事件的详细字段
},
... // 其他合并的事件
]
}
事件的抽样
Data Analytics 允许用户在上传数据时选择按一定的规则对数据进行抽样,只有符合抽样条件的数据才会进入到 Data Analytics 中,抽样会根据上报事件的国家和地区以及用户分块来确定。
任何一个用户都需要属于一个地区以及一个用户分块,其中地区 country
使用两位国家码来标识,例如 CN
、US
等,不符合要求的国家码会被服务器所拒绝;而用户分块 user_segment
则取值于 0-9999
之间。
用户数据的抽样是根据用户地区和分块来综合决定的,例如,你可以指定美国地区(US)的用户按照 50% 的抽样比例进入 Data Analytics,那么 country=US
且 user_segment<5000
的用户产生的数据才会写入到 Data Analytics 中。同理如果你可以指定中国地区(CN)的用户抽样 10% 进入 Data Analytics,那么 country=CN
且 user_segment<1000
的用户产生的数据才会被抽样进入 Data Analytics。此外,你还可以对全局的抽样比例进行调整,如果你上报的数据地区并没有配置抽样比例的时候,就会按照全局配置进行抽样,默认情况下,BytePower 会初始化全局抽样比例为 10%。
详细的抽样比例配置,可以在 Console 中设定:
事件的合并压缩
//todo
注意
- 一条上报的数据里面可以含多条 event,条数不做限制。
- 配置、上报数据、查询数据,都需要一定的时间同步(1-5 分钟),刚刚配置完成时可能不能立即看到数据。
上报数据的加密方式
上报的数据需要使用 AES 加密(模式 ECB),然后进行 BASE64 编码。
示例代码:
:::: tabs type:border-card ::: tab Python
from Crypto.Cipher import AES
import base64
import json
event = {
# 要上报的数据
}
# secret 为 AES 加密的秘钥
def encrypt(secret):
event_str = json.dumps(event)
encobj = AES.new(secret, AES.MODE_ECB, event_str)
return base64.b64encode(encobj)
::: ::: tab Javascript
let CryptoJS = require("crypto-js");
let json = {
// 要上报的数据
}
let jsonStr = JSON.stringify(json);
let secret = "4035675ad0285ae6";// AES 加密的秘钥
function encryption() {
return CryptoJS.AES.encrypt(jsonStr, CryptoJS.enc.Utf8.parse(secret), { mode: CryptoJS.mode.ECB });
}
::: ::::
查询上报数据
BytePower 会对你的 App 上报的原始数据进行处理:把原始数据中的 events 列表展开成多个 event,每个 event 和公共字段形成一条单独的数据,然后再把所有处理后的数据保存到 AWS S3 进行持久化,并上传到 ES。
通过 Kibana console 查询数据
进入 Kibana 控制台之后,你可以依照自己的需求对索引中的数据进行搜索、查看、交互操作。利用 Kibana 可以很方便的利用图表、表格及地图对数据进行多元化的分析和呈现。
关于 Kibana 的使用教程可以参照 官方文档,或参照我们整理的 Kibana 使用方法(简)。
数据埋点上报约定
时间格式
Data Analytics 接受的时间格式为 ISO 8601 标准字符串时间,不支持 unix 时间戳。如果希望对数据进行时间维度的分析,需要按如下格式之一进行埋点上报:
ISO 8601 | Format |
---|---|
date_time | 2020-02-28T19:52:15.123Z |
date_time_no_millis | 2020-02-28T19:52:15Z |
date | 2020-02-28 |
date_hour | 2020-02-28T19 |
date_hour_minute | 2020-02-28T19:52 |
date_hour_minute_second | 2020-02-28T19:52:15 |
date_hour_minute_second_fraction | 2020-02-28T19:52:15.123 |
其中如果是非标准「零时区」,则将 Z 替换成相应时区,如 +08:00 即可。
小贴士
推荐使用标准时区的 date_time
格式作为时间。