如何快速发现panic
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/
往期文章回顾:
设计模式
招聘
思考
存储
算法系列
读书笔记
小工具
架构
网络
Go语言
如何快速发现panic相关推荐
- 【转】Rancher部署Træfik实现微服务的快速发现
Rancher部署Træfik实现微服务的快速发现 原文链接:http://dwz.cn/6rhDAz 原创 2017-08-28 洪晓露 RancherLabs Træfik 是什么? Træfik ...
- Rancher部署Traefik实现微服务的快速发现
Traefik 是什么? Traefik 是一个为了让部署微服务更加便捷而诞生的现代HTTP反向代理.负载均衡工具.它支持多种后台 (Rancher.Docker.Swarm.Kubernetes.M ...
- 通过常用监控命令快速发现性能问题
命令大致如下: uptime dmesg | tail vmstat 1 mpstat -P ALL 1 pidstat 1 iostat -xz 1 free -m sar -n DEV 1 sar ...
- 如何快速发现网站恶意镜像与网页劫持?
本文作为一篇软文,没错,就是软文,主要目的是宣传产品(太直接了是不是不太好),但是小编保证,本文所说的皆为事实,可作为呈堂证供~! 互联网时代下,每个网站最看重的指标是什么? 流量! 再说一遍,流量! ...
- 网络安全小白众测如何快速发现安全问题思路
在众测项目的时候,发现问题的速度对应这赚钱的速度,这里简单罗列一些众测项目比较容易解决也比较容易发现的问题 目录 业务体系 电商系统 政府系统 金融系统 教育系统 传媒系统 对应模块 找回密码 购物 ...
- 如何快速发现及解决网络环路问题
网络环路问题对企业网络存在很大的威胁,它会造成网络里的广播风暴,耗尽交换资源,造成交换机瘫痪.当网络环路发生时,会出现网络及应用访问缓慢.网络丢包甚至无法正常提供服务等异常.通常在大型的网络中发现网络 ...
- 从这11个维度下手,你可以快速发现宝宝的天赋
一直觉得,在娃还小的时候,能找到孩子的特长,清楚地知道自己家娃儿更擅长做什么样的事情,对大人和孩子来说,都是件足够幸运的事儿. 因为每个孩子都是独一无二的,带着天生的气质和天赋来到我们身边,总有些东西 ...
- WSS中的SPSite和SPWeb为什么需要释放内存,如何快速发现代码中的未释放内存
本内容为翻译微软的官方文档和一些国外的blog的内容,详细这些内容的原文可以参看 http://www.cnblogs.com/virusswb/archive/2009/11/05/1596495. ...
- IntelliJ IDEA Maven jar包冲突解决,快速发现jar包冲突
IntelliJ IDEA 自带的Diagrams 去查看jar包冲突相当费劲 ~ ,安装个插件即可快速解决该问题 打开Settings,搜索maven helper,并安装 安装完成后,直接打开po ...
最新文章
- 计算机室活动实施方案,微机室活动计划
- 自动构建工具Grunt
- 递归--整数划分问题
- mysql怎么可视化连接_IDEA连接MySQL可视化工具连接操作
- oracle:oracle基础知识(二)
- 远程sun服务器,向日葵远程控制(com.oray.sunlogin) - 11.1.0.39347 - 应用 - 酷安
- 西方哲学包括计算机科学吗,哲学类专业包括哪些专业
- nvidia卸载程序失败_卸载删除NVIDIA驱动程序的方法步骤教程 - 系统家园
- 单细胞测序系列之二:单细胞基因组测序
- ResourceExhaustedError
- 【python】使用pandas操作MySQL数据库
- 服务器玩cf显示文件损坏,“CF登陆游戏出现“文件缺损或破坏”的解决方案:”的解决方案...
- excel 中vb组合框_在Excel 2010中修复组合框大小调整
- WPS怎么转换成PDF?这样转换准没错
- Panic的概念和使用
- 超市选址问题(Python实现)
- C语言内存管理机制精讲-高手必修课视频教程-黄强-专题视频课程
- c/c++:UDP(udp通信、广播、组播),本地套接字
- IntelliJ IDEA overlays Maven
- U盘随身带,工作任我行
热门文章
- vue3 PropType
- Visual Studio 2010 下载及安装方法(图文解说)
- C# GridView綁定RadioButtonList
- 微型计算机主要应用于哪些领域,第一代计算机的主要应用领域是什么?
- CET-4 week 6th -- 后缀
- Golang指南:顶级Golang框架、IDE和工具列表
- 国产备份软件、备份设备
- R中报错:Error :$ operator is invalid for atomic vectors
- Python处理unicode字符
- linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习)