一、需求

需求是要能统计作品在各个渠道投放时的转化率。这个需求很重要,没有它,无法实现业务闭环,就无法跑通业务。
WX20210807-071943.png
注: 应用场景 - RPA大赛,需分渠道。

二、为何自研

要实现这个功能,就需要自定义事件统计。普通的 pv 统计,是无法满足要求的。

  • 支持自定义事件统计;
  • 支持 Open API(提供给H5端和后台管理端) —- 重要

市场上第三方的统计服务:如友盟、百度统计、arms,经调研发现,要么收费很贵(百度统计一年好几万),调研结果如下:

  • 百度统计,免费的不可用,需要开通一个付费服务,每年3万左右,价格太贵;
  • 友盟,web统计不支持自定义事件和 Open API;
  • 腾讯移动分析,支持自定义事件上报,但 Open API 里没有提到自定义事件;
  • 阿里ARMS,不支持自定义事件的 Open API 获取;

所以选择自研一个,包括:

  • 日志收集
  • 日志分析
  • OpenAPI

三、自研统计服务 EAS

自定义事件统计,是一个线上产品必备的统计功能。EAS(Event Analytics Server) 事件统计服务 —— 为了实现分渠道统计

核心功能点

  • nginx 收集统计日志;
  • 日志收集拆分定时清理
  • 分析日志,得到统计结果;
  • 提供 OpenAPI 服务;

注意事项

  • 像这种比较专业的服务,尽量使用靠谱的第三方(哪怕花点钱),自研是下策;
  • 要做的是一个能满足大众需求的自定义事件统计服务,而不仅仅是为分渠道统计服务的 —— 具备通用性和扩展性;

四、技术方案设计

4.1 需求分析

多渠道
渠道就是一个url参数,如 http://127.0.0.1:3002/p/100-xxx?channel=1(注:100是作品id,xxx是uuid,channel就是渠道号)。一个作品可以对应多个渠道,至少要有一个渠道。

从技术角度,一个作品就是一个资源实体一个url,渠道仅仅是一个参数。但从用户使用角度来看,一个作品就可以发布多个页面,多个二维码。

4.2 主要流程

统计服务 (1).png

  • 分析日志结果是个离线操作。离线操作可理解为每天凌晨定时分析前一天的日志,然后将分析结果落到数据库中。

4.3 如何实现

4.3.1 Nginx 收集日志

Nginx 提供一个 web server,返回一个小图片,如 http://localhost:8083/event.png

  • 简单,无论是 server 还是 h5
  • 没有跨域
  • 小图片,小流量

Nginx 收到访问请求时会自动记录 access_log

  1. 127.0.0.1 - - [19/Feb/2021:15:21:33 +0800] "GET /event.png HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_0_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36" "-"
  2. 127.0.0.1 - - [19/Feb/2021:15:21:46 +0800] "GET /event.png?a=100 HTTP/1.1" 200 5233 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_0_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36" "-"
  3. 127.0.0.1 - - [19/Feb/2021:15:21:47 +0800] "GET /event.png?a=100 HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_0_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36" "-"
  4. 127.0.0.1 - - [19/Feb/2021:15:22:00 +0800] "GET /event.png?a=100 HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_0_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36" "-"
  5. 127.0.0.1 - - [19/Feb/2021:15:22:06 +0800] "GET /event.png?a=100&b=200 HTTP/1.1" 200 5233 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_0_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36" "-"

4.3.2 定时任务

定时任务主要做以下几件事情:

  • 定时拆分 access_log ,视流量大小,可以按天、小时、分钟来拆分;
  • 定时分析计算日志结果,例如每天凌晨 4:00 ,分析昨天的日志;
  • 定时清理历史日志文件

实现方案:

4.3.4 Open API

OpenAPI 用 nodejs 服务即可

4.4 安全与运维

4.4.1 日志服务对硬盘要求高

  • 购买服务器时,多考虑硬盘空间
  • 运维监控时,考虑硬盘监控(如达到 80% 报警) —— ali-node 有这个功能
  • 及时清理历史日志

4.4.2 安全

  • OpenAPI 设置 CORS ,只允许特定的 host 访问。
  • 日志收集,可能会被恶意灌入数据,这些靠阿里云防火墙。