定义埋点规范
举个例子
-- 客户端下载版本校验文件结束埋点{"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)-数仓选型》
长按下图二维码关注,您将第一时间接收到最新的数据库相关的文章。





