前言
前几天跟读者聊天,他说被产品经理给怼了。起因是线上出 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 获取申请体。
最小老本化 + 兼顾性能
手动埋点的形式对异样进行实时告警,而后间接发送短信等告警信息,这个过程是同步的,或多或少会加大响应的工夫,不过申请进入到异样解决这里的话就证实这个申请曾经失败了,影响不大。
尽管影响不大,但还是能够略微优化一下。最常见的优化形式就是将同步转成异步操作,比方丢到独自的线程池中进行告警,丢到内存队列中,独自用一个线程去获取进行告警。
本地异步可能呈现失落的状况,对于这类监控的信息失落几条问题也不大,如果不想失落,能够应用内部的音讯队列来存储告警信息,有独自的消费者进行生产,告警操作。
对立日志监控
最小化老本的形式,只须要略微写几十行代码就能够搞定。不好的点在于每个我的项目中都要有这样一份代码,告警的逻辑也是耦合在了代码中。。
什么 EFK,ELK 置信大家都听过,将日志对立进行收集,集中管理。每个零碎中在出错的时候须要往本地日志中写入异样信息即可,不须要独自对异样进行告警,告警的动作能够由独自的告警零碎来做,告警零碎依据收集过去的日志进行判断,是否须要告警,告警频次等。
对立日志监控须要搭建日志平台,老本相对来说高一点。当然也能够用开源的计划,也有商业的计划。
商业的能够用云服务,应用简略,疾速接入,反对各种维度的告警规定,就是有点费钱。
如果只是想对异样进行监控,我举荐一款开源的谬误追踪零碎,Sentry 是一个开源的实时谬误追踪零碎,能够帮忙开发者实时监控并修复异样问题,当然 Sentry 也有商业版。
APM 监控
apm(Application Performance Management) 除了对服务的调用链,性能进行详情的监控,同时对异样信息也有较好的监控。
常见的 apm 有 skywalking,pinpoint,cat 等,以 cat 来举例,problem 报表中展现的就是利用的错误信息,而且在 cat 的首页大盘中会按分钟展现各个利用的谬误状况,如果有大量谬误,大盘的色彩的就是红色,当你看到一片飘红的时候,那就是异样太多了。
当然 cat 也具备告警性能,靠人为的定时去看大盘不事实,当有谬误后,及时的告警才有意义。想要具体理解 cat 的能够看下我这篇文章:https://mp.weixin.qq.com/s/3mqmySr2nv4Xpd6nZlfsVg
总结
做一个最小老本化的异样监控,预计也就一天搞定了。如果你不做,那就只能等着被怼啦。要管制不出 bug 简直不可能,是程序就必定会有 bug。咱们须要做的就是在出 bug 的第一工夫内及时发现这个 bug,而后毁灭它。
码字不易,能够的话来个三连击,感激!
对于作者: 尹吉欢,简略的技术爱好者,《Spring Cloud 微服务 - 全栈技术与案例解析》,《Spring Cloud 微服务 入门 实战与进阶》作者, 公众号 猿天地 发起人。
我整顿了一份很全的学习材料,感兴趣的能够微信搜寻「猿天地 」,回复关键字「 学习材料」获取我整顿好了的 Spring Cloud,Spring Cloud Alibaba,Sharding-JDBC 分库分表,任务调度框架 XXL-JOB,MongoDB,爬虫等相干材料。