采集多渠道日志数据到LTS
日志接入是指通过各种手段采集应用程序或服务在运行时产生的系统运行状态、错误信息、用户操作记录等日志信息,并将这些日志信息存储到指定的位置,以便后续分析和使用。这些日志信息对于系统运维、故障排查以及业务分析都具有重要意义。
云日志服务LTS提供实时日志接入功能,通过ICAgent插件、云服务接入、自建软件接入、API接入、SDK接入等多种方式将采集到的日志上报到LTS,满足不同场景日志接入的诉求。
- 支持40+华为云服务日志对接LTS。
- 支持Web、移动端iOS、Android和小程序日志接入LTS。
- 支持采集Logstash、Flume、Beats开源软件中的数据。
- 支持通过HTTP、HTTPS、Syslog、Kafka等标准协议接入数据。
背景信息
“我要点外卖”是一个平台型电商网站,涉及用户、餐厅、配送员等。用户可以在网页、App、微信、支付宝等进行下单点菜。商家拿到订单后开始加工,并自动通知周围的快递员。快递员将外卖送到用户手中。
在运营的过程中,发现了如下的问题:
- 获取用户难,投放一笔不小的广告费到营销渠道(网页、微信推送),收获了一些用户,但无法评判各渠道的效果。
- 用户经常抱怨送货慢,但慢在什么环节,接单、配送还是加工,如何进行优化?
- 用户运营,经常搞一些优惠活动,但无法获得效果。
- 调度问题,如何帮助商家在高峰时提前备货?如何调度更多的快递员到指定区域?
- 客服服务,用户反馈下单失败,用户背后的操作是什么?系统是否有错误?
数据采集面临的难点
在数据化运营的过程中,第一步是如何将散落的日志数据集中收集起来,其中会遇到如下挑战:
- 多渠道:例如广告商、地推(传单)等。
- 多终端:网页版、公众账号、手机、浏览器(Web、移动端页面)等。
- 异构网:VPC、用户自建IDC,华为云ECS等。
- 多开发语言:核心系统Java、前端Nginx服务器、后台支付系统C++。
- 设备:商家有不同平台(X86、ARM)设备。
我们需要把散落在外部、内部的日志收集起来,然后通过LTS实现统一管理日志。
统一管理日志
- 在云日志服务LTS控制台创建日志组,详细操作请参考管理日志组。
- 在云日志服务LTS控制台为不同数据源产生的日志创建日志流,详细操作请参考管理日志流,例如:
- 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(订单日志)
- 如需要对原始数据进行加工,可以通过创建日志加工任务,详细请参考DSL加工。
DSL加工的功能在邀测中,仅支持华北-北京四、华东-上海一、华南-广州局点的内测用户使用,其他局点暂不支持。
采集用户推广日志
为获取新用户,一般有两种方式:
- 网站注册时直接投放优惠券。
- 其他渠道扫描二维码,投放优惠券。
- 传单二维码
- 扫描网页二维码登录
实施方法:
定义如下注册服务器地址,生成二维码(传单、网页)供用户注册扫描。用户扫描该页面进行注册时,就可以得知用户是通过特定来源进入的,并记录日志。
http://example.com/login?source=10012&ref=kd4b
当服务端接受请求时,服务器输出如下日志:
2024-06-20 19:00:00 e41234ab342ef034,102345,5k4d,467890
收集方式:
- 应用程序输出日志到硬盘,通过ICAgent采集日志,详细请参考云主机ECS文本日志接入LTS。
- 应用程序通过SDK写入,详细请参考SDK概述。
采集服务端数据
支付宝和微信公众账号编程是典型的Web端模式,一般会有四种类型的日志,可以使用SDK上报日志的方式,详细请参考云日志服务支付宝小程序SDK、云日志服务微信小程序SDK。
- Nginx和Apache访问日志
10.1.168.193 - - [01/Mar/2024:16:12:07 +0800] "GET /Send?AccessKeyId=8225105404 HTTP/1.1" 200 5 "-" "Mozilla/5.0 (X11; Linux i686 on x86_64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2"
- Nginx和Apache错误日志
2024/04/18 18:59:01 [error] 26671#0: *20949999 connect() to unix:/tmp/fastcgi.socket failed (111: Connection refused) while connecting to upstream, client: 10.101.1.1, server: , request: "POST /logstores/test_log HTTP/1.1", upstream: "fastcgi://unix:/tmp/fastcgi.socket:", host: "example.com"
- 应用层日志
应用层日志可以把事件产生的时间、地点、结果、参数等记录详细,扩展类字段一般放在最后。
{"labels":{"cccdasd":51,"platform":"wx"},"logs":[{"contents":[{"aaa":"13123","__client_time__":1728565099070}]}]}
- 应用层错误日志
{"errorCode":"LTS.403","errorMessage":" request header auth is empty"}
实施方法:
- 日志写到本地文件,通过创建日志采集任务写到指定日志流中。
- Docker中产生的日志可以使用CCE接入LTS进行采集。
- C#、Python、Java、PHP、C等可以使用SDK写入。
采集终端用户日志
端侧日志全面采集接入LTS,例如Web浏览器、IOS、安卓、百度小程序、微信小程序、钉钉小程序、快应用等多类端侧日志。LTS提供了多种移动端SDK,实现了缓存发送、异常重试、批量发送等稳定功能,用户快速集成即可全面采集移动端日志到LTS。
采集方案:
- 移动端:可以使用移动端iOS SDK,Android或MAN(移动数据分析)接入。
- ARM设备:ARM平台可以使用Native C交叉编译。
- 商家平台设备:X86平台设备可以用SDK、ARM平台可以使用Native C交叉编译。
实施方法:
- 日志写到本地文件,通过创建日志采集任务写到指定日志流中。
- Docker中产生的日志可以使用CCE接入LTS进行采集。
- C#、Python、Java、PHP、C等可以使用SDK写入。
采集Web/移动端页面用户行为日志
采集方案:
页面用户行为收集可以分为两类:
- 页面与后台服务器交互:例如下单、登录、退出等。
- 页面无后台服务器交互:请求直接在前端处理,例如滚屏、关闭页面等。
实施方法:
使用匿名写入采集日志,详细请参见使用匿名写入采集日志。
使用匿名写入采集日志功能仅支持华北-北京四、华东-上海一、华南-广州区域的白名单用户使用,如有需要,请提交工单,其他区域暂不支持申请开通。
采集服务器日志
采集方案,例如:
- Syslog日志
Aug 31 11:07:24 zhouqi-mac WeChat[9676]: setupHotkeyListenning event NSEvent: type=KeyDown loc=(0,703) time=115959.8 flags=0 win=0x0 winNum=7041 ctxt=0x0 chars="u" unmodchars="u" repeat=0 keyCode=32
- 应用程序Debug日志
__FILE__:build/release64/sls/shennong_worker/ShardDataIndexManager.cpp __LEVEL__:WARNING __LINE__:238 __THREAD__:31502 offset:816103453552 saved_cursor:1469780553885742676 seek count:62900 seek data redo log:pangu://localcluster/redo_data/41/example/2016_08_30/250_1472555483 user_cursor:1469780553885689973
- Trace日志
[2013-07-13 10:28:12.772518] [DEBUG] [26064] __TRACE_ID__:661353951201 __item__:[Class:Function]_end__ request_id:1734117 user_id:124 context:.....
采集方法:
- 日志写到本地文件,通过创建采集任务写到指定日志流中。
- Docker中产生的日志可以使用CCE接入LTS进行采集。
- C#、Python、Java、PHP、C等可以使用SDK写入。