ae-tracking 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/src/cli/init.js +1 -1
  3. package/package.json +1 -1
  4. package/skills/data-integration-helper/SKILL.md +198 -0
  5. package/skills/data-integration-helper/references/android_sdk_faq.md +179 -0
  6. package/skills/data-integration-helper/references/c_sdk_compilation.md +83 -0
  7. package/skills/data-integration-helper/references/c_sdk_faq.md +416 -0
  8. package/skills/data-integration-helper/references/cocoscreator_sdk_faq.md +123 -0
  9. package/skills/data-integration-helper/references/cpp_server_sdk_faq.md +365 -0
  10. package/skills/data-integration-helper/references/index.md +56 -0
  11. package/skills/data-integration-helper/references/ios_sdk_faq.md +118 -0
  12. package/skills/data-integration-helper/references/java_sdk_faq.md +406 -0
  13. package/skills/data-integration-helper/references/javascript_sdk_faq.md +129 -0
  14. package/skills/data-integration-helper/references/logbus2_guide.md +307 -0
  15. package/skills/data-integration-helper/references/logbus2_parser_plugin.md +346 -0
  16. package/skills/data-integration-helper/references/minigame_sdk_faq.md +115 -0
  17. package/skills/data-integration-helper/references/miniprogram_sdk_faq.md +118 -0
  18. package/skills/data-integration-helper/references/python_sdk_faq.md +232 -0
  19. package/skills/data-integration-helper/references/restful_api_notes.md +72 -0
  20. package/skills/data-integration-helper/references/sdk_log_guide.md +314 -0
  21. package/skills/data-integration-helper/references/sdk_usage_notes.md +105 -0
  22. package/skills/data-integration-helper/references/unity_sdk_faq.md +115 -0
  23. package/skills/generate-tracking-code/SKILL.md +33 -10
  24. package/skills/generate-tracking-code/references/client-sdk-insert.md +33 -0
  25. package/skills/generate-tracking-code/references/server-sdk-insert.md +29 -0
  26. package/skills/generate-tracking-code/references/snippet-delivery.md +14 -7
  27. package/skills/generate-tracking-plan/SKILL.md +2 -2
  28. package/wiki/te-docs/raw//346/216/245/345/205/245/346/214/207/345/215/227//345/256/242/346/210/267/347/253/257-sdk/ios.md +2 -2
  29. package/wiki/te-docs/raw//346/216/245/345/205/245/346/214/207/345/215/227//345/256/242/346/210/267/347/253/257-sdk/macos.md +1 -1
