【职场小故事】被产品经理怼了,线上出Bug为啥你不知道

190 篇文章 4 订阅
137 篇文章 1 订阅

前言

前几天跟读者聊天,他说被产品经理给怼了。原因是线上出 Bug 了,最后是客户反馈才知道的。

我就问他:你们是不是没做监控?

读者:我们是刚成立的创业团队,目前最重要的就是堆功能,很多基础设施都没时间做。(文末有学习笔记分享)

正所谓有多大的碗吃多少的饭,不要盲目追求规模大,很牛的那种方案,合适的就可以。监控亦是如此,小方案只要够用,能解决问题,也是非常不错的选择。

下面给大家介绍一些常用的异常监控方式:

最小成本化

如果是刚成立的创业团队,可以用最小的实现成本来对系统的异常进行实时监控。所谓最小的实现成本,就是可以不用依赖任何三方的框架就可以实现。

可以采用手动埋点的方式将异常进行告警,这种方式最好是在全局异常处理的地方进行告警,才能统一管理。

如代码所示:

@ExceptionHandler(value = Exception.class)
@ResponseBody
public ResponseData<Object> defaultErrorHandler(HttpServletRequest req, Exception e) {
// 记录异常
// 钉钉或者短信告警
}

埋点告警

当我们的项目中有了全局异常处理,当底层报错的时候,异常都会进入到 ExceptionHandler 进行处理,在 ExceptionHandler 中我们可以通过 HttpServletRequest 来获取响应的请求信息和异常信息,然后进行告警。

异常告警信息

异常告警信息一定要详细,当线上出现异常后,第一时间要去修复这个问题。如果没有详细的信息根本就无法复现这个问题,就不好去定位和解决了。

告警信息需要有下面的内容:

告警服务:mobile-gateway
负责人:yinjihuan
请求地址:http://xxx.com/xxx/xxx?id=xxx
请求体:{ "name": "xxx" }
请求头:key=value
异常码:500
异常类型:RuntimeException
异常堆栈:java.lang.RuntimeException: com.xxx.exception.ApplicationException: 获取XXX信息失败!

最重要的就是请求参数了,有了参数才能复现错误。需要注意的是通过 HttpServletRequest 获取请求体的时候会报错,因为流只能读取一次。

等到了全局异常处理类的时候已经被读取过了,所以我们需要特殊处理一下,写个过滤器将请求体的值缓存起来,可以 org.springframework.web.util.ContentCachingRequestWrapper 对 HttpServletRequest 进行装饰,然后通过 ContentCachingRequestWrapper 获取请求体。

最小成本化+兼顾性能

手动埋点的方式对异常进行实时告警,然后直接发送短信等告警信息,这个过程是同步的,或多或少会加大响应的时间,不过请求进入到异常处理这里的话就证明这个请求已经失败了,影响不大。

虽然影响不大,但还是可以稍微优化一下。最常见的优化方式就是将同步转成异步操作,比如丢到单独的线程池中进行告警,丢到内存队列中,单独用一个线程去获取进行告警。

本地异步可能出现丢失的情况,对于这类监控的信息丢失几条问题也不大,如果不想丢失,可以使用外部的消息队列来存储告警信息,有单独的消费者进行消费,告警操作。

增加MQ缓冲告警信息

统一日志监控

最小化成本的方式,只需要稍微写几十行代码就可以搞定。不好的点在于每个项目中都要有这样一份代码,告警的逻辑也是耦合在了代码中。

ELK 相信大家都听过,将日志统一进行收集,集中管理。每个系统在出错的时候往本地日志中写入异常信息即可,不需要单独对异常进行告警,告警的动作可以由单独的告警系统来做,告警系统根据收集过来的日志进行判断,是否需要告警,告警频次等。

统一日志监控告警

统一日志监控需要搭建日志平台,成本相对来说高一点。当然也可以用开源的方案,也有商业的方案。

商业的可以用云服务,使用简单,快速接入,支持各种维度的告警规则,就是有点费钱。

如果只是想对异常进行监控,我推荐一款开源的错误追踪系统,Sentry 是一个开源的实时错误追踪系统,可以帮助开发者实时监控并修复异常问题,当然 Sentry 也有商业版。

APM 监控

apm(Application Performance Management) 除了对服务的调用链,性能进行详情的监控,同时对异常信息也有较好的监控。

常见的 apm 有 skywalking,pinpoint,cat 等,以 cat 来举例,problem 报表中展示的就是应用的错误信息,而且在 cat 的首页大盘中会按分钟展示各个应用的错误情况,如果有大量错误,大盘的颜色的就是红色,当你看到一片飘红的时候,那就是异常太多了。

Cat错误报表

当然 cat 也具备告警功能,靠人为的定时去看大盘不现实,当有错误后,及时的告警才有意义。想要详细了解 cat 的可以加入我的软件测试交流群:175317069

总结

做一个最小成本化的异常监控,估计也就一天搞定了。如果你不做,那就只能等着被怼啦。要控制不出 bug 几乎不可能,是程序就肯定会有 bug。我们需要做的就是在出 bug 的第一时间内及时发现这个 bug,然后消灭它。

Spring Cloud & Spring Cloud Alibaba 基础框架,内置了 Cat 监控,互联网公司落地 Spring Cloud 架构必备。

最后,为方便大家自学软件测试,特意给大家准备了一份13G的超实用干货学习资源,涉及的内容非常全面。

包括软件学习路线图,50多天的上课视频、16个突击实战项目,80余个软件测试用软件,37份测试文档,70个软件测试相关问题,40篇测试经验级文章,上千份测试真题分享,还有2021软件测试面试宝典,还有软件测试求职的各类精选简历,希望对大家有所帮助…..

关注我的微信公众号:【程序员小濠】就可以免费获取了~

如果你不想再体验一次自学时找不到资料,没人解答问题,坚持几天便放弃的感受的话,可以加入我的软件测试交流群:175317069 大家一起讨论交流,里面也有各种软件测试资料和技术交流

如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。
 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值