Golang SDK
在使用前,请先阅读数据模型的介绍。
1. 集成神策分析 SDK
在 Golang 代码中集成 神策分析 SDK,使用神策分析采集并分析用户数据。
我们推荐 Golang 官方工具管理 Golang 项目并获取神策分析 SDK:
go get github.com/sensorsdata/sa-sdk-go或更新本地已经存在的sdk:
go get -u github.com/sensorsdata/sa-sdk-go也可以从 Github 下载 神策分析 SDK 的源代码。
SDK 需要 Golang 1.6以上,不依赖第三方库。
目前golang sdk不支持windows
2. 初始化神策分析 SDK
2.1 获取配置信息
首先从神策分析的主页中,获取数据接收的 URL 和 Token(Cloud 版)。

如果使用神策分析 Cloud 服务,需获取的配置信息为:
如果用户使用单机版私有部署的神策分析,默认的配置信息为:
数据接收地址: http://{$host_name}:8106/sa?project={$project_name}
(注:神策分析 1.7 及之前的版本,单机版私有部署默认端口号为 8006)
如果用户使用集群版私有部署的神策分析,默认的配置信息为:
其中 {$host_name} 可以是集群中任意一台机器。
如果私有部署的过程中修改了 Nginx 的默认配置,或通过 CDN 等访问神策分析,则请咨询相关人员获得配置信息。
2.2 在程序中初始化 SDK
在程序中初始化的代码段中构造神策分析 SDK 的实例:
其中 YOUR_SERVER_URL 是前文中从神策分析获取的数据接收的 URL。用户程序应该一直持有该实例,直到程序结束。程序退出前,需要使用 Close() 方法显式关闭,否则可能丢失部分缓存的数据。
使用神策分析时,引入神策分析 SDK 后首先初始化一个 consumer,接着初始化神策分析对象
初始化神策分析对象的接口为
例子
至此,我们已经可以正常使用神策分析 SDK 了。需了解更多关于 SDK 的使用方法,可以跳到本文末尾的 控制神策分析 SDK 一节。
3. 追踪事件
第一次接入神策分析时,建议先追踪 3~5 个关键的事件,只需要几行代码,便能体验神策分析的分析功能。例如:
图片社交产品,可以追踪用户浏览图片和评论事件
电商产品,可以追踪用户注册、浏览商品和下订单等事件
用户通过 Track() 接口记录事件,对于任何事件,必须包含用户标志符(distinctId)和事件名(event)两个参数。同时,用户可以在 Track() 的第三个参数传入一个 map[string]interface{} 对象,为事件添加自定义事件属性。以电商产品为例,可以这样追踪一次购物行为:
接口
例子
3.1 事件属性
如前文中的样例,追踪的事件可以设置自定义的事件属性,例如浏览商品事件中,将商品 ID、商品分类等信息作为事件属性。在后续的分析工作中,事件属性可以作为统计过滤条件使用,也可以作为维度进行多维分析。对于事件属性,神策分析有一些约束:
事件属性是一个
map[string]interface{}对象map中每个元素描述一个属性,Key 为属性名称,必需是string类型map中,每个元素的 Value 是属性的值,支持string、int、float64、[]string、time.Time
对于神策分析中事件属性的更多约束,请参考 数据格式
3.1.1 系统预置属性
如前文中样例,事件属性中以 "$" 开头的属性为系统预置属性,在自定义事件属性中填入对应 "$" 开头的属性值可以覆盖这些预置属性:
$ip- 填入该属性,神策分析会自动根据 IP 地址解析用户的省份、城市信息,该属性值为string类型;$time- 填入该属性,神策分析将事件时间设置为属性值的时间,该属性值必须为time.Time。请注意,神策分析默认会过滤忽略 365 天前或 3 天后的数据,如需修改请联系我们。
关于其他更多预置属性,请参考 数据格式 中 "预置属性" 一节。
4. 用户识别
在服务端应用中,神策分析也要求为每个事件设置用户的 Distinct Id,这有助于神策分析提供更准确的留存率等数据。
对于注册用户,推荐使用系统中的用户 ID 作为 Distinct Id,不建议使用用户名、Email、手机号码等可以被修改的信息。
所有的 Track 和 Profile 系列方法建议明确指定 isLoginId 参数,以便明确告知神策分析用户 ID 的类型。
4.1 用户注册/登录
当同一个用户的 Distinct Id 发生变化时(一般情况为匿名用户注册行为),可以通过 TrackSignup() 将旧的 Distinct Id 和新的 Distinct Id 关联,以保证用户分析的准确性。
接口
例子
注意,对同一个用户,TrackSignup() 一般情况下建议只调用一次(通常在用户 注册 时调用),用户 登录 前后的行为的关联建议在业务端实现。在神策分析 1.13 版本之前,多次调用 TrackSignup() 时,只有第一次关联行为是有效的。神策分析 1.13 版本之后提供了多设备 id 关联的方法。更详细的说明请参考 如何准确的标识用户,并在必要时联系我们的技术支持人员。
5. 设置用户属性
为了更准确地提供针对人群的分析服务,神策分析 SDK 可以设置用户属性,如年龄、性别等。用户可以在留存分析、分布分析等功能中,使用用户属性作为过滤条件或以用户属性作为维度进行多维分析。
使用 ProfileSet() 设置用户属性:
接口
例子
对于不再需要的用户属性,可以通过 ProfileUnset() 接口将属性删除。
用户属性中,属性名称与属性值的约束条件与事件属性相同,详细说明请参考 数据格式。
5.1 记录初次设定的属性
对于只在首次设置时有效的属性,我们可以使用 ProfileSetOnce() 记录这些属性。与 ProfileSet() 接口不同的是,如果被设置的用户属性已存在,则这条记录会被忽略而不会覆盖已有数据,如果属性不存在则会自动创建。因此,ProfileSetOnce() 比较适用于为用户设置首次激活时间、首次注册时间等属性。
接口
例子
5.2 数值类型的属性
对于数值型的用户属性,可以使用 ProfileIncrement() 对属性值进行累加。常用于记录用户付费次数、付费额度、积分等属性。
接口
例子
5.3 列表类型的属性
对于用户喜爱的电影、用户点评过的餐厅等属性,可以记录列表型属性。需要注意的是,列表型属性中的元素必须为 string 类型,且元素的值会自动去重。关于列表类型限制请见 数据格式 7.3 属性长度限制。
接口
例子
6. 设置神策分析 SDK
Golang SDK 主要由以下两个组件构成:
SensorsAnalytics: 用于发送数据的接口对象,构造函数需要传入一个 Consumer 实例
Consumer: Consumer 会进行实际的数据发送
为了让开发者更灵活的接入数据,神策分析 SDK 实现了以下 Consumer:
6.1 LoggingConsumer(推荐)
用于将数据输出到指定目录并按天切割文件,支持通过参数指定是否按小时切割,一般用来处理实时数据,生成日志文件并使用 LogAgent 等工具导入。
初始化接口
例子
LoggingConsumer的第一个参数是保存文件前缀,第二个参数表示是否启用按小时切割,默认是每天0点切割保留所有文件。
按小时切割关闭的情况下,文件将保存在以prefix.YYYY-MM-DD(例如:假设prefix为/data/sa/access.log,当天是2018-04-13,则输出文件为/data/sa/access.log.2018-03-13)
按小时切割开启的情况下,在小时整点切割,文件将保存在以prefix.YYYY-MM-DD.H(例如:假设prefix为/data/sa/access.log,当天是2018-04-13 14点,则输出文件为/data/sa/access.log.2018-03-13.14)
注意,请不要使用多进程写入同一个日志文件,可能会造成数据丢失或者错乱。如果需要多进程写入,请使用 ConcurrentLoggingConsumer。
6.2 ConcurrentLoggingConsumer(推荐)
ConcurrentLoggingConsumer不支持windows,windows下请使用LoggingConsumer
用于将数据输出到指定目录,并自动按 天 切割文件,支持按小时切割,参数含义同LoggingConsumer ,与 LoggongConsumer 不同的是,它支持多进程写入同一个文件。
初始化接口
例子
注意: LogAgent 配置文件中一定要注释掉 real_time_file_name 参数,否则无法正常导入数据。已使用 LoggingConsumer 的客户建议按照如下步骤切换到 ConcurrentLoggingConsumer:
第 1 步 停掉 LogAgent,并注释掉 LogAgent 配置中的 real_time_file_name 参数。
第 2 步 将日志目录下的 real_time_file_name 的文件加上当前时间的后缀 ".YYYY-MM-DD"。
第 3 步 后端程序升级切换到 ConcurrentLoggingConsumer。
第 4 步 重新启动 LogAgent。
6.3 DebugConsumer(测试使用)
用于校验数据导入是否正确,关于 Debug 模式 的详细信息,请进入相关页面查看。请注意,不要在生产环境中使用 Debug 模式。
初始化接口为
例子
6.4 DefaultConsumer
通常用于导入小规模历史数据。由于是同步发送数据,因此不要用在任何线上的服务中。 普通 Consumer,实现,逐条、同步的发送数据给接收服务器。
初始化接口
例子
6.5 BatchConsumer
通常用于导入小规模历史数据,或者离线 / 旁路导入数据的场景。由于是同步发送数据,因此不要用在任何线上的服务中。 批量发送数据的 Consumer,当且仅当数据达到指定的量时,才将数据进行发送。
初始化接口
例子
Last updated
Was this helpful?