1. 数据导入后怎么查看不到数据?

1.1. App/Web/小程序 端 SDK 上报数据,埋点管理页面看不到接收数据排查思路:

  1. 确认数据接收地址是否是通的,可以通过浏览器中打开数据接收地址使用 /debug ,查看下浏览器中是否有“Sensors Analytics is ready to receive your data!” 打印出来。如果不通,可以先让客户使用神策服务器的 ip 地址测试下,是否是通的,排除掉是神策服务不可用导致的数据接收不到。然后在排查转发层导致的数据接收地址不可用。
  2. 如果数据接收地址是通的,确认下神策页面查看的项目和数据接收地址中写的项目是否一致。
  3. (App 端数据)如果数据地址是通的,并且查看的项目和数据地址中的项目也是一致的,确认 SDK 中使用的模式是否为 debug 模式。(注:如果 App 端使用了 debugAndtrack 模式但是埋点管理看不到数据,可以和客户确认下是否对神策的 debug 接口做了禁用处理。)
  4. 建议在本地打印log,查看数据是否采集成功。
    1. iOS 端本地打印数据采集日志的方式:iOS 调试日志设置方式
    2. Android 端本地打印数据采集日志的方式:在 SDK  初始化之后调用   SensorsDataAPI.sharedInstance().enableLog(true);
    3. Web 端本地打印数据采集日志的方式:初始化 SDK 时,添加 show_log:true (该参数和 server_url 同等级,没有设置该参数时,默认为 ture)
    4. 小程序端本地打印数据采集日志的方式:初始化 SDK 时,添加 show_log:true (该参数和 server_url 同等级,没有设置该参数时,默认为 ture)
  5. 如果数据接收地址通,项目一致,非 debug 模式,仍然看不到数据,可以确认下 license 是否到期或者是数据条数超过上线导致的停止导入。
  6. 如果客户使用的是 https 的数据接收地址,也可以确认下证书是否过期,如果证书过期或者证书不合法也会影响数据发送。

1.2. 服务端 SDK 上报数据,埋点管理页面看不到接收数据排查思路:

  1. 确认 SDK 使用的 consumer 是 BatchConsumer 还是 ConcurrentLoggingConsumer?
  2. 如果是 BatchConsumer 确认是否到达了设置的缓存条数,是否满足发送条件。
  3. 如果是 BatchConsumer 并且满足了发送条件,确认数据接收地址是否可用(可参考 App 端 SDK 上报数据排查思路中第 1,2,3步)
  4. 如果使用的  ConcurrentLoggingConsumer 和客户确认本地日志是否已经打印,如果没有打印和客户确认下初始化 SDK 相关配置,是否指定了文件的写的路径,是否到达设置的缓存条数(默认到达 8k 会写日志文件)。
  5. 如果使用的  ConcurrentLoggingConsumer 并且本地已经打印了日志,和客户确认是否在 SDK 的机器上安装了 LogAgent,LogAgent 配置是否正确。LogAgent 是否有报错,可以进一步排查下 LogAgent 相关问题。LogAgent参考文档:LogAgent 导入工具

1.3. 埋点管理有接收但是事件分析或者自定义查询页面查不到数据,排查思路:

  1. 先到埋点管理平台页面,确认对应的埋点数据是否有报错,如果有报错,可以根据错误原因找研发确认埋点问题;
  2. 如果有接收校验数据,但是没有入库。可以先确认下导入模块是否正常,只有数据入库之后才可以查询。

1.4. 埋点管理里显示数据已经入库,自定义查询页面也可以查到对应的埋点数据,但是事件分析里查不到数据,排查思路:

  1. 可以先尝试强制刷新网页,排除因为缓存原因导致数据查不到。
  2. 如果强制刷新之后,仍然看不到,可以和客户确认是否开启了抽样或者近似查询导致没有查询到。

2. 如何查看调试日志?

初始化 SDK 后,通过调用以下代码,开启调试日志,通过 SA. 关键字筛选,可点击此链接查看更多详情。

//开启调试日志
SensorsDataAPI.sharedInstance().enableLog(true);

3. 如何在神策分析中查看我测试的数据?

方式一:通过调试查看数据,可参考此文档配置 (如果是业务人员建议使用此方法)

