如何快速发现panic

Go程序Panic在生产环境很容易引起事故。尤其是新人编写的代码,因为对语言不熟悉,常会有些小漏洞。

如何尽早发现呢?除了做好代码review、做好测试外,在panic发生时,能够及时报警,找到责任人,也有很大帮助。

如果不单独监控panic,确实有些辅助办法能够发现问题。如果系统大量报502,一般是服务挂了。或者通过QPS降低、请求错误量提升,触发报警。但这种辅助方法都不及时,而且很难帮助开发者快速定位问题。

监控系统

监控系统组成如下:

Image

服务器上有日志收集系统,定时获取日志。

日志收集系统将日志信息传送给Kafaka,数据分析系统对日志进行分析,具体分析规则从监控配置平台拉取,如果超出指定阈值进行报警。

这种方案监控httpcode或接口返回的code码。panic错误只有错误栈,不会有指定code,所以无法报panic事件。

监控panic

鉴于上面的问题,公司有个同学做了一个定位小助手,堪称神器,大部分团队已接入该助手。此处讲一下核心设计原理。

Image

作者通过介入公司的CI、CD过程,将Python脚本在Go服务部署时,同时部署到服务器上。Go服务启动时,Python脚本也会执行后,定时获取指定日志内容:

cmd = "tail -c +{offset} '{path}' | head -c {read_size} | grep '{pattern}' -B 10 -A 50 > '{tb}'".format(            offset=offset, path=log_path, read_size=read_size, pattern=self.grep_pattern, tb=tb_file)

如果日志中有panic字样,会将这段日志发送给定位分析服务。

定位分析服务于代码库打通,根据错误栈中的内容,可以找到每行代码的修改时间,最近一个修改即为引入panic的负责人。

通过这个方案,准确快速的发现了大量问题。

总结

虽然监控panic讲述的很简单,但是要做好还是有一定难度的。一是需要对CI/CD的过程比较了解,二是在服务器部署新的日志收集系统,一定不能影响到服务器稳定性,这就需要做好限制。

小助手做的很好的一点是和代码库打通,能够帮开发者迅速定位修改人、修改位置,这个太有用了。

我很赞赏这种通过发现一个问题,然后用产品化思维解决问题的人。

当然,最好的方案还是这个功能能够合并到日志收集系统中。但有时候,一个系统要在大而全和专注之间做选择。

最后

大家如果喜欢我的文章,可以关注我的公众号(程序员麻辣烫)

我的个人博客为:https://shidawuhen.github.io/

往期文章回顾:

  1. 设计模式

  2. 招聘

  3. 思考

  4. 存储

  5. 算法系列

  6. 读书笔记

  7. 小工具

  8. 架构

  9. 网络

  10. Go语言

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员麻辣烫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值