一次基于日志服务(SLS)进行前端业务埋点的实现过程

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 一次基于日志服务(SLS)进行前端业务埋点的实现过程

项目背景

从阿里云官网上可以看出,日志服务(SLS)出现的初衷是为分布式系统的数据采集和分析来设计,所以对端上的支持并不是特别完善,不如其它面向端的采集平台那样做到开箱即用,向页面流向、性能指标都需要自己开发进行采集。本文分享一下项目上,端上业务封装的方案设计思路。

实现思路

首先要清楚的问题是我们需要进行什么分析?是着重分析业务功能的使用情况还是只需要了解基础的PV、UV数据?需不需要进行性能分析?需不需要进行链路分析?

明白数据采集的需求之后就是把需求拆解成指标,也就是最小采集单位。比如对于功能的使用情况这个需求,就可以通过公式 渗透率 = 功能使用人数 / 活跃用户数 把它拆解成2个指标。

有了指标之后我们再考虑该怎么通过(尽可能少的)埋点来采集这些指标

业务指标一般是产品经给出,然后技术同学来考虑怎么优雅、高效地实现。

下面以“某核心功能使用率”这个需求为例进行说明。

具体步骤

1 明确需求

某核心功能使用率(以下简称“使用率”)的可以通过公式计算得到:

使用率 = 100% * 使用该功能的用户数 / 使用产品的用户数

由于使用率只是一个数值,简单统计报表即可用来展示它的值。

但结合业务场景来看,我们很可能需要分析的是某次发布之后,使用率是否有明显变化,然后进行相关分析。比如 UI 交互优化后使用率是否有提升来验证改版的有效性,或者是否因为 bug 导致使用率下降等。

所以需要在时间维度上进行对比分析,折线图更加合适。

2 拆解指标

通过上面的公式看到使用率涉及2个指标:使用该功能用户数使用产品用户数

使用产品的用户数和我们可以通过统计用户 ID 来实现,也就是我们常说的 UV 指标。

使用该功能的用户数可以通过交互事件或者HTTP请求来统计,两者的区别在于,如果该功能比较复杂,涉及多个操作步骤或者多个请求,可以考虑通过进入功能的交互事件来统计,否则可以通过判断 HTTP 请求路径来进行统计。

3 规范埋点数据

虽然不同端的埋点方式不同,但是能在统一的报表上进行分析,所以需要事先定义好埋点规范,核心内容就是需要收集的字段(对应日志库的索引)

这里我们采用通用字段+业务字段结合的方式,以事件的形式进行上报。

其中通用字段包括但不限于事件名称、浏览器UA信息、代码版本、用户ID。。。

业务字段则根据具体埋点指标自行扩展,比如对于页面进入事件会收集页面路径,页面退出事件会收集页面路径和访问时间。

4 编码实现

由于我们项目存在跨端场景(web端和桌面端),所以编写了一个公共库,一方面是对 SLS 的 sdk 以及自行编写的客户端 sdk 进行了封装,让公共库来管理 sdk 的实例。另一方面以基类的方式规范了提供的事件函数。

除开上面两个原因,还有一些隐藏好处:

  1. 可以对一些原子事件进行更高层级的封装,比如进出页面事件、进出应用事件可以封装成一个。
  2. 可以随时替换底层实现,比如自行实现的 sdk,甚至是 SLS 的 sdk。

5 报表配置

最后一步就是配置报表了,虽然文档比较详细,也配有最佳实践,但还其实还是存在不少技巧的。比如:

1、建议优先在日志库提供的默认查询页面编写 SQL 进行查询分析,不光是为了调试,更重要的是系统会自image.png行推荐匹配的图表


2、折线图如果想绘制多条线,可以试试数据转换功能。

3、管道符“|”的过滤优先级要高于 where 子句。

......

总结

使用 SLS 进行业务埋点概括起来可以三步走:先需求文档,后代码实现,最后报表配置。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
26天前
|
Kubernetes Ubuntu Windows
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
|
8天前
|
Java
日志框架log4j打印异常堆栈信息携带traceId,方便接口异常排查
日常项目运行日志,异常栈打印是不带traceId,导致排查问题查找异常栈很麻烦。
|
9天前
|
监控 前端开发 开发者
前端代码规范 - 日志打印规范
前端代码规范 - 日志打印规范
|
18天前
|
存储 监控 数据可视化
SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
【9月更文挑战第2天】SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
50 9
|
27天前
|
开发框架 .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中的问题
|
1月前
|
存储 监控 安全
|
30天前
|
XML Java Maven
log4j 日志的简单使用
这篇文章介绍了Log4j日志框架的基本使用方法,包括在Maven项目中添加依赖、配置`log4j.properties`文件以及在代码中创建和使用Logger对象进行日志记录,但实际打印结果中日志级别没有颜色显示。
log4j 日志的简单使用
|
1月前
|
XML Java Maven
Spring5入门到实战------16、Spring5新功能 --整合日志框架(Log4j2)
这篇文章是Spring5框架的入门到实战教程,介绍了Spring5的新功能——整合日志框架Log4j2,包括Spring5对日志框架的通用封装、如何在项目中引入Log4j2、编写Log4j2的XML配置文件,并通过测试类展示了如何使用Log4j2进行日志记录。
Spring5入门到实战------16、Spring5新功能 --整合日志框架(Log4j2)
|
20天前
|
API C# 开发框架
WPF与Web服务集成大揭秘:手把手教你调用RESTful API,客户端与服务器端优劣对比全解析!
【8月更文挑战第31天】在现代软件开发中,WPF 和 Web 服务各具特色。WPF 以其出色的界面展示能力受到欢迎,而 Web 服务则凭借跨平台和易维护性在互联网应用中占有一席之地。本文探讨了 WPF 如何通过 HttpClient 类调用 RESTful API,并展示了基于 ASP.NET Core 的 Web 服务如何实现同样的功能。通过对比分析,揭示了两者各自的优缺点:WPF 客户端直接处理数据,减轻服务器负担,但需处理网络异常;Web 服务则能利用服务器端功能如缓存和权限验证,但可能增加服务器负载。希望本文能帮助开发者根据具体需求选择合适的技术方案。
56 0
|
20天前
|
C# Windows 监控
WPF应用跨界成长秘籍:深度揭秘如何与Windows服务完美交互,扩展功能无界限!
【8月更文挑战第31天】WPF(Windows Presentation Foundation)是 .NET 框架下的图形界面技术,具有丰富的界面设计和灵活的客户端功能。在某些场景下,WPF 应用需与 Windows 服务交互以实现后台任务处理、系统监控等功能。本文探讨了两者交互的方法,并通过示例代码展示了如何扩展 WPF 应用的功能。首先介绍了 Windows 服务的基础知识,然后阐述了创建 Windows 服务、设计通信接口及 WPF 客户端调用服务的具体步骤。通过合理的交互设计,WPF 应用可获得更强的后台处理能力和系统级操作权限,提升应用的整体性能。
42 0

相关产品

  • 日志服务