方式二:在本地代码中,开启调试日志后,查看日志中的 distinct_id 字段,即为神策标识用户 ID 的字段,然后在神策分析中通过搜索用户定位到具体的用户。如何搜索用户,可查看文档

开启了全埋点,为什么应用退到后台,没有退出事件?

Android 在 2.0.3 版本加入了 30 秒的 session 机制,用户退出 App 到后台 30 秒的时候,才会触发退出事件, 之后再启动 App,才会触发启动事件,可点击此链接查看更多详情。

4. 神策 SDK 支持第三方框架的采集吗?

目前 SDK 支持 RN、Flutter 等第三方框架,可点击此链接查看更多详情。

5. 如何查看 SDK 源码及更新日志?

可在 GitHub 上查看源码及更新日志。

6. 我们应该如何接入数据?

我们提供了多种不同的数据接入方式:使用批量导入工具 BatchImporter 导入历史数据;使用 LogAgent 监控日志文件增量实时导入数据;或者使用各个 SDK 来实时导入数据。可以根据不同的阶段和不同的需要来选择。具体可以参考这部分的说明

7. 你们的产品非常强大,那么除了分析用户数据以外,还可以分析哪些其它类型的数据呢?

  • A:神策分析提供的 Event 和 User 模型中,用户除了可以是互联网用户以外,还可以是其他类型的实体。例如,对于一个上门服务类型的产品来说,除了关心用户的行为,也会关心提供服务的技师的行为。那么,对于这一类需求,可以单独部署一套神策分析,或者在已有的系统内创建一部分单独的事件,这些事件的“用户”就是技师,而这些事件记录技师接受订单,上门服务等信息,然后据此也可以创建一系列分析技师的核心指标和转化漏斗等。

8. 我调试的时候程序写得有 bug,数据导入错了,能不能把导错的这些数据给删掉?

  • A:我们并不建议使用者因为这种原因而频繁地删除数据,当然,如果真有删除数据的需要,可以联系 Sensors Data 的技术支持人员进行咨询。同时,为了帮助用户顺利地完成数据导入,神策分析提供了以下一系列的手段:
    • 产品界面上提供了格式校验,并且可以根据校验的结果来创建元数据;
    • 可以申请短时间的云版试用环境,用于调试导入程序,在试用环境使用过程中,界面上会显示导入的进度,同时也会对导入数据的错误进行提示。因此,我们建议客户可以在云版试用环境上完成调试后,再在私有的生产环境中进行数据接入;
    • 如果由于业务发展,导致以前有意义的事件现在不需要了,则一方面可以停止导入这类事件,另一方面可以通过神策分析提供的隐藏事件功能,将之隐藏。

9. 有些分析和查询,我们想集成到自己的后台系统中,应该如何实现?

  • 神策分析是客户完全私有的数据分析系统,因此,专门开放了查询 API,使用者可以在任何需要的地方获得数据,然后进行任意形式的展现和集成。除此之外, 神策分析实质上也帮助客户搭建了一个完全私有的数据平台,客户传入的任何数据都完全开放给客户,可以通过批量和流式两种方式进行使用,具体可以联系 Sensors Data 的技术支持人员。

10. 神策分析后台是怎么实现的?查询层用得啥?

  • 神策分析主要用到了一些主流的开源社区技术,例如 Hadoop/Impala/Kafka/MySQL/Redis/jQuery/ECharts/Kudu/Parquet 等,以及一些我们自己开发的核心组件。
  • 神策分析主要用到了 Hadoop、Impala 等开源的分布式存储和计算套件,并结合业务的具体场景,对他们的代码做了很多针对性的修改和优化。

11. 你们的 Demo 为啥不能导入数据?

  • Demo 环境主要是给大家展示神策分析的查询、可视化、分析等方面的信息,导入的数据是我们后台模拟生成自动导入的数据。如果想尝试导入自己的数据进行查询和分析,可以联系我们获取相应的试用环境。

12. 删除数据和隐藏事件有什么区别?

  • 删除数据是真正地将数据删除了,而隐藏事件,只是在界面上将数据隐藏,并且在计算“任意事件”时,不统计这个事件。

