• Stars
    star
    321
  • Rank 130,752 (Top 3 %)
  • Language
    Python
  • Created almost 5 years ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

open_server for sensorsdata ghost_sa(鬼策)的用途是接收 神策SDK 上报的埋点数据,移动广告监测,站外阅读监测,短链创建与解析,反爬,接入控制与管理,用户分群与召回等功能

ghost_sa

open_server for sensorsdata

感谢:

感谢神策公司开源了他们的SDK,让用不起神策服务端的中小微企业也可以使用大数据带来的便利。

ghost_sa(鬼策)的结构设计主要考虑方便技术资源不足的中小微企业使用,部署测试快速,并支持复杂数据字段上报(神策原版不支持),所以在长时间段,多字段扫描的场景,性能不如神策原版。需要完整的神策,请购买神策官方授权,他们的程序很给力。https://www.sensorsdata.cn/?utm_source=github&utm_campaign=ghost_sa

贡献列表

https://github.com/phillip2019/ 规范了程序结构,提供beacon兼容,主流程优化等。

https://github.com/toddlerya/ 提供了62进制编码的算法实现。

介绍:

ghost_sa(鬼策)可以理解为不带前端界面的神策服务端。 主要功能有

1.接收 神策SDK 上报的数据 (与神策兼容)

2.实现神策上的短链创建与解析功能 (与神策兼容)

3.移动端广告监测功能(支持追溯移动端广告来源,支持信息流和积分墙两种模式)。(大部分与神策兼容,各有所长)

4.移动端激活回调 (与神策方式不同)

5.站外阅读监测与服务端二维码返回支持(也可用于邮件打开监测)(截止更新时,神策无此功能)

6.根据用户行为,触发动作 (截止更新时,神策无此功能)

7.定时任务 (截止更新时,神策仅定时分群)

8.用户分群 (与神策方式不同)

9.召回信息发送 (与神策方式不同)

10.支持黑名单功能,便于提高一些免费邮件如阿里的授信,也减少其他渠道的无效召回浪费 (与神策方式不同)

11.接入控制功能,结合CDN实现反爬虫,结合后端服务实现反作弊,反羊毛等。(截止更新时,神策无此功能)

使用了flask框架,可以通过gunicorn部署。数据库建议使用TiDB,实测1天200万事件量,单次查询当天事件在10毫秒左右,查询1个月范围的数据,返回在30-60秒左右。 实际使用在TiDB最低的配置3x8c_32g(ecs.i2g.2xlarge)的情况下,支持600的峰值QPS,每天可以支持500万的事件量。 如果搭配Kafka使用,单台4c8g(ecs.t5-c1m2.xlarge)的鬼策服务端和Kafka混合部署,可以承受2000-3000峰值QPS,一天2000万事件量。 如果只是体验和测试功能,也可以用MySQL 5.7(含)以上的版本,不过性能很差。

支持使用Kafka。

目前经过测试,支持IOS,Android,JS,小程序,PHP,Python,JAVA的SDK上报,其他端应该也支持,不过不保证。 SDK可以在神策的项目中下载 https://github.com/sensorsdata SDK的使用方法,可以直接查看神策官方文档 https://www.sensorsdata.cn/manual/?utm_source=github&utm_campaign=ghost_sa

框架说明:

/flask_main.py <--主程序,执行后即可开始接收数据

/kafka_consumer.py <--Kafka订阅程序(如果开启Kafka支持,使用此程序订阅并写入数据库)

/scheduler.py <--定时器程序,用来定时触发进行用户分群等任务

/trigger.py <--触发器订阅程序(如果配置了非独立触发器,则在写入埋点时同步触发,无需运行触发器。独立触发器不受插库性能影响,响应速度更快。而且独立增删触发器的时候,不用担心入库数据中断。)

/configs <--配置,包括查询密码,数据库密码,第三方依赖的密码都在这里配置

/component <--主要组件,运行程序所需要的主要组件都在这里

