这是我参与「第四届青训营 」笔记创作活动的的第五天,今天介绍结营项目。我们小组本次参加青训营选择的项目是前端监控系统,本人主要完成SDK部分,采集上报数据。
项目简介
这个项目是做什么的
随着前端体量渐大,业务逐渐复杂,我们需要一个前端监控系统,帮我们监控前端各种数据,提升前端性能。一个监控系统大致包括四个阶段:日志采集上报、日志存储、统计与分析、数据展示。
应用场景
监控前端页面在不同浏览器、微信、等APP上的异常、性能、业务数据。
涉及技术&知识点
这个项目设计的知识内容有哪些?
这个项目涉及到什么类型的技术应用?为什么选择这项技术而不是其他的?
仅SDK部分分析:
- 上报请求采取sendbeacon向下兼容。最简单粗暴的做法可能是直接写一个AJAX请求上报,但这种方式成功率不稳定,极易在页面切换时丢失日志;并且,对于大流量站点还需要考虑 带宽节流等诉求。所以优先使用sendbeacon向下兼容。
实践过程
这个项目的搭建思路是什么?
- 采集上报
收集性能和异常日志,在本地做一定的处理过滤等,将数据上报到服务器。
- 日志存储
后端接收前端上报日志后会鉴权、过滤、清洗后存储入库,用于用户查看分析问题;一般选择搜索数据库和时序数据库。
- 统计分析
通过预设的条件和规则,对存储的日志信息进行统计和筛选,用于用户进一步的分析规律找到问题根因。
- 数据展示
通过提供一个可视化的数据面板,让用户可以看到统计趋势数据和具体日志信息,提供丰富的分析、对比、OLAP,更快速的定位和解决问题。
实践过程中遇到了哪些问题?如何解决的?
SDK部分:原本计划通过performance.timing可以拿到页面首次加载的性能数据,而在最新的标准中performance.timing已经被废弃,因此我们改为使用performance.getEntriesByType('navigation')。
最后达成怎样的效果?
四、总结思考
这个项目中最满意的是什么?
虽然不能像预期计划一样完成,做出来的项目也不完美,但我们小组相互帮助,相互积极配合,经过短期磨合,在不到俩周的时间内完成项目设计,编写,调试,测试,并在后续时间持续优化,这让我非常有成就感。
这个项目在未来还有哪些改进优化的空间?
- 将项目部署到远程服务器上
- 使用ESlint检查并改进代码
- 架构演进的可能性:提供更全面的接口,支持部署在多个网页上
- 改进数据库的存储方式,支持删改迁移;改进监控系统代码,支持实时更新
- 使用gzip对上报数据进行加密压缩;使用时序数据库和全文检索搜索引擎完善日志存储,实现批量写入和写入缓冲
- 基于Elasticsearch存储日志,聚合各维度报表,引入SparkStreaming实时计算引擎提高计算速率,实现智能聚合
- 以大盘分析和单用户分析进行数据分析
五、引用参考:
zhuanlan.zhihu.com/p/87654032 cloud.tencent.com/developer/a… juejin.cn/post/693656… segmentfault.com/a/119000004… www.cnblogs.com/hyunbar/p/1…