@@ -0,0 +1,115 @@
1
+ ---
2
+ title: "小游戏 SDK FAQ"
3
+ code: "minigame_sdk_faq"
4
+ source: "Feishu MCP"
5
+ doc_id: "wikcnvfJGsMHmKJIsEIhx0T2lyj"
6
+ fetched_at: "2026-04-20T17:29:39Z"
7
+ ---
8
+
9
+ # 集成 SDK
10
+ ## SDK 集成方式说明
11
+ - 目前只支持本地集成暂不支持 NPM
12
+
13
+ ## SDK 兼容性说明
14
+ - 支持平台:微信小游戏、支付宝小游戏、字节跳动小游戏、百度小游戏等
15
+ - 支持引擎:CocosCreator、Egret 白鹭引擎、Laya 引擎
16
+
17
+ # 初始化 SDK
18
+ ## 推荐 SDK 初始化位置
19
+ - 在小游戏的启动脚本中初始化,如微信小游戏的 game.js
20
+
21
+ ## 常见问题
22
+ ### 延迟初始化会导致自动采集事件时间延迟
23
+ ### 设备无网络 SDK 初始化不会失败
24
+
25
+ # SDK 数据上报策略
26
+ ## 实时上报
27
+ - 默认采集后立即上报,失败重试 3 次
28
+
29
+ ## 定时批量上报
30
+ ```javascript
31
+ var config = {
32
+ appId: "APP_ID",
33
+ serverUrl: "SERVER_URL",
34
+ enableBatch: true,
35
+ batchConfig: {
36
+ size: 5,
37
+ interval: 5000,
38
+ storageLimit: 200
39
+ }
40
+ };
41
+ TDAnalytics.init(config);
42
+ ```
43
+
44
+ ## 数据上报失败原因
45
+ - 需要将 serverUrl 配置为小游戏访问域名白名单
46
+
47
+ # SDK 缓存机制
48
+ ## 存储内容
49
+ - 访客 ID、设备 ID、事件数据等
50
+ - 调用小游戏原生 setStorage 接口存储
51
+
52
+ ## 缓存数量限制
53
+ - 默认最大缓存 200 条
54
+
55
+ # 访客 ID(#distinct_id)
56
+ ## 默认格式
57
+ - 随机数-当前时间戳,如 2267955649-1679397798804
58
+
59
+ ## 长度限制
60
+ - 最大长度 128 位
61
+
62
+ # Debug 模式
63
+ ## debugMode 三种取值
64
+ - none:Normal 模式
65
+ - debug:数据在 TE Debug 模式中看到,参与分析
66
+ - debugOnly:只校验,不入库
67
+
68
+ ## 开启 Debug 模式看不到数据原因
69
+ - 确认模式正确打开
70
+ - 确认设备 ID 已在 TE 后台配置
71
+ - 确认 appId、serverUrl 正确
72
+
73
+ # 自动采集
74
+ ## ta_mg_show
75
+ - 小游戏启动、后台回到前台时触发
76
+ - 监听 onShow 事件
77
+
78
+ ## ta_mg_hide
79
+ - 前台切换到后台时触发
80
+ - 监听 onHide 事件
81
+ - #duration 为 onShow 到 onHide 时差
82
+
83
+ # 公共事件属性
84
+ ## 静态公共事件属性
85
+ ```javascript
86
+ ta.setSuperProperties({ channel: "渠道名", user_name: "用户名" });
87
+ ```
88
+
89
+ ## 动态公共事件属性
90
+ ```javascript
91
+ ta.setDynamicSuperProperties(function () {
92
+ return { gold_coin: getGold() };
93
+ });
94
+ ```
95
+
96
+ ## 属性优先级
97
+ - 用户自定义 > 动态公共 > 静态公共
98
+
99
+ # 预置属性
100
+ ## 设备 ID(#device_id)
101
+ - 默认和访客 ID 一致
102
+
103
+ ## IP 地址(#ip)
104
+ - 服务端从请求头解析
105
+ - 可手动上报 #ip
106
+
107
+ # 已知问题
108
+ ## 淘宝小游戏
109
+ - 3.4.4 版本 Batch 模式循环发送问题
110
+
111
+ ## OPPO 小游戏
112
+ - module is not defined 报错
113
+
114
+ ## TikTok
115
+ - #scene 属性类型不合法
@@ -0,0 +1,118 @@
1
+ ---
2
+ title: "小程序 SDK FAQ"
3
+ code: "miniprogram_sdk_faq"
4
+ source: "Feishu MCP"
5
+ doc_id: "wikcnFKi1tU3gBHjbIqVy4M6GGe"
6
+ fetched_at: "2026-04-20T17:29:39Z"
7
+ ---
8
+
9
+ # 集成 SDK
10
+ ## SDK 集成方式说明
11
+ - 目前只支持本地集成暂不支持 NPM
12
+
13
+ ## SDK 兼容性说明
14
+ - 支持平台:微信小程序、支付宝小程序、字节跳动小程序、百度小程序等
15
+
16
+ # 初始化 SDK
17
+ ## 推荐 SDK 初始化位置
18
+ - 在小程序启动脚本中初始化,如微信小程序的 app.js
19
+
20
+ ## 常见问题
21
+ ### 延迟初始化会导致初始化后首次自动采集事件无法上报
22
+ ### 设备无网络 SDK 初始化不会失败
23
+
24
+ # SDK 数据上报策略
25
+ ## 实时上报
26
+ - 默认采集后立即上报,失败重试 3 次
27
+
28
+ ## 定时批量上报
29
+ ```javascript
30
+ var config = {
31
+ appId: "APP_ID",
32
+ serverUrl: "SERVER_URL",
33
+ enableBatch: true,
34
+ batchConfig: {
35
+ size: 20,
36
+ interval: 10000,
37
+ storageLimit: 100
38
+ }
39
+ };
40
+ TDAnalytics.init(config);
41
+ ```
42
+
43
+ ## 数据上报失败原因
44
+ - 需要将 serverUrl 配置为小程序访问域名白名单
45
+
46
+ # SDK 缓存机制
47
+ ## 存储内容
48
+ - 访客 ID、设备 ID、事件数据等
49
+ - 调用小程序原生 setStorage 接口存储
50
+
51
+ ## 缓存数量限制
52
+ - 默认最大缓存 200 条
53
+
54
+ # 访客 ID(#distinct_id)
55
+ ## 默认格式
56
+ - 随机数-当前时间戳,如 2267955649-1679397798804
57
+
58
+ ## 长度限制
59
+ - 最大长度 128 位
60
+
61
+ # Debug 模式
62
+ ## debugMode 三种取值
63
+ - none:Normal 模式
64
+ - debug:数据在 TE Debug 模式中看到,参与分析
65
+ - debugOnly:只校验,不入库
66
+
67
+ # 自动采集事件
68
+ ## ta_mp_launch
69
+ - 小程序冷启动初始化完成时触发
70
+ - 监听 onLaunch 回调
71
+
72
+ ## ta_mp_view
73
+ - 小程序启动、后台回到前台、页面切换时触发
74
+ - 监听 Page onShow 事件
75
+
76
+ ## ta_mp_share
77
+ - 点击小程序页面分享按钮后触发
78
+ - 需要配置 onShareAppMessage
79
+
80
+ ## ta_mp_show
81
+ - 小程序启动、后台回到前台时触发
82
+ - 监听 onShow 事件
83
+
84
+ ## ta_mp_hide
85
+ - 前台切换到后台时触发
86
+ - 监听 onHide 事件
87
+ - #duration 为 onShow 到 onHide 时差
88
+
89
+ # 公共事件属性
90
+ ## 静态公共事件属性
91
+ ```javascript
92
+ ta.setSuperProperties({ channel: "渠道名", user_name: "用户名" });
93
+ ```
94
+
95
+ ## 动态公共事件属性
96
+ ```javascript
97
+ ta.setDynamicSuperProperties(function () {
98
+ return { gold_coin: getGold() };
99
+ });
100
+ ```
101
+
102
+ ## 属性优先级
103
+ - 用户自定义 > 动态公共 > 静态公共
104
+
105
+ # 预置属性
106
+ ## 设备 ID(#device_id)
107
+ - 默认和访客 ID 一致
108
+
109
+ ## IP 地址(#ip)
110
+ - 服务端从请求头解析
111
+ - 可手动上报 #ip
112
+
113
+ # 已知问题
114
+ ## 微信小程序
115
+ - login 方法报错 TypeError: e.trim is not a function,需要传字符串
116
+
117
+ ## 淘宝小程序
118
+ - 3.3.4 Uncaught TypeError,需升级 SDK 到 3.5.1
@@ -0,0 +1,232 @@
1
+ # 一、环境配置
2
+
3
+ ```shell
4
+ #下载
5
+ pip(3) install ThinkingDataSdk
6
+ #更新
7
+ pip(3) install --upgrade ThinkingDataSdk
8
+ ```
9
+
10
+ Python SDK 最低兼容 Python 2.7.5、建议使用 2.7.9 以上版本,以下基于SDK版本2.1.3进行说明。
11
+
12
+ #### demo
13
+
14
+ ```python
15
+ from tgasdk.sdk import *
16
+
17
+ #运行日志开关,默认False
18
+ TGAnalytics.enableLog(True)
19
+ #初始化
20
+ consumer = LoggingConsumer(log_directory="/Users/blank/Downloads/pytest")
21
+ # consumer = BatchConsumer(server_uri="上报地址", appid="项目appid")
22
+ # consumer = AsyncBatchConsumer(server_uri="上报地址", appid="项目appid")
23
+ # consumer = DebugConsumer(server_uri="上报地址", appid="项目appid", device_id="123456789")
24
+ te = TGAnalytics(consumer)
25
+ #数据上报
26
+ account_id = "11111" # 账户id
27
+ distinct_id = "ABD" # 访客id
28
+ testProperties = {
29
+ "#time": datetime.datetime.now(), # 设置事件时间,不填默认取当前时间
30
+ "#ip": "123.123.123.123", # 设置ip,默认不上报
31
+ "#zone_offset": 8, # 设置时区
32
+ "a": "123", # 文本
33
+ "b": 123, # 数值
34
+ "c": False, # 布尔
35
+ "e": datetime.datetime.now(), # 时间
36
+ "f": ["123", "123"], # 列表
37
+ "g": { # 对象
38
+ "g1": "123", # 对象内只识别普通属性,如果嵌套对象/对象组对应属性最终以文本入库
39
+ },
40
+ "h": [ # 对象组
41
+ {
42
+ "h1": "123", # 对象组内每个对象只识别普通属性,如果嵌套对象/对象组对应属性最终以文本入库
43
+ },
44
+ {
45
+ "h1": "321",
46
+ }
47
+ ],
48
+ }
49
+
50
+ try:
51
+ # 上报用户属性
52
+ te.user_set(account_id=account_id, distinct_id=distinct_id, properties=testProperties)
53
+ # 上报事件名为test的事件
54
+ te.track(account_id=account_id, distinct_id=distinct_id, event_name="test", properties=testProperties)
55
+ except Exception as e:
56
+ raise TGAIllegalDataException(e)
57
+
58
+ te.flush()
59
+ # te.close() # 关闭sdk前自动调用flush()
60
+ ```
61
+
62
+ # 二、工作原理
63
+
64
+ #### **Python SDK支持几种工作模式?分别适用于什么场景?**
65
+
66
+ Python SDK 支持以下四种工作模式:
67
+
68
+ 1. **LoggingConsumer** 批量实时将数据写入本地文件,文件可以按每天、每小时或指定文件大小分割,需要搭配 LogBus 上报数据。优点在于数据的储存与上报解耦,数据持久化存储不容易丢失;缺点在于需要另外部署 LogBus 进行上报,LogBus会占用一部分系统资源。
69
+ 2. **BatchConsumer** 批量实时地向TA服务器传输数据,不需要搭配上报工具。优点在于使用简单无需搭配上报工具;缺点在于数据没有持久化存储,仅在内存中做缓存,如果网络不稳定缓存数据超过缓存区上限后会丢失数据。
70
+ 3. **AsyncBatchConsumer** 异步批量实时地向TA服务器传输数据,其余同BatchConsumer
71
+ 4. **DebugConsumer** 逐条发送数据,服务端会对数据进行严格校验,当某个属性不符合规范时整条数据都不会入库,当数据格式错误时会打印详细错误信息。DebugConsumer 推荐在开发调试阶段使用,禁止生产环境使用。
72
+
73
+ #### **如何获取上报地址和APP_ID?**
74
+
75
+ 项目管理者可以在数数WEB界面,选择具体项目后,进入项目管理 - 项目配置 - 接入配置界面获取项目appid。上报地址分为公网地址和私网地址,其中公网地址适用于客户端数据上报,以及公网环境下的服务端数据接入,如在公网设置上报域名,则咨询做该配置的运维工程师;私网地址适用于内网环境下的数据接入和测试,内网上报地址为集群每个节点的8991端口。
76
+
77
+ #### **LoggingConsumer的工作原理是什么?有哪些配置参数?**
78
+
79
+ 原理:上报操作会先写入缓存,大于buffer_size(默认5条)才会写入磁盘,不满足写入条件时想要将数据写入文件需要自行调用flush方法。可多线程执行但本身是同步方法,多线程也要等锁执行反而浪费性能。写入文件时会加文件锁所以不能多进程写入同一个文件。
80
+
81
+ LoggingConsumer 常用配置参数如下表:
82
+
83
+ | 参数 | 描述 | 默认值 | 参数类型 | 是否必填 | 备注 |
84
+ |------|------|--------|----------|----------|------|
85
+ | log_directory | 日志文件路径 | - | String | 是 | 多级目录会自动创建 |
86
+ | rotate_mode | 日志按时间切分 | DAILY | Enum | 否 | Enum('ROTATE_MODE', ('DAILY', 'HOURLY')) |
87
+ | file_prefix | 日志文件名前缀 | 空 | String | 否 | 多实例时填写防止多进程写入同一个文件报错 |
88
+ | log_size | 日志按大小切分 | 0 | Integer | 否 | 单位为MB,值为0时不切分,不建议使用 |
89
+ | buffer_size | 缓存大小 | 5 | Integer | 否 | 单位为条,超过时从内存写到日志 |
90
+
91
+ #### **BatchConsumer的工作原理是什么?有哪些配置参数?**
92
+
93
+ 原理:上报操作会写入缓存,当上报数据数量大于batch(默认20)或因网络通信失败等问题未上报数据导致cache_buffer不为空时调用flush,不满足条件需要自行调用flush方法。如果通信失败会存入cache_buffer,长时间通信失败导致 未成功发送总条数 / batch大于max_cache_size时会丢弃最早的batch条数据。
94
+
95
+ BatchConsumer 常用配置参数如下表:
96
+
97
+ | 参数 | 描述 | 默认值 | 参数类型 | 是否必填 | 备注 |
98
+ |------|------|--------|----------|----------|------|
99
+ | server_uri | 上报地址 | - | String | 是 | |
100
+ | appid | 项目appid | - | String | 是 | |
101
+ | batch | 批次大小,达到阈值触发数据上报 | 20 | Integer | 否 | 最大200 |
102
+ | timeout | http请求超时时长 | 30000 | Integer | 否 | 单位为毫秒 |
103
+ | compress | 数据是否压缩 | True | Boolean | 否 | |
104
+ | max_cache_size | 内存保留数据批次数 | 50 | Integer | 否 | |
105
+
106
+ #### **AsyncBatchConsumer的工作原理是什么?有哪些配置参数?**
107
+
108
+ 原理:上报操作会写入缓存,当上报数据数量大于flush_size或每隔interval秒调用flush。flush时如果通信失败会重试3次,依旧失败会放回队列等下次上报,长时间通信失败导致超出 queue_size时会丢弃最早的flush_size条数据。
109
+
110
+ AsyncBatchConsumer 常用配置参数如下表:
111
+
112
+ | 参数 | 描述 | 默认值 | 参数类型 | 是否必填 | 备注 |
113
+ |------|------|--------|----------|----------|------|
114
+ | server_uri | 上报地址 | - | String | 是 | |
115
+ | appid | 项目appid | - | String | 是 | |
116
+ | interval | 数据上报间隔 | 3 | Integer | 否 | 单位为秒 |
117
+ | flush_size | 批次大小,达到阈值触发数据上报 | 20 | Integer | 否 | |
118
+ | queue_size | 发送线程队列大小 | 100000 | Integer | 否 | 单位为条 |
119
+
120
+ #### **DebugConsumer的工作原理是什么?有哪些配置参数?**
121
+
122
+ 原理:每条数据都直接走http请求上报数据,不用调flush。数据格式会进行严格校验。
123
+
124
+ DebugConsumer 常用配置参数如下表:
125
+
126
+ | 参数 | 描述 | 默认值 | 参数类型 | 是否必填 | 备注 |
127
+ |------|------|--------|----------|----------|------|
128
+ | server_uri | 上报地址 | - | String | 是 | |
129
+ | appid | 项目appid | - | String | 是 | |
130
+ | timeout | http请求超时时长 | 30000 | Integer | 否 | 单位为ms |
131
+ | write_data | 数据是否入库 | True | Boolean | 否 | |
132
+ | device_id | 设备ID | 空 | String | 否 | |
133
+
134
+ # 三、常见问题
135
+
136
+ #### **使用 LoggingConsumer 有哪些注意事项?**
137
+
138
+ - **搭配Logbus上报**
139
+ - LoggingConsumer + LogBus为数数标准的数据上报方案,LoggingConsumer使得数据持久化,数据得到不丢失的保障;LogBus为数据传输作保证,同时将数据持久化和上报解耦。
140
+ - **文件写权限**
141
+ - 写入日志目录需要有写入和读取的权限,通常Windows环境会有写入权限问题。
142
+ - **磁盘空间**
143
+ - 磁盘空间保证充裕,并可以合理在LogBus上配置删除策略。
144
+ - **磁盘性能NFS情况**
145
+ - **UUID**
146
+ - 建议添加UUID,防止网络抖动及极端情况造成数据重复,但会稍微消耗效率,也可在LogBus侧打开。
147
+ - **多进程写不同文件**
148
+ - 支持多进程写不同文件,但要保证不同进程的处理逻辑没有依赖关系(如不同服务器的用户行为写到不同日志)
149
+ - **容器环境**
150
+ - 将数据写入路径映射到外部磁盘,防止容器关闭数据文件丢失
151
+
152
+ #### **LoggingConsumer 是否支持多线程?是否支持多进程?**
153
+
154
+ 支持多线程,不支持多进程写同一个文件。
155
+
156
+ #### **LoggingConsumer 性能指标如何?**
157
+
158
+ 4C16G下2w/s,不同平台不同Python版本有上下浮动
159
+
160
+ #### **LoggingConsumer 是否存在丢数风险?如何避免?**
161
+
162
+ 如果磁盘写满或者服务器宕机可能导致数据丢失,建议:
163
+
164
+ 1. 定期检查写入日志路径磁盘剩余容量
165
+ 2. 降低buffer_size参数值,增加内存刷写频率,但会导致频繁IO,需结合具体场景综合考虑
166
+
167
+ #### **BatchConsumer 为什么会存在丢数风险?如何避免?**
168
+
169
+ `BatchConsumer`在内存中维护了两个队列,一个batch 大小的队列负责存放单批次数据,一个batch*max_cache_size大小的队列负责存放因为网络原因发送失败的批次数据队列。因为`BatchConsumer`基于内存存储,所以当发生内存溢出或者服务器宕机时,内存中未发送的数据会全部丢失,建议:
170
+
171
+ 1. 使用LoggingConsumer + LogBus搭配进行数据上报
172
+ 2. 提高max_cache_size参数值大小,在网络发生异常导致数据发送失败时,可以在内存中存储更多的数据,但是会导致服务器内存使用值增加,需结合具体场景综合考虑
173
+ 3. batch参数不宜设置过大,可能会导致单次发送数据时间增加,会增加发生网络错误的概率
174
+
175
+ #### **BatchConsumer 性能指标如何?适合在什么场景下使用?**
176
+
177
+ 内网环境下适合在并发数据量较低、保证网络的环境下使用(比如与TE集群内网打通)。
178
+
179
+ #### **DebugConsumer 为什么在生产环境禁用?**
180
+
181
+ DebugConsumer上传数据时,每条数据都会进行post发送,生产环境使用会频繁创建连接影响效率。
182
+
183
+ #### **什么时候需要调用 `close()` 方法?**
184
+
185
+ 程序需要正常结束时调用,close()方法会将内存中的数据进行写入文件或发送。
186
+
187
+ #### **在程序中调用了 `track()` 或者 `user_set()` 方法, 为什么在 TE 后台没有看到数据?**
188
+
189
+ 请依次检查以下情况:
190
+
191
+ - 检查上报地址和appid
192
+ - 数据太少,未触发上报
193
+ - 错误数据
194
+ - 数据时间
195
+ - 历史通道
196
+ - 埋点方案
197
+
198
+ #### **上报数据中为什么没有 "#ip"?**
199
+
200
+ 服务端的#ip需要单独上报,层级与#distinct_id、#event_name、#time、properties等同级。
201
+
202
+ # 四、预置属性、特殊类型上报
203
+
204
+ #### **Python SDK 如何上报对象和对象组类型?**
205
+
206
+ Python SDK 1.7.0及以上版本支持上报对象和对象组类型,代码示例请参考服务端SDK复杂类型上报。
207
+
208
+ #### **公共属性**
209
+
210
+ 服务端的公共属性无法精确到用户级,在多线程情况下报了用户级属性数据可能会导致用户数据对不上。仅建议在公共属性内放区服id等不会产生大变化的字段,其余均放入普通属性。
211
+
212
+ #### **时区**
213
+
214
+ 默认时区以数数服务器为准,如果要实现时区偏移需上报#zone_offset字段。假设填0且事件时间为2023-04-17 01:02:03,偏移到东八区会以事件时间2023-04-17 09:02:03进行分析。
215
+
216
+ # 五、异常报错
217
+
218
+ 1. **Pip 安装 Python SDK 失败,报错:"ERROR: Could not find a version that satisfies the requirement ThinkingDataSdk (from version: none) ERROR: No matching distribution found for ThinkingDataSdk"**
219
+
220
+ 这是pip安装的常见问题,通常可以通过升级 pip 版本或更改 pip 源解决。
221
+
222
+ 2. **调用 user_set() 报错:"error = year=1899 is before 1900; the datetime strftime() methods require year >= 1900"**
223
+
224
+ Python SDK 里用 strftime() 函数做时间转换,不支持1900年之前的时间。
225
+
226
+ 3. **调用 track() 报错:"gevent.Hub.LoopExit: This operation would block forever"**
227
+
228
+ 这个是客户使用了Python三方库gevent的报错,网上有很多相关资料和方案,可以协助客户分析,不属于Python SDK的异常。
229
+
230
+ 4. **BatchConsumer上报报错:"Data transmission failed due to ConnectionError(ProtocolError('Connection aborted.', BadStatusLine('No status line received - the server has closed the connection',)),)"**
231
+
232
+ 这个报错来自 Python SDK 用于网络请求的内部类 _HttpServices 的 send() 函数,通常由于网络抖动导致。BatchConsumer 的 __cache_buffer 缓存区不会移除上报失败的数据,会在下一次继续上报,所以网络抖动不会导致数据丢失。
@@ -0,0 +1,72 @@
1
+ # Restful API 使用注意事项
2
+
3
+ 数数提供了 Restful API 支持以 HTTP Post 方式向 TE 集群上报数据,详细介绍见官方使用手册 [Restful API 使用指南](https://docs-v2.thinkingdata.cn/?code=restful_api&anchorId=)。本文介绍 Restful API 的使用注意事项。
4
+
5
+ #### 使用场景
6
+
7
+ 由于 Restful API 无法像 SDK 或 Logbus 一样具备失败重试等容错能力,因此**建议应用于数据上报调试、数据格式验证等测试场景,或者少量数据一次性上报、低频上报场景。**
8
+
9
+ 上述场景以外,建议使用 Logbus 等更具保障的集成工具,详见 [LogBus2 使用指南](https://docs-v2.thinkingdata.cn/?version=latest&code=logbus2_installation&lan=zh-CN&anchorId=)。
10
+
11
+ #### 请求方式
12
+
13
+ Restful API 提供了 `form-data` 和 `raw` 两种请求方式,两种方式主要功能一致,但请求接口、传参方式等存在差异。
14
+
15
+ | 请求方式 | 接口 | 支持数据压缩 | 支持Debug模式 |
16
+ |----------|------|--------------|---------------|
17
+ | form-data | http://YOUR_SERVER_URL/sync_data | 否 | 是 |
18
+ | raw | http://YOUR_SERVER_URL/sync_json | 是 | 是 |
19
+
20
+ #### 异常处理
21
+
22
+ **如果将 Restful API 用于生产场景,请务必处理网络请求异常、上报失败等异常情况,采用重试等兜底策略,避免造成数据丢失。**
23
+
24
+ 根据请求返回的 code 可以判断请求是否成功, `"code": 0` 代表成功:
25
+
26
+ ```json
27
+ {
28
+ "code": 0
29
+ }
30
+ ```
31
+
32
+ `"code": -1` 或其它非 0 值代表失败,可以根据 `msg` 分析失败原因:
33
+
34
+ ```json
35
+ {
36
+ "code": -1,
37
+ "msg": "数据格式错误,非json格式"
38
+ }
39
+ ```
40
+
41
+ #### QPS
42
+
43
+ Restful API 对应的 `sync_data` 和 `sync_json` 接口本身对并发并无限制,但集群连接数存在上限。若并发过高致使集群连接达到上限,将导致请求失败。
44
+
45
+ 请求中的数据量和数据长度会影响集群处理请求的时长和资源:
46
+
47
+ - 单条请求中的数据量越大,请求处理耗时越长。如果请求中数据量过大,容易引发请求超时、集群连接打满等异常情况。
48
+ - 相同数据量前提下,数据平均长度越大,请求体越大,请求处理消耗内存资源越大。如果请求中数据量和数据平均长度都比较大,可能引发集群收数组件 OOM。
49
+
50
+ **因此,单条请求中的数据量需要控制在合理范围,建议不超过 1000 条。如果平均数据长度较大,需要减小请求中的数据量。**
51
+
52
+ #### debug 参数
53
+
54
+ debug 参数用于对数据格式、内容进行完整校验,默认值为 0,集群处理请求时只会对数据 JSON 格式、关键字段做简单校验。如果传入 `debug = 1`,集群会对数据内容进行完整校验并返回结果。
55
+
56
+ 由于开启 debug 模式后数据校验产生更大资源开销,集群的数据接收和处理性能将受到影响。
57
+
58
+ **因此,debug 模式仅用于测试调试,请勿在生产环境中使用。**
59
+
60
+ Restful API 的两种请求方式都支持传入 debug 参数,传参方式详见 [Restful API 使用指南](https://docs-v2.thinkingdata.cn/?code=restful_api&anchorId=)。
61
+
62
+ #### client 参数
63
+
64
+ client 参数用于标识是否将数据作为客户端上报数据处理。如果传入 `client = 1`,集群会将数据作为客户端上报数据处理,集群会记录请求中的 IP 信息并存入 `#ip` 属性,并将 IP 解析结果写入 `#country`,`#country_code`,`#province`,`#city` 属性。
65
+
66
+ Restful API 的两种请求方式都支持传入 client 参数,传参方式详见 [Restful API 使用指南](https://docs-v2.thinkingdata.cn/?code=restful_api&anchorId=)。
67
+
68
+ #### 数据压缩
69
+
70
+ Raw 请求方式支持数据压缩,在 Header 中添加 `compress` 参数可以开启数据压缩并指定压缩格式,例如 `compress=gzip` 。开启数据压缩能够减少传输流量,但会对集群的数据接收与处理性能产生一定影响。
71
+
72
+ 由于不同编程语言的压缩解压实现可能存在兼容性问题,建议优先选择 gzip 格式,并在正式投入使用前进行测试调试。