/component/messenger.py <--消息自动发送程序(发送消息列表里符合时间要求且标记为自动的消息)

/scheduler_jobs <--用户分群与自动召回的相关组件

/scheduler_jobs/scheduler_job_creator.py <--自动分群任务创建程序和自动召回模板创建程序

/geoip <--IP和ASN识别组件,下载的mmdb需要放在这里

/image <--需要返回的1像素图片所在处。当然,不嫌流量贵,也可以换成其他图片哈

/tools <--迁移工具,包括实时同步神策的数据和迁移历史数据进入鬼策

/logs <--日志,目前只会记录错误日志,按天分

/data_export <--迁移用数据,存放神策历史数据,用于导入鬼策。导入完后,可删除

/trigger_jobs <--动作触发器所触发的动作。

安装初始化:

安装之前需要先准备好数据库,测试功能可以用mysql5.7。

!!!正式环境建议使用tidb或其他newsql。

1.打开/geoip/geo.py 文件,根据文件里的地址,下载ipcity和ipasn文件,并放到/geoip目录下。

2.配置/configs/db.py 里的数据库连接参数。

3.打开/configs/admin.py 修改查询密码和Kafka支持(默认关闭,直接写入数据)。如果开启Kafka支持,需要配置/configs/kafka.py和运行/kafka_consumer.py来订阅数据。

4.打开/component/setup.py 在最后一行修改自己想要创建的项目名。运行setup.py程序,会完成数据表创建,鬼策服务端初始化完成。

5.运行/flask_main.py 可以开始接收数据了。

注意:

鬼策在基本功能上将持续依赖神策SDK,并持续维护兼容和可迁移性。

但鬼策在产品理念与路线上与神策有差异,神策倾向给运营赋能,对运营友好,鬼策倾向自动化运营取代传统运营,对技术友好。所以在一些高级功能,特别是理念不同的方面,将采取完全不同的产品路线,功能也会存在不兼容的情况,大家各取所需,尽量支持神策原版,有了神策开源,才有的鬼策。

鬼策没有兼容魔改神策SDK且不注明源于神策的各种程序的计划。吃水不忘挖井人是对开源社区基本的尊重。

目前已知问题问的比较频繁的有:

1.鬼策建议js用image方式上报数据,这个请参考神策官方文档 https://manual.sensorsdata.cn/sa/latest/tech_sdk_client_web_high-7549300.html?utm_source=github&utm_campaign=ghost_sa 的相关说明:( 神策系统 1.10 版本以后 ) 支持使用 'ajax' 和 'beacon' 方式发送数据,这两种默认都是 post 方式, beacon 方式兼容性较差。

2.不支持神策的新版本可视化全埋点功能,所以请使用较新SDK的用户,根据神策文档 https://manual.sensorsdata.cn/sa/latest/enable_visualized_autotrack-7548675.html?utm_source=github&utm_campaign=ghost_sa 关闭 可视化全埋点功能,减少报错。

更多文档:

接口文档及示例 链接: https://www.apifox.cn/apidoc/shared-48bfd396-858f-442a-b290-5a5a5404ea97 访问密码: gLC6ZUQF

wiki https://github.com/white-shiro-bai/ghost_sa/wiki

讨论组 https://github.com/white-shiro-bai/ghost_sa/discussions

国内用户可以加我微信 Ben_Xiaobai ,加入鬼策微信群。请直奔主题,不要绕来绕去。

也可以通过视频,了解鬼策。这里有一个以鬼策为基础的视频分析课(还在佛系更新)

https://space.bilibili.com/920446/channel/detail?cid=124583&utm_source=github&utm_campaign=ghost_sa

2020年12月28日版本升级注意事项(to_20201015):

1.鬼策老用户如需升级2020年12月28日及以后的版本,须文件覆盖后,运行/tools/update_base_to_20201015.py程序升级数据表。该操作不可逆,但升级后的数据表与老版本鬼策兼容。但程序与老版本鬼策不兼容,需要完整覆盖安装目录才能继续运行。建议新老版本分开两个目录放置。clone新目录->升级->运行新目录的程序即可。

