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

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

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

监控系统

监控系统组成如下:

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

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

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

监控panic

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

作者通过介入公司的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语言

如何快速发现panic相关推荐

  1. 【转】Rancher部署Træfik实现微服务的快速发现

    Rancher部署Træfik实现微服务的快速发现 原文链接:http://dwz.cn/6rhDAz 原创 2017-08-28 洪晓露 RancherLabs Træfik 是什么? Træfik ...

  2. Rancher部署Traefik实现微服务的快速发现

    Traefik 是什么? Traefik 是一个为了让部署微服务更加便捷而诞生的现代HTTP反向代理.负载均衡工具.它支持多种后台 (Rancher.Docker.Swarm.Kubernetes.M ...

  3. 通过常用监控命令快速发现性能问题

    命令大致如下: uptime dmesg | tail vmstat 1 mpstat -P ALL 1 pidstat 1 iostat -xz 1 free -m sar -n DEV 1 sar ...

  4. 如何快速发现网站恶意镜像与网页劫持?

    本文作为一篇软文,没错,就是软文,主要目的是宣传产品(太直接了是不是不太好),但是小编保证,本文所说的皆为事实,可作为呈堂证供~! 互联网时代下,每个网站最看重的指标是什么? 流量! 再说一遍,流量! ...

  5. 网络安全小白众测如何快速发现安全问题思路

    在众测项目的时候,发现问题的速度对应这赚钱的速度,这里简单罗列一些众测项目比较容易解决也比较容易发现的问题 目录 业务体系 电商系统 政府系统 金融系统 教育系统 传媒系统 对应模块 找回密码 购物 ...

  6. 如何快速发现及解决网络环路问题

    网络环路问题对企业网络存在很大的威胁,它会造成网络里的广播风暴,耗尽交换资源,造成交换机瘫痪.当网络环路发生时,会出现网络及应用访问缓慢.网络丢包甚至无法正常提供服务等异常.通常在大型的网络中发现网络 ...

  7. 从这11个维度下手,你可以快速发现宝宝的天赋

    一直觉得,在娃还小的时候,能找到孩子的特长,清楚地知道自己家娃儿更擅长做什么样的事情,对大人和孩子来说,都是件足够幸运的事儿. 因为每个孩子都是独一无二的,带着天生的气质和天赋来到我们身边,总有些东西 ...

  8. WSS中的SPSite和SPWeb为什么需要释放内存,如何快速发现代码中的未释放内存

    本内容为翻译微软的官方文档和一些国外的blog的内容,详细这些内容的原文可以参看 http://www.cnblogs.com/virusswb/archive/2009/11/05/1596495. ...

  9. IntelliJ IDEA Maven jar包冲突解决,快速发现jar包冲突

    IntelliJ IDEA 自带的Diagrams 去查看jar包冲突相当费劲 ~ ,安装个插件即可快速解决该问题 打开Settings,搜索maven helper,并安装 安装完成后,直接打开po ...

最新文章

  1. 计算机室活动实施方案,微机室活动计划
  2. 自动构建工具Grunt
  3. 递归--整数划分问题
  4. mysql怎么可视化连接_IDEA连接MySQL可视化工具连接操作
  5. oracle:oracle基础知识(二)
  6. 远程sun服务器,向日葵远程控制(com.oray.sunlogin) - 11.1.0.39347 - 应用 - 酷安
  7. 西方哲学包括计算机科学吗,哲学类专业包括哪些专业
  8. nvidia卸载程序失败_卸载删除NVIDIA驱动程序的方法步骤教程 - 系统家园
  9. 单细胞测序系列之二:单细胞基因组测序
  10. ResourceExhaustedError
  11. 【python】使用pandas操作MySQL数据库
  12. 服务器玩cf显示文件损坏,“CF登陆游戏出现“文件缺损或破坏”的解决方案:”的解决方案...
  13. excel 中vb组合框_在Excel 2010中修复组合框大小调整
  14. WPS怎么转换成PDF?这样转换准没错
  15. Panic的概念和使用
  16. 超市选址问题(Python实现)
  17. C语言内存管理机制精讲-高手必修课视频教程-黄强-专题视频课程
  18. c/c++:UDP(udp通信、广播、组播),本地套接字
  19. IntelliJ IDEA overlays Maven
  20. U盘随身带,工作任我行

热门文章

  1. vue3 PropType
  2. Visual Studio 2010 下载及安装方法(图文解说)
  3. C# GridView綁定RadioButtonList
  4. 微型计算机主要应用于哪些领域,第一代计算机的主要应用领域是什么?
  5. CET-4 week 6th -- 后缀
  6. Golang指南:顶级Golang框架、IDE和工具列表
  7. 国产备份软件、备份设备
  8. R中报错:Error :$ operator is invalid for atomic vectors
  9. Python处理unicode字符
  10. linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习)