定义埋点规范
举个例子
-- 客户端下载版本校验文件结束埋点
{
"event": "client_start", //客户端启动过程(操作主事件)
"sub_event": "client_version_download_end",// 版本文件下载结果 (操作子事件)
"base_data": { // 事件全局通用属性集合(包含设备信息、客户端环境、游戏app基础信息)
"client_ip": "8.8.8.8", // 客户端ip
"client_time": "2021-04-16T16:12:13+08:00," // 客户端时间
"device_id": "xxxxxxxx", // 客户端设备唯一id
"device_model": "vivo xxx", // 客户端设备型号
"device_os": "android", // 客户端设备系统
"device_memory": 2785, // 客户端内存大小
"device_os_version": "9", // 客户端系统版本
"device_network": "wifi", // 客户端网络环境
"device_language": "zh", // 客户端语言
"device_tz": "CST", // 客户端时区
"device_country": "CN", // 客户端国家
"app_ver": "1.1.1", // app版本
"app_open_time": 10.53, // app打开时间
"region_id": 999, // app大区id
"package_name": "xxx.xx.xx", // app包名
"channel_name": "fb" // 用户渠道信息(一般较难获取,有就记录)
},
"sub_event_data": { // 事件特有属性集合
"result": 1, // 下载结果
"download_time": 3.25, // 下载时间
"download_url": "https://a.com/version.txt", // 下载的url
"msg": "OK" // 返回消息
}
}
-- 服务端玩家登入埋点
{
"event": "server_role_login", // 登入埋点(操作事件)
"base_data": { // 事件全局通用属性集合(包含设备信息、客户端环境、游戏app基础信息)
"client_ip": "8.8.8.8", // 客户端ip
"device_id": "xxxxxxxx", // 客户端设备唯一id
"device_model": "vivo xxx", // 客户端设备型号
"device_os": "android", // 客户端设备系统
"device_memory": 2785, // 客户端内存大小
"device_os_version": "9", // 客户端系统版本
"device_network": "wifi", // 客户端网络环境
"device_language": "zh", // 客户端语言
"device_tz": "CST", // 客户端时区
"device_country": "CN", // 客户端国家
"app_ver": "1.1.1", // app版本
"app_open_time": 10.53, // app打开时间
"region_id": 999, // app大区id
"package_name": "xxx.xx.xx", // app包名
"channel_name": "fb", // 用户渠道信息(一般较难获取,有就记录)
"role_id": "1", // 玩家游戏id
"role_name": "玩家", // 玩家游戏昵称
"user_name": "xxxxx", // 玩家账号标识
"record_time": "2021-04-16T16:12:13+08:00" // 数据产生时间
},
"event_data": { // 事件特有属性集合
"last_login_time": 100, // 上次在线时长
"log_type": 1 // 登入类型(比如打开新登入,断线重连,0点强制登入)
}
}
复制
埋点日志数据组成
下面解释一下操作事件和事件属性
操作事件
比如客户端的主要事件分为 启动过程、新手引导过程、游戏过程,每一个过程涉及的关注点是不一样,每一个主要事件,下面可以拆出很多子事件,比如下载资源、版本脚本、登入sdk。
服务端相对来说,就都是参与游戏,可以不用区分的这么细,当然也可以根据功能来拆分一下。
事件属性
比如客户端:设备信息、app信息这些是客户端每次都可以获取到的属性,我们称之为全局通用属性。事件的全局通用属性,是可以抽离出来的。
下载资源这个事件,我们需要知道下载资源的url,这是这个事件的特有属性。其他事件,可能就没有这个属性,这个我们称之为事件特有属性。
客户端
首先,我们先整理出客户端的启动流程。
客户端启动流程
客户端全局通用属性
"base_data": {
"client_ip": "8.8.8.8", // String 客户端ip
"client_time": "2021-04-16T16:12:13+08:00," // datetime 客户端时间
"device_id": "xxxxxxxx", // String 客户端设备唯一id
"device_model": "vivo xxx", // String 客户端设备型号
"device_os": "android", // String 客户端设备系统
"device_memory": 2785, // Number 客户端内存大小
"device_os_version": "9", // String 客户端系统版本
"device_network": "wifi", // String 客户端网络环境
"device_language": "zh", // String 客户端语言
"device_tz": "CST", // String 客户端时区
"device_country": "CN", // String 客户端国家
"app_ver": "1.1.1", // String app版本
"app_open_time": 10.53, // Number app打开时间,当此打开累计
"region_id": "999", // String app大区id
"package_name": "xxx.xx.xx", // String app包名
"channel_name": "fb" // String 用户渠道信息(一般较难获取,有就记录)
}
复制
客户端流程埋点
打开游戏APP
event: client_start
sub_event: open_app
触发条件:用户打开app时触发
完整内容:
{
"event": "client_start", // String 客户端启动过程(操作主事件)
"sub_event": "open_app", // String 打开游戏APP
"base_data": base_data, // Json 客户端全局通用属性(见上面定义)
"sub_event_data": "null" // Json/String 打开操作没有特有属性
}
复制
版本文件下载开始
event: client_start
sub_event: version_download_begin
触发条件:用户下载版本文件开始的时候触发上报
完整内容:
{
"event": "client_start", // String 客户端启动过程(操作主事件)
"sub_event": "version_download_begin", // String 版本文件下载开始
"base_data": base_data, // Json 客户端全局通用属性(见上面定义)
"sub_event_data": { // Json/String 事件特有属性集合
"download_url": "https://a.com/version.txt" // String 下载的url
}
}
复制
版本文件下载结束
event: client_start
sub_event: version_download_end
触发条件:用户下载版本文件结束的时候触发上报
完整内容:
{
"event": "client_start", // String 客户端启动过程(操作主事件)
"sub_event": "version_download_end", // String 版本文件下载结束
"base_data": base_data, // Json 客户端全局通用属性(见上面定义)
"sub_event_data": { // Json/String 事件特有属性集合
"download_url": "https://a.com/version.txt", // String 下载的url
"download_result" : 1, // Number 这里我们尽量用枚举,比如1成功,0失败
"download_time" : 1200 // Number 下载时间,毫秒
}
}
复制
弹出提示网络失败
event: client_start
sub_event: version_download_network_err
触发条件:下载版本文件失败时候触发
完整内容:
{
"event": "client_start", // String 客户端启动过程(操作主事件)
"sub_event": "version_download_network_err", // String 弹出提示网络失败
"base_data": base_data, // Json 客户端全局通用属性(见上面定义)
"sub_event_data": { // Json/String 事件特有属性集合
"download_url": "https://a.com/version.txt" // String 下载的url
}
}
复制
弹窗提示更新
event: client_start
sub_event: version_app_update_notice
触发条件:下载版本文件失败,弹窗时候触发
完整内容:
{
"event": "client_start", // String 客户端启动过程(操作主事件)
"sub_event": "version_app_update_notice", // String 弹窗提示更新
"base_data": base_data, // Json 客户端全局通用属性(见上面定义)
"sub_event_data": "null" // Json/String 事件特有属性集合
}
复制
用户是否更新app
event: client_start
sub_event: version_app_update_result
触发条件:版本不一致,提示用户更新APP的时候触发
完整内容:
{
"event": "client_start", // String 客户端启动过程(操作主事件)
"sub_event": "version_app_update_result", // String 用户是否更新app
"base_data": base_data, // Json 客户端全局通用属性(见上面定义)
"sub_event_data": { // Json/String 事件特有属性集合
"is_update": 1 // Number 是否更新,尽量用枚举,比如1更新,0不更新
}
}
复制
拉起更新页面
event: client_start
sub_event: version_app_update
触发条件:拉起更新页面的触发
完整内容:
{
"event": "client_start", // String 客户端启动过程(操作主事件)
"sub_event": "version_app_update", // String 拉起更新页面
"base_data": base_data, // Json 客户端全局通用属性(见上面定义)
"sub_event_data": "null" // Json/String 事件特有属性集合
}
复制
LUA列表下载开始
event: client_start
sub_event: lua_list_download_begin
触发条件:LUA列表下载开始的时候触发
完整内容:
{
"event": "client_start", // String 客户端启动过程(操作主事件)
"sub_event": "lua_list_download_begin", // String LUA列表下载开始
"base_data": base_data, // Json 客户端全局通用属性(见上面定义)
"sub_event_data": { // Json/String 事件特有属性集合
"download_url": "https://a.com/lua.txt" // String 下载的url
}
}
复制
LUA列表下载结束
event: client_start
sub_event: lua_list_download_end
触发条件:LUA列表下载结束的时候触发
完整内容:
{
"event": "client_start", // String 客户端启动过程(操作主事件)
"sub_event": "lua_list_download_end", // String LUA列表下载结束
"base_data": base_data, // Json 客户端全局通用属性(见上面定义)
"sub_event_data": { // Json/String 事件特有属性集合
"download_url": "https://a.com/lua.txt", // String 下载的url
"download_result" : 1, // Number 下载结果,尽量用枚举,比如1成功,0失败
"download_time" : 1200, // Number 下载时间,毫秒
}
}
复制
弹出提示网络失败
event: client_start
sub_event: lua_list_download_err
触发条件:下载lua文件失败弹窗时候触发
完整内容:
{
"event": "client_start", // String 客户端启动过程(操作主事件)
"sub_event": "lua_list_download_err", // String 弹出提示网络失败
"base_data": base_data, // Json 客户端全局通用属性(见上面定义)
"sub_event_data": { // Json/String 事件特有属性集合
"download_url": "https://a.com/lua.txt" // String 下载的url
}
}
复制
更新LUA资源开始
event: client_start
sub_event: lua_res_download_begin
触发条件:更新LUA资源开始的时候触发
完整内容:
{
"event": "client_start", // String 客户端启动过程(操作主事件)
"sub_event": "lua_res_download_begin", // String 更新LUA资源开始
"base_data": base_data, // Json 客户端全局通用属性(见上面定义)
"sub_event_data": { // Json/String 事件特有属性集合
"download_url": "https://a.com/2.1/lua", // String 下载的url
"download_filesize": 10269, // Number 下载的总字节数
"download_filenum": 10 // Number 下载的文件数量
}
}
复制
更新LUA资源结束
event: client_start
sub_event: lua_res_download_end
触发条件:更新LUA资源结束的时候触发
完整内容:
{
"event": "client_start", // String 客户端启动过程(操作主事件)
"sub_event": "lua_res_download_end", // String 更新LUA资源结束
"base_data": base_data, // Json 客户端全局通用属性(见上面定义)
"sub_event_data": { // Json/String 事件特有属性集合
"download_url": "https://a.com/2.1/lua", // String 下载的url路径
"download_filesize": 10269, // Number 下载的总字节数
"download_filenum": 10, // Number 下载的文件数量
"download_bytes": 10001, // Number 已下载字节数
"download_time": 1300, // Number 下载文件耗时
"download_result": 1 // Number 下载文件结果
}
}
复制
热更判断
event: client_start
sub_event: hotupdate_check
触发条件:判断完是否需要热更后触发
完整内容:
{
"event": "client_start", // String 客户端启动过程(操作主事件)
"sub_event": "hotupdate_check", // String 热更判断
"base_data": base_data, // Json 客户端全局通用属性(见上面定义)
"sub_event_data": { // Json/String 事件特有属性集合
"is_hotupdate": 1 // Number 是否需要热更(1需要0不需要)
}
}
复制
资源热更开始
event: client_start
sub_event: hotupdate_begin
触发条件:热更开始的时候触发
完整内容:
{
"event": "client_start", // String 客户端启动过程(操作主事件)
"sub_event": "hotupdate_begin", // String 热更开始的时候触发上报
"base_data": base_data, // Json 客户端全局通用属性(见上面定义)
"sub_event_data": { // Json/String 事件特有属性集合
"download_url": "https://a.com/2.1/res", // String 下载的url路径
"download_filesize": 10269, // Number 下载的总字节数
"download_filenum": 10 // Number 下载的文件数量
}
}
复制
资源热更结束
event: client_start
sub_event: hotupdate_end
触发条件:热更结束的时候触发
完整内容:
{
"event": "client_start", // String 客户端启动过程(操作主事件)
"sub_event": "hotupdate_end", // String 资源热更结束
"base_data": base_data, // Json 客户端全局通用属性(见上面定义)
"sub_event_data": { // Json/String 事件特有属性集合
"download_url": "https://a.com/2.1/res", // String 下载的url路径
"download_filesize": 10269, // Number 下载的总字节数
"download_filenum": 10, // Number 下载的文件数量
"download_bytes": 10001, // Number 已下载字节数
"download_time": 1300, // Number 下载文件耗时
"download_result": 1 // Number 下载文件结果
}
}
复制
资源解压开始
event: client_start
sub_event: unzip_res_begin
触发条件:资源解压开始触发
完整内容:
{
"event": "client_start", // String 客户端启动过程(操作主事件)
"sub_event": "unzip_res_begin", // String 资源解压开始
"base_data": base_data, // Json 客户端全局通用属性(见上面定义)
"sub_event_data": { // Json/String 事件特有属性集合
"unzip_filesize": 10269, // Number 压缩包总字节数
"unzip_filenum": 10 // Number 压缩包数量
}
}
复制
资源解压完成
event: client_start
sub_event: unzip_res_end
触发条件:资源解压完成的时候触发
完整内容:
{
"event": "client_start", // String 客户端启动过程(操作主事件)
"sub_event": "unzip_res_end", // String 资源解压完成
"base_data": base_data, // Json 客户端全局通用属性(见上面定义)
"sub_event_data": { // Json/String 事件特有属性集合
"unzip_filesize": 10269, // Number 压缩包总字节数
"unzip_filenum": 10, // Number 压缩包数量
"unzip_time": 30 // Number 解压消耗时间
}
}
复制
拉取SDK开始
event: client_start
sub_event: request_sdk_begin
触发条件:拉取SDK开始的时候触发
完整内容:
{
"event": "client_start", // String 客户端启动过程(操作主事件)
"sub_event": "request_sdk_begin", // String 拉取SDK开始
"base_data": base_data, // Json 客户端全局通用属性(见上面定义)
"sub_event_data": "null" // Json/String 事件特有属性集合
}
复制
拉取SDK结束
event: client_start
sub_event: request_sdk_end
触发条件:拉取SDK结束的时候触发
完整内容:
{
"event": "client_start", // String 客户端启动过程(操作主事件)
"sub_event": "request_sdk_end", // String 拉取SDK结束
"base_data": base_data, // Json 客户端全局通用属性(见上面定义)
"sub_event_data": { // Json/String 事件特有属性集合
"request_result": 1, // Number 请求结果(1成功0失败)
"request_time": 130 // Number 请求耗时
}
}
复制
登入游戏服开始
event: client_start
sub_event: login_server_begin
触发条件:登入游戏服开始的时候触发
完整内容:
{
"event": "client_start", // String 客户端启动过程(操作主事件)
"sub_event": "login_server_begin", // String 登入游戏服开始
"base_data": base_data, // Json 客户端全局通用属性(见上面定义)
"sub_event_data": { // Json/String 事件特有属性集合
"server_url": "https://xx.com:8080" // String 游戏服地址
}
}
复制
登入游戏服结束
event: client_start
sub_event: login_server_end
触发条件:登入游戏服结束的时候触发
完整内容:
{
"event": "client_start", // String 客户端启动过程(操作主事件)
"sub_event": "login_server_end", // String 登入游戏服结束
"base_data": base_data, // Json 客户端全局通用属性(见上面定义)
"sub_event_data": { // Json/String 事件特有属性集合
"server_url": "https://xx.com:8080", // String 游戏服地址
"request_result": 1, // Number 请求结果(1成功0失败)
"request_time": 130 // Number 请求耗时
}
}
复制
新手引导开始
event: client_guide
sub_event: guide_step_begin
触发条件:新手引导开始触发
完整内容:
{
"event": "client_guide", // String 客户端新手引导过程(操作主事件)
"sub_event": "guide_step_begin", // String 新手引导开始
"base_data": base_data, // Json 客户端全局通用属性(见上面定义)
"sub_event_data": "null" // Json/String 事件特有属性集合
}
复制
新手节点1
event: client_guide
sub_event: guide_step_1
触发条件:通过新手节点1的时候触发
完整内容:
{
"event": "client_guide", // String 客户端新手引导过程(操作主事件)
"sub_event": "guide_step_1", // String 新手节点1
"base_data": base_data, // Json 客户端全局通用属性(见上面定义)
"sub_event_data": { // Json/String 事件特有属性集合
"guide_step": "1", // String 引导步骤
"guide_time": 1300 // Number 引导完成耗时
}
}
复制
新手节点n
event: client_guide
sub_event: guide_step_n
触发条件:通过新手节点n的时候触发
完整内容:
{
"event": "client_guide", // String 客户端新手引导过程(操作主事件)
"sub_event": "guide_step_n", // String 新手节点n
"base_data": base_data, // Json 客户端全局通用属性(见上面定义)
"sub_event_data": { // Json/String 事件特有属性集合
"guide_step": "n" , // String 引导步骤
"guide_time": 1300 // Number 引导完成耗时
}
}
复制
进入游戏
event: client_game
sub_event: login_game_server
触发条件:过完新手进入游戏后触发
完整内容:
{
"event": "client_game", // String 客户端游戏过程(操作主事件)
"sub_event": "login_game_server", // String 进入游戏
"base_data": base_data, // Json 客户端全局通用属性(见上面定义)
"sub_event_data": { // Json/String 事件特有属性集合
"server_url": "https://xx.com:8080" // String 登入游戏服的地址
}
}
复制
域名解析开始
event: client_log
sub_event: dns_begin
触发条件:域名解析的时候触发
完整内容:
{
"event": "client_log", // String 客户端日志类型(操作主事件)
"sub_event": "dns_begin", // String 域名解析开始
"base_data": base_data, // Json 客户端全局通用属性(见上面定义)
"sub_event_data": { // Json/String 事件特有属性集合
"host": "a.com" // String 需要解析的域名
}
}
复制
域名解析结束
event: client_log
sub_event: dns_end
触发条件:域名解析完成的时候的时候触发
完整内容:
{
"event": "client_log", // String 客户端日志类型(操作主事件)
"sub_event": "dns_end", // String 域名解析结束
"base_data": base_data, // Json 客户端全局通用属性(见上面定义)
"sub_event_data": { // Json/String 事件特有属性集合
"host": "a.com", // String 需要解析的域名
"result": 1, // Number 解析结果
"time": 100, // Number 解析耗时
"msg": "info|errinfo" // Number 域名解析捕获的一些日志
}
}
复制
网络ping结果
event: client_log
sub_event: net
触发条件:主要是涉及到cdn资源和游戏服务器交互的时候,异步ping一下地址,ping三次取平均值,最大值,最小值,丢包率,一般主要是,在下载资源的时候/进入游戏的时候这两个点测试一下即可。
完整内容
{
"event": "client_log", // String 客户端日志类型(操作主事件)
"sub_event": "net", // String 网络ping结果
"base_data": base_data, // Json 客户端全局通用属性(见上面定义)
"sub_event_data": { // Json/String 事件特有属性集合
"host": "a.com", // String 需要测试的地址,ip或者域名
"min": 5.15, // Number ping的最小时延
"avg": 5.35, // Number ping的平均时延
"max": 5.45, // Number ping的最大时延
"loss": "30%", // Number ping的丢包率
"time": 3000, // Number ping的次数
"scene": "hotupdate" // String 触发上报场景
}
}
复制
FPS
event: client_log
sub_event: fps
触发条件:进入游戏某些场景的时候(比如战斗)上报5秒平均帧率
完整内容:
{
"event": "client_log", // String 客户端日志类型(操作主事件)
"sub_event": "fps", // String FPS
"base_data": base_data, // Json 客户端全局通用属性(见上面定义)
"sub_event_data": { // Json/String 事件特有属性集合
"fps": 30, // Number 帧率
"scene": "finght_1" // String 触发上报场景
}
}
复制
异常捕获
event: client_log
sub_event: catchlog
触发条件:app发生异常的时候捕获上报
完整内容:
{
"event": "client_log", // String 客户端日志类型(操作主事件)
"sub_event": "catchlog", // String 异常捕获
"base_data": base_data, // Json 客户端全局通用属性(见上面定义)
"sub_event_data": { // Json/String 事件特有属性集合
"msg": "xxxxxxxxx" // String 捕获的异常信息
}
}
复制
服务端
服务端埋点,我们不区分主事件和子事件,统一用功能模块划分时间,比如注册、登入、充值、任务模块、玩家属性模块。
我们假设一个游戏一些通用的游戏模块。注册模块、登入模块、游戏任务模块、游戏战斗模块、游戏货币模块。我们根据这些模块去做埋点设计。
服务端全局通用属性
"base_data": {
// 以下是服务端全局通用属性,所有服务端埋点都需要加上
"region_id": "999", // String app大区id
"package_name": "xxx.xx.xx", // String app包名
"channel_name": "fb", // String 用户渠道信息(一般较难获取,有就记录)
"role_id": "1", // String 玩家游戏id
"role_name": "玩家", // String 玩家游戏昵称
"user_name": "xxxxx", // String 玩家账号标识
"record_time": "2021-04-16T16:12:13+08:00" // datetime 数据产生时间
// 以下是客户端的全局通用属性,只需要在注册、登入、登出、充值这四个地方加上即可。
// 可以理解为客户端的这些属性,是需要客户端传值过来,才能获取到。
"client_ip": "8.8.8.8", // String 客户端ip
"device_id": "xxxxxxxx", // String 客户端设备唯一id
"device_model": "vivo xxx", // String 客户端设备型号
"device_os": "android", // String 客户端设备系统
"device_memory": 2785, // Number 客户端内存大小
"device_os_version": "9", // String 客户端系统版本
"device_network": "wifi", // String 客户端网络环境
"device_language": "zh", // String 客户端语言
"device_tz": "CST", // String 客户端时区
"device_country": "CN", // String 客户端国家
"app_ver": "1.1.1", // String app版本
"app_open_time": 10.53, // String Number app打开时间,当此打开累计
}
复制
服务端埋点
sub_event
,事件统一用
event
来识别。事件属性用
event_data
注册
event: reg
触发条件:玩家完成游戏注册/创角的时候触发
完整内容:
{
"event": "reg", // String 服务端埋点事件(注册)
"base_data": base_data, // Json 客户端全局通用属性(含客户端的全局通用属性,见上面定义)
"event_data": "null" // Json/String 事件特有属性集合
}
复制
登入
event: login
触发条件:玩家登入游戏后触发
完整内容:
{
"event": "login", // String 服务端埋点事件(登入)
"base_data": base_data, // Json 客户端全局通用属性(含客户端的全局通用属性,见上面定义)
"event_data": { // Json/String 事件特有属性集合
"login_type": 1 // String 登入类型(比如重连,打开app重新登入)
}
}
复制
登出
event: logout
触发条件:玩家登出游戏后触发
完整内容:
{
"event": "logout", // String 服务端埋点事件(登出)
"base_data": base_data, // Json 客户端全局通用属性(含客户端的全局通用属性,见上面定义)
"event_data": { // Json/String 事件特有属性集合
"login_time": "2021-04-16T16:12:13+08:00" // String 登入时间
}
}
复制
充值
event: pay
触发条件:玩家充值成功后触发
完整内容:
{
"event": "pay", // String 服务端埋点事件(充值)
"base_data": base_data, // Json 客户端全局通用属性(含客户端的全局通用属性,见上面定义)
"event_data": { // Json/String 事件特有属性集合
"order_channel": "wx", // String 支付渠道(官方、第三方)
"order_channel_sub": "card",// String 支付子渠道(支付子渠道,比如第三方的卡、网银)
"product_id": "id_xxx", // String 商品id
"game_bill_no": "uuid", // String 游戏订单id
"plat_id": "uuid", // String 平台订单id
"money": 100, // Number/Decimal 获得<虚拟货币>金额
"currency_amt": 1000, // Number/Decimal 充值<实际>金额
"currency_type": "USD" // String 币种
}
}
复制
资源
event: res
触发条件:玩家资源变动后触发(游戏币,金币,钻石之类的)
完整内容:
{
"event": "res", // String 服务端埋点事件(资源)
"base_data": base_data, // Json 客户端全局通用属性(见上面定义)
"event_data": { // Json/String 事件特有属性集合
"res_type": 1, // Number 资源类型(钻石,绑钻,金币,点数等)
"type": 1, // Number 1:获取/2:消耗
"way": 99, // Number 获取/消耗途径
"res_count": 10, // Number 消耗/获取数量(消耗为负值)
"cur_count": 100, // Number 当前数量
"prev_count": 90 // Number 变化前数量
}
}
复制
属性
event: var
触发条件:玩家自身属性变动后触发(等级,经验,段位,积分等等)
完整内容:
{
"event": "res", // String 服务端埋点事件(资源)
"base_data": base_data, // Json 客户端全局通用属性(见上面定义)
"event_data": { // Json/String 事件特有属性集合
"var_type": 1, // Number 属性类型(等级,经验,段位,积分等等)
"type": 2, // Number 1:增加/2:减少
"way": 100, // Number 增加/减少途径
"res_count": -10, // Number 增加/减少数量(消耗为负值)
"cur_count": 100, // Number 当前数量
"prev_count": 110 // Number 变化前数量
}
}
复制
物品
event: item
触发条件:玩家物品变动后触发(获取、丢弃、强化、升级、卖出、交易等等)
完整内容:
{
"event": "item", // String 服务端埋点事件(物品)
"base_data": base_data, // Json 客户端全局通用属性(见上面定义)
"event_data": { // Json/String 事件特有属性集合
"item_id": 1, // Number 物品ID
"item_name": "xx武器", // String 物品名称
"type": 1, // Number 1:获取/2:丢弃/3: 强化/4:升级/5:卖出/6:交易
"is_bind": 1, // Number 是否为绑定
"expiry_date": "2099-12-01" // datetime 有效期,永久有效物品传2099-12-01
}
}
复制
任务
event: task
触发条件:玩家任务变动后触发(接收任务,完成任务等等)
完整内容:
{
"event": "task", // String 服务端埋点事件(任务)
"base_data": base_data, // Json 客户端全局通用属性(见上面定义)
"event_data": { // Json/String 事件特有属性集合
"type":1, // Number 1:接收任务/2:完成任务
"task_id": "xx-1" // String 任务ID
}
}
复制
关卡/副本
event: chapter
触发条件:玩家触发关卡副本后触发(玩家开始,完成时分别埋点记录)
完整内容:
{
"event": "chapter", // String 服务端埋点事件(关卡/副本)
"base_data": base_data, // Json 客户端全局通用属性(见上面定义)
"event_data": { // Json/String 事件特有属性集合
"type": 1, // Number 1:开始/2:结束
"chapter_id": "xx-1" // String 关卡/副本ID
}
}
复制
活动参与
event: activity
触发条件:玩家成功参与活动时埋点记录
完整内容:
{
"event": "activity", // String 服务端埋点事件(活动参与)
"base_data": base_data, // Json 客户端全局通用属性(见上面定义)
"event_data": { // Json/String 事件特有属性集合
"type": 1, // Number 活动类型,1:每日活动 2:节日活动 3:其他
"activity_id": "xx-1" // String 活动ID
}
}
复制
在线
event: online
触发条件:当前服务器玩家在线数量(每分钟触发一次),这个埋点比较特殊,是服务器全局的。不需要关注具体到某个玩家的事件。
完整内容:
{
"event": "online", // String 服务端埋点事件(在线)
"base_data": base_data, // Json 客户端全局通用属性(见上面定义,这里只需要区服信息即可,玩家信息不需要,这个是全区的)
"event_data": { // Json/String 事件特有属性集合
"online": 999 // Number 在线人数
}
}
复制
怎么去对接这些日志
服务器目前采用的是本地文件记录的方式,服务端开发按照约定的规则,实时写到本地埋点文件,然后数据这边,再通过flume/filebeat去抽取。
下集预告:《浅谈游戏数据(3)-数仓选型》
长按下图二维码关注,您将第一时间接收到最新的数据库相关的文章。