2.由于TiDB v4的新特性,鬼策缩短了一些之前预留较长的字段,以提高兼容性,mysql版本也不需要额外使用安装程序,统一使用/component/setup.py安装即可。缩短后我已经在生产环境使用超过半个月,尚无不良影响。如果您的应用环境特殊,请谨慎升级TiDB到v4及以后版本,并自行修改建表程序中的字段长度。如果您的鬼策是在TiDB v3环境下安装的,那么升级到TiDB v4后,字段长度不会改变,依然有效。

2021年03月15日版本升级注意事项(to_20210226):

1.2020年12月28日之前版本的鬼策老用户如需升级2021年03月15日及以后的版本,须文件覆盖后,运行/tools/update_base_to_20210226.py程序升级数据表。或2020年12月28日之后版本的鬼策老用户如需升级2021年03月15日及以后的版本,须文件覆盖后,运行/tools/update_20201015_to_20210226.py程序升级数据表。该操作不可逆,但升级后的数据表与老版本鬼策兼容。但程序与老版本鬼策不兼容,需要完整覆盖安装目录才能继续运行。建议新老版本分开两个目录放置。clone新目录->升级->运行新目录的程序即可。

2.黑名单开关可以在configs/admin.py里配置

2021年05月19日版本升级注意事项(to_20210406):

1.2021年5月19日之前的版本升级到这个版本,须文件覆盖后,运行/tools/下对应的版本to_20210406的程序升级数据库。

2.接入控制的全局参数在"configs/admin.py"里配置。项目全局阈值在project_list表里配置。事件阈值在{project}_properties里配置。事件优先于项目全局优先于全局。具体可在"docs/接入控制"下找到文档,包含整个功能的介绍

3.该版本后,将不再提供跨版本的升级程序。今后再发布更新,将仅提供从该版本升级或全新安装。

4.此次更新修改了trigger功能kafka消费组的名字。如果独立订阅的,为了避免部分数据重复。所以默认订阅方式改为了latest。可在/configs/kafka.py下自行修改为需要的订阅方式。

2023年05年28日版本升级注意事项(update_shortcut):

1.此次升级仅提供从20210406的版本升级。再之前的版本使用,请先升级到20210406再进行。

2.覆盖除configs目录外的所有目录。

3.查看 /tools/update_shortcut.py 下 import_list 变量,看是否需要增加。默认是转换导入和神策迁移的。使用suoim或微博的链接是不会转化的。目的是进一步缩短短链的长度。如果用量够大,真的顶到了跟微博或suoim重合,也有正常跳过不会重复,连着1000个重号(几乎不可能),才会抛1个错。但是不会造成执行不下去。如果真的是希望接着suoim或者微博的短链后面,保证短链长度的一致性。可以自行添加。

4.执行 /tools/update_shortcut.py 等待升级完成。升级完会有提示。

5.重启 /flash_main.py。后续再请求生成短链,就不依赖任何第三方接口了。如果仍然希望使用第三方接口生成短链,可以在 /component/shorturl.py 中添加。

近期工作调整,没有太多时间开发,更新维护不会停的,但是顺序可能会有点变化。

重构2.0版本,可能延期

计划合并部分 https://github.com/phillip2019/ghost_sa 代码:

提高代码质量,降低早期因为不会写造成的潜在风险。提高beacon的兼容性,改进日志功能,优化性能。

支持Hadoop,clickhouse等其他类型数据库

计划改进:

支持oCPC广告位管理分发功能,支持第三方回调及第三方监测(如秒针),简单的效果管理,支持静默广告功能(如刷公众号,刷阅读量,刷SEO等)

时间戳精度提高到16位

可选内存缓存,减少update数量,提高性能

ghost_console(管理端)功能补齐

增加连接池,提高高并发性能

召回功能适配更多的渠道,兼容OAID和CAID。

支持项目管理和神策的crc校验功能,减少恶意攻击和恶意刷量。