AITLibraManager埋点服务设计
# 1. 背景
《AITLibra算法效果测试框架》发布使用后,我们要关注其价值和收益,是否给算法效果测试自动化带来了效率提升。
各位工程师有没有使用呢?又是如何使用的?使用情况怎么样?使用AITLibra框架创建了哪些项目?执行了哪些任务?哪些工程师在哪些设备上用什么版本的AITLibra进行了测试?有太多问号,但不能挨个去问各位同学,也不能让大家手动去填表记录,应该让数据多跑路,工程师少动手。
因此我们要进行“埋点”。埋点的专业术语应该是“事件追踪”,但又不仅仅是“事件”而已。
本着能现成就不改造,能改造就不创造的原则,首先我们去开源社区找轮子。
看到了很多项目,但大多数都是适配Web项目前端埋点,或者移动端埋点的系统,且系统庞大复杂,在我们这里有些杀鸡用牛刀。
还有一种方案就是Prometheus生态系统的PushGateway,利用prometheus_client的SDK,主动push数据给PushGateway,然后由Prometheus从PushGateway服务pull数据,最后用Grafana设计DashBoard,完成整个需求。一切看起来都很美好,但这里有一个最重要的我问题,AITLibra属于单次运行,但其统计数据却是持续且持久的,需要把每个单次任务的数据都整合在一起分析;Promethues的设计逻辑是持续在线的时序统计,一旦服务重启或停止运行后,统计将从零开始,这使得我们不得不放弃Prometheus这个好轮子。
# 2. 需求分析与数据库设计
首先要考虑清楚,我们需要统计哪些数据:
谁在用
- 姓名
- IP
- 操作系统
- ATILibra的版本
在干什么
- 项目信息
- 任务信息
- 配置文件内容
- 插件代码内容
结果怎么样
- 各个pipeline的事件状态统计
- 任务成功/失败数
- 项目成功/失败数
- 统计指标数据json文件
想清楚这些后,我们就可以设计数据库表了,我们选则最熟悉的MySQL数据库:

# 3. API服务设计
AITLibra框架运行在各台服务器或PC上,作为服务端的AITLibraMangaer不知道客户端会在哪些设备上运行,最简单直接方式就是客户端主动push数据到服务端。
设计几个API来完成数据push的功能:
- 用户信息注册:
- 支持通过json文件批量注册用户信息
- 支持单个用户信息注册
- 用户信息验证
- 校验是否用户已注册
- 获取最新的AITLibra版本信息(后台服务定时自动从PyPiManger更新版本信息)
- 上报设备信息(关联用户)
- 上报项目信息
- 上报任务信息(关联项目、用户)
- 上报事件信息(关联任务)
- 上附件数据(关联事件)
# 4. AITLibra框架与API的通信设计
AITLibra框架按照设计划分了多个pipeline,每个pipeline内又有子步骤,这每个步骤我们称之为“事件”,这是我们需要收集的用户使用状态的最细粒度。
按照整个运行逻辑,我们设计时序图如下:

# 5. 设计DashBoard
通过在AITLibra框架内埋点,只要AITLibra被使用,AITLibraManager就会源源不断的收到上报的数据。
现在需要一个DashBoard来实时查看当前的数据统计信息,我们选用Grafana,其支持MySQL数据源。
关于Grafana的部署和详细介绍,见《Prometheus+Grafana打造性能测试监控服务》 (opens new window)
我们主要使用Grafana的Table和Stat控件,直接编写SQL语句即可,看效果
