首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从无到有-打造页面监控系统

团队文化:进取,分享,快乐,责任!

团队愿景:做最好的产品,打造有影响力的团队!

作者:研发三部-王猛

为什么需要监控页面

因为页面是直接面向客户的,面向客户的相对都比较重要,尤其对于电商行业来说更为重要,工作中就要求我们对页面做出最快速的响应,所以我们决定自己做一套页面监控系统

监控页面有什么好处

没有页面监控的时候,线上页面出问题只能靠客户反馈投诉,这种情况对于研发来说比较被动,有了页面监控,我们就能实时了解页面运行状况,出现问题快速做出响应。

页面监控需要实时计算,所以直接选定storm + kafka的经典组合。

有几个点需要确定:

一、我们要实现的功能目标:

保证如果页面出错,监控系统能够捕捉到错误信息,具体什么错误信息,打印到日志里,后续并不关心具体错误。

要不要做归类统计?考虑到页面什么错误都可能,页面错误信息的数据统计意义不大,所以一期先不考虑对错误信息归纳总结。

按照什么维度统计算页面有问题?我们考虑过多维度统计,归纳总结,但是这个在现阶段来说一是有点太复杂了,二是目前统计这个没想到有什么实际意义。所以直接统计页面每20秒的错误量。当连续3个20秒页面报错量都超过阈值的时候,则报警。阈值是可配置的,可以随时调节。

二、日志和kafka

1、nginx + lua 方案

nginx层直接打印日志,lua直接集成kafka发送消息,这是个不错的方案,后续会考虑用lua接入kafka。

2、java服务打印日志,接入日志接收器。

日志接收器使用rsyslog技术收集日志,这种方案利用日志接收器发送kafka发送消息,相当于中间多了一层缓冲,瞬间大流量进来也没问题。

3、java服务直接调用kafka服务api发送消息。

由于各种原因,最终选择第三种方案,后续我们会继续探索提升性能的可能性,并用代码实现。

系统整体架构如下:

上面的几项确定后开始着手开发:

前端如何监控页面报错?

一般语法错误以及运行时错误,浏览器都会在console里边体现出错误信息,以及出错的文件,行号,堆栈信息。window.onerror能捕获这些信息。

与前端约定报文格式

考虑到扩展性,可以将报文定义成如下格式:

data用于存放bug信息。

pageName标记当前页面url,用于定位页面。

sysName用于区分不同系统。

type标记消息类型,例如:"pageError"代表页面监控。

备注:其他参数比如referer、User-Agent、客户ip等信息可以从后台服务中直接获取。

日志收集服务

日志收集服务目前我们是使用的springMVC来做http服务,首先将系统A发送的报文先经过白名单过滤,然后打印到日志中。日志打印完毕后发送Kafka。

storm服务

pageError_kafka_spout是从broker上pull消息。

pageError_valid_bolt校验消息合法性。

pageError_business_bolt处理业务,也就是页面错误数据统计。

怎么统计页面错误量呢?

滑动窗格可以解决这个问题,数据统计部分我们主要使用了滑动窗格,我们是设定每个窗格20秒,共10个窗格,每20秒先将后一个窗格清空,然后指针滑动到这个刚清空的窗格,这10个窗格相当于一个环形队列。每当滑动到下一个窗格,会统计前3个窗格的值与阈值比较。如果都超过阈值,则发送警报。

PS:

这个页面监控系统待完善的地方还有很多,后续我们考虑做如下优化。

1、根据日志信息快速定位具体报错页面。

2、做可视化界面,更加直观的帮我们排查解决问题。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190104G1B26K00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券