为什么别人家的APP,上报日志就这么省流量?

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: APP一般如何上报日志?使用类似于Google Analytics的第三方工具;自己制订私有协议进行上报;使用HTTP协议,通过GET参数传递需要上报的数据。

为了统计APP内用户行为,或者需要收集某些产品数据,APP往往需要进行日志上报,日志上报往往又非常费流量,大家的APP是怎么上报日志的呢?

画外音:用户流量的大头,是日志上报?


APP可不可以不上报日志,只从服务器日志统计用户的行为和产品数据?
不行,有些用户行为不会与服务器进行交互,例如“卡片切换”,服务器日志无法完成所有统计。


APP一般如何上报日志?
常用方法有这么几种。


(1)使用类似于Google Analytics第三方工具

优点:无需开发

缺点:不能做个性化统计


(2)自己制订私有协议进行上报;

优点:节省流量

缺点:开发成本高

画外音:例如,TCP二进制协议,可定制化,又省流量。


(3)使用HTTP协议,通过GET参数传递需要上报的数据。


如何通过HTTP协议进行上报?

可以在Web-Server下放置一个文件,APP发起HTTP请求访问这个文件,通过GET参数传递数据,并通过分析access日志来得到想要的数据。


如何通过GET参数传递数据?

一般又有两种方式:

(1)约定格式法;

(2)KV法。


什么是“约定格式法”?

约定格式法:约定分隔符,约定占位符,约定每个字段的含义,例如:

http://daojia.com/up?bj1939[login]


约定如下:

(1)被访问文件是up;

(2)分隔符是[];

(3)第一个字段[bj]代表城市,第二个字段代表日期,第三个字段代表时间,第四个字段代表用户id,第五个字段代表行为。


该方法缺点是:扩展性较差,有时候某些字段没有值,也必须在相应的位置保留占位符,因为每个字段的含义都是事先约定好的,要想新增统计项,只能在GET后面新增[]。


什么是“KV法”?

KV法:通过GET参数自解释的KV方式来上报数据。


上面的例子用KV法来上报,则上报形式为:

该方法的优点是:扩展性好

缺点是:上报数据量比较大,非常消耗流量


为什么会这么消耗流量呢?

之所以消耗流量,主要有这样一些原因:

(1)无效流量多,HTTP报文有很多无效数据;
(2)
URL冗余,每次都要上报URL;
(3)
KEY冗余,每次都要上报KEY;
(4)
上报频度高,用户每次操作都要日志上报的话,上报量很大。


有没有节省流量的方法呢?

针对上述1-4点,常见的优化方案有这样一些。


痛点1:HTTP请求内无效数据多。

解决方案:手动构造HTTP请求,尽可能多的去除HTTP中的无效数据。

画外音:

如果使用第三方库构造HTTP请求,可能会带上你并不需要的UA数据。

自己构造,则可以只保留GET /up HTTP/1.1和GET传递的必须数据;


痛点2:URL冗余。

解决方案:使用尽可能短的域名来接收上报的日志。

画外音:例如,s.daojia.cn/a


痛点3:KEY冗余。

解决方案:使用尽可能短的KEY来标识数据,日志收集方一定要统一规范好KEY。

画外音:例如,city=bj可以优化为c=bj

一个BAD CASE,由于没有规范,曾经某个部门上报用户ID,不同项目中重复埋点,上报了4次:

name=shenjian&user_id=123&uid=123&user_name=shenjian

而上述name、user_id、uid、user_name都属于重复上报。


痛点4:上报频率高。

解决方案:先将数据保存到APP本地存储,再定时上报,这类优化对于PV类,SUM类,AVG类统计尤为有效。


例如,要统计登录按钮的点击次数,三次点击,传统统计可能需要上报三次:优化后,增加了一个参数,只需要上报一次:


非实时上报,应该在什么时机进行日志上报呢?

如果进行合并上报,或者批量上报,数据的时效性会有一定的影响

画外音:如果策略合理,数据误差会非常小。


为了优化,会在这样的一些时间点进行上报:
(1)
特殊时间点上报:例如,APP打开,关闭,后台转入活跃时;
(2)
按时间批量上报:例如,每隔10分钟才上报一次;
(3)
按数据量批量上报:例如,每收集10条记录才上报一次;


还有其他什么优化方案?
批量上报,
数据压缩


希望,文章的逻辑是清晰的。

