数据采集一般有两种方式,区别如下。我们这里主要讨论通过loghub流式导入(实时)采集。
方式
优势
劣势
例子
批量导入
吞吐率大,面向历史存量数据
实时性较差
ftp、oss上传、邮寄硬盘、sql数据导出
流式导入
实时,所见即所得,面向实时数据
收集端要求高
loghub、http上传、iot,queue
“我要点外卖“是一个平台型电商网站,用户、餐厅、配送员等。用户可以在网页、app、微信、支付宝等进行下单点菜;商家拿到订单后开始加工,并自动通知周围的快递员;快递员将外卖送到用户手中。
在运营的过程中,发现了如下的问题:
获取用户难,投放一笔不小的广告费对到渠道(网页、微信推送),收货了一些用户,但无法评判各渠道的效果
用户经常抱怨送货慢,但慢在什么环节,接单、配送、加工?如何优化?
用户运营,经常搞一些优惠活动(发送优惠券),但无法获得效果
调度问题,如何帮助商家在高峰时提前备货?如何调度更多的快递员到指定区域?
客服服务,用户反馈下单失败,用户背后的操作是什么?系统是否有错误?
在数据化运营的过程中,第一步是如何将散落日志数据集中收集起来,其中会遇到如下挑战:
多渠道:例如广告商、地推(传单)等
多终端:网页版、公众账号、手机、浏览器(web,m站)等
异构网:vpc、用户自建idc,阿里云ecs等
多开发语言:核心系统java、前端nginx服务器、后台支付系统c++
设备:商家有不同平台(x86,arm)设备
我们需要把散落在外部、内部日志收集起来,统一进行管理。在过去这块需要大量几种工作,现在可以通过loghub采集功能完成统一接入。
wechat-server (存储微信服务器访问日志)
wechat-app (存储微信服务器应用日志)
wechat-error (错误日志)
alipay-server
alipay-app
deliver-app (送货员app状态)
deliver-error (错误日志)
web-click (h5页面点击)
server-access(服务端access-log)
server-app (应用)
coupon (应用优惠券日志)
pay (支付日志)
order(订单日志)
如需要对原始数据进行清洗与etl,可以创建一些中间结果logstore
为获取新用户,一般有2种方式:
网站注册时直接投放优惠券
其他渠道扫描二维码,投放优惠券
传单二维码
扫描网页二维码登陆
定义如下注册服务器地址,生成二维码(传单、网页)供用户注册扫描。用户扫描该页面注册时,就知道用户通过特定来源进入,并记录日志。
当服务端接受请求时,服务器输出如下日志:
time:注册时间
session: 浏览器当前session,用以跟踪行为
source:来源渠道,例如活动a为10001, 传单为10002,电梯广告为10003
ref:推荐号,是否有人推荐注册,没有则为空
params:其他参数
收集方式:
支付宝/微信公众账号编程是典型的web端模式,一般会有三种类型日志:
nginx/apache 访问日志:用以监控、实时统计
nginx/apache 错误日志
应用层日志:应用层日志要把事件产生的时间、地点、结果、延时、方法、参数等记录详细,对于扩展类字段一般放在最后
应用层错误日志:错误发生时间、代码行、错误码、原因等
商家平台设备:x86 平台设备可以用sdk、arm平台可以使用native c交叉编译
页面用户行为收集可以分为两类:
页面与后台服务器交互:例如下单,登陆、退出等。
页面无后台服务器交互:请求直接在前端处理,例如滚屏,关闭页面等。
第一种可以参考服务端采集方法
例如:
syslog日志
应用程序debug日志
trace日志
参考服务端采集方法
loghub在各region提供 访问点,每个region提供三种方式接入点:
内网(经典网):本region内服务访问,带宽链路质量最好(推荐)
公网(经典网):可以被任意访问,访问速度取决于链路质量、传输安全保障建议使用https
私网(专有网vpc):本region内vpc网络访问