13. 神策分析的数据是否支持修改/更新/Update?

  • 神策分析中的数据分为两类:
    • 对于 Profile 类数据,由于它描述的是用户的状态,是可能发生改变的,所以我们通过 profile_set、profile_unset、profile_delete 等接口,提供了完整的数据修改和删除的功能;
    • 对于 Event 类数据,由于它描述的是用户在过去所做的事情,从语义上它应该是在发生后就不能够改变的,同时为了保证最好的查询性能,目前不支持对 Event 数据的修改;
    • 如果使用者担心由于代码错误或者数据传输错误等原因,导致传入数据有误,我们提供了如下方案来解决此类问题:
      • 我们的数据分析师会根据客户的需求帮助客户制定完善的数据接入方案,我们的技术人员会在客户数据接入过程中提供完善的技术支持;
      • 我们所有的 SDK 和导入工具都提供了 debug 模式,用于数据接入过程中的调试;
      • 我们可以为客户提供测试环境,事实上在神策分析 1.5 多 Project 功能上线后,客户可以自己开一个 Project 来进行测试;
    • 如果在以上方案之下,依然由于某些原因导致有错误数据进入,则我们建议客户按照如下步骤先删除数据再重新导入数据:
      • 使用 sa_clean 工具删除出错的那些 Event 在出错的时间段内的数据;
      • 在之前出错的原始数据的基础上,完成对数据的修改,修改后再重新导入;
      • 如果之前出错的原始数据客户没有备份,我们可以酌情协助从系统中还原导出。

14. 导入到神策分析中的属性,在导入后是否可以修改类型:

  • 为了保证导入到神策分析中数据的正确性以及相应的最优的存储方案,神策分析是坚持强类型校验的,导入到神策分析中的属性类型不能修改,但是,使用者可以按照如下方式来解决类似的需求:
    • 首先在测试的时候应该使用单独的测试项目,尽量避免测试数据导致的类型错误。而对于测试项目则可以通过直接重置项目来还原所有类型定义;
    • 如果已经是正式项目了,那么可以导入一个新的属性,使用正确的类型,在属性命名上与旧的属性区分,显示名上,新属性可以使用旧属性原本的显示名,同时隐藏旧的属性;
    • 如果真的有非常强烈的需求,可以寻求神策分析技术支持人员的帮助,在不修改属性名的情况下进行属性类型的修改,但是无法保留该属性的历史数据,且需要停止导入。

15. 神策分析 iOS、Android SDK 如何发送数据?是否会影响 App 的用户体验?

  •  默认情况下,iOS、Android SDK 都采用非常保守的发送策略,以保证用户体验为核心,具体策略如下:

    • 普通模式 (非 Debug)

      1.  login 外,所有 track / profile_set / profile_append 等操作,均先缓存在本地,当缓存的数据量满足以下任一条件,且当前网络为 3G/4G/Wifi 时,发送数据;
      2. 本地缓存的数据量积累到一定数目(默认为 100 条);
      3. 离上次发送间隔了一定时间(默认为 15 秒);
      4. 对于 login 操作,当网络为 3G/4G/Wifi 时立即发送所有数据,否则缓存在本地;
      5. 当 App 进入后台时,会尝试发送数据;
      6. Android SDK 在 onPause 中尝试发送;
      7. iOS SDK 在 didEnterBackground 中尝试发送;
    • Debug 模式

      1. 对于任何操作,无论什么网络条件,都会立即发送数据,并校验返回的验证结果。
        注意:Debug 模式是为方便开发者调试而设置的模式,该模式会逐条校验数据并在校验失败时抛出异常,性能远低于正常模式。线上环境使用 Debug 模式会严重影响性能并存在崩溃风险,产品上线前请务必替换掉/关闭 Debug 模式。

用户可以在任何时候,调用 flush 发送数据。当数据发送失败时,会继续缓存在本地,直到发送成功。当缓存数据量过多时,会删除最旧的 100 条数据,然后再存入新的数据。其中 Android 默认缓存数据量阈值为 32MB,iOS 为 10000 条。

在 iOS 或 Android SDK 初始化后,用户可以调用 API 修改发送条件,如设定缓存累积条目数、发送时间间隔以及是否在 App 进入后台时发送数据,具体请参考 iOS、Android SDK 的文档。