本文转自“架构师之路”公众号,58沈剑提供。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
24天前
|
开发框架 .NET Docker
【Azure 应用服务】App Service .NET Core项目在Program.cs中自定义添加的logger.LogInformation,部署到App Service上后日志不显示Log Stream中的问题
【Azure 应用服务】App Service .NET Core项目在Program.cs中自定义添加的logger.LogInformation,部署到App Service上后日志不显示Log Stream中的问题
|
25天前
|
Go 开发者
【应用服务 App Service】App Service发生错误请求时,如何查看IIS Freb日志,从中得知错误所发生的模块,请求中所携带的Header信息
【应用服务 App Service】App Service发生错误请求时,如何查看IIS Freb日志,从中得知错误所发生的模块,请求中所携带的Header信息
|
25天前
|
网络协议 Go Windows
【应用服务 App Service】App Service中抓取网络日志
【应用服务 App Service】App Service中抓取网络日志
|
23天前
|
API
【Azure 应用服务】当在Azure App Service的门户上 Log Stream 日志无输出,需要如何操作让其输出Application Logs呢?
【Azure 应用服务】当在Azure App Service的门户上 Log Stream 日志无输出,需要如何操作让其输出Application Logs呢?
|
23天前
【Azure 应用服务】通过 Web.config 开启 dotnet 应用的 stdoutLog 日志,查看App Service 产生500错误的原因
【Azure 应用服务】通过 Web.config 开启 dotnet 应用的 stdoutLog 日志,查看App Service 产生500错误的原因
|
24天前
|
Java Linux C++
【Azure 应用服务】App Service For Linux 部署Java Spring Boot应用后,查看日志文件时的疑惑
【Azure 应用服务】App Service For Linux 部署Java Spring Boot应用后,查看日志文件时的疑惑
|
24天前
|
存储 Linux 网络安全
【Azure 应用服务】App Service For Linux 如何在 Web 应用实例上住抓取网络日志
【Azure 应用服务】App Service For Linux 如何在 Web 应用实例上住抓取网络日志
|
16天前
|
Web App开发 Java 视频直播
FFmpeg开发笔记(四十九)助您在毕业设计中脱颖而出的几个流行APP
对于软件、计算机等专业的毕业生,毕业设计需实现实用软件或APP。新颖的设计应结合最新技术,如5G时代的音视频技术。示例包括: 1. **短视频分享APP**: 集成FFmpeg实现视频剪辑功能,如添加字幕、转场特效等。 2. **电商购物APP**: 具备直播带货功能,使用RTMP/SRT协议支持流畅直播体验。 3. **同城生活APP**: 引入WebRTC技术实现可信的视频通话功能。这些应用不仅实用,还能展示开发者紧跟技术潮流的能力。
45 4
FFmpeg开发笔记(四十九)助您在毕业设计中脱颖而出的几个流行APP
|
10天前
|
移动开发 小程序 JavaScript
uni-app开发微信小程序
本文详细介绍如何使用 uni-app 开发微信小程序,涵盖需求分析、架构思路及实施方案。主要功能包括用户登录、商品列表展示、商品详情、购物车及订单管理。技术栈采用 uni-app、uView UI 和 RESTful API。文章通过具体示例代码展示了从初始化项目、配置全局样式到实现各页面组件及 API 接口的全过程,并提供了完整的文件结构和配置文件示例。此外,还介绍了微信授权登录及后端接口模拟方法,确保项目的稳定性和安全性。通过本教程,读者可快速掌握使用 uni-app 开发微信小程序的方法。
27 3
|
1月前
|
Web App开发 Android开发
FFmpeg开发笔记(四十六)利用SRT协议构建手机APP的直播Demo
实时数据传输在互联网中至关重要,不仅支持即时通讯如QQ、微信的文字与图片传输,还包括音视频通信。一对一通信常采用WebRTC技术,如《Android Studio开发实战》中的App集成示例;而一对多的在线直播则需部署独立的流媒体服务器,使用如SRT等协议。SRT因其优越的直播质量正逐渐成为主流。本文档概述了SRT协议的使用,包括通过OBS Studio和SRT Streamer进行SRT直播推流的方法,并展示了推流与拉流的成功实例。更多细节参见《FFmpeg开发实战》一书。
37 1
FFmpeg开发笔记(四十六)利用SRT协议构建手机APP的直播Demo