定位500错误!
做过运维的小伙伴都知道,当用户浏览器上出现白屏、应用端API得到500错误
、取到数据为空是非常崩溃的一件事情。500错误是服务器端非常常见的一个错误,有可能是开发时导致的语法错误,也有可能是文件引用导致的错误。当用户反馈了 500 错误之后,而我们运维童鞋们面对一个集群的后端服务器,如果没有方便的工具管理和同步,下手查找问题,是一个即耗时又费力的痛苦过程。
在最开始的时候,每次遇到这种情况,我们运维同学们就分别登录几台Web服务器,去查找可能记录错误日志的地方,找出错误的真凶,以让开发童鞋们来改进。
如下图这个错误,就是由于在引用微信JS-SDK
开发时,由于每个页面都要做JS-SDK权限授权,但是在其中一个页面忘记了导入微信的JS-SDK
包,导致了大量的 500错误
。这种找错误的过程,最开始几台机器还勉强,几分钟能找到,到了后来变成了几十台,已经变成了一项谁也不想干的工作了。
图一、从日志中寻找出现 500 错误的真凶
后来公司的负载均衡服务器Haproxy
做了会话保持,我们就只好联系用户,让部分懂点技术的用户,帮我们用Chrome 这类开发者工具,抓一下包,看看Cookie,从Cookie 的SERVERID 字段就能知道,这个用户的访问,可能来自自于哪台机器,这样定位起来,方便了很多,但是时间也往往要10分钟以上,因为还要跟用户电话,大部分用户并不懂得如何操作。如下图二,从正常请求,可以得到此时访问的 SERVERID,就可以知道出错的页面和日志,也会在这台机器上。
图2,通过SERVERID确定服务器
那有没有什么更快的办法呢?有倒时有,比如自己开发一套系统,从各台服务器收集日志,在有一个集中的地方,能查看。但是我们运维童鞋开发能力还不太能跟得上,公司的开发童鞋老板也恨不得拉来 7x16小时开发产品。
那到底还有木有什么更好的办法啊?
在圈子里有人推荐OneAPM!其实最开始我是拒绝的,因为一般来讲,装这种在生产环境上,比较麻烦,并且可能会影响性能,还都需要埋代码。真到有一天,微博上又有人在讨论OneAPM,我有点心动了。
于是乎,对于懂点开发、喜欢鼓捣新玩意的非典型运维工程师,三下五除二从OneAPM注册了账号,下载了安装包,安装到了我们的测试服务器上。好家伙,我还啥也没有干,把程序刚刚跑起来,在OneAPM 的管理控制台上就看到了数据,真是福音啊,不要埋代码,真的不要埋代码!!!
DUANG — 简直就是有特技!经过几天的实验,并向领导申请在生产环境上安装,领导看到了是优才网伍老师推荐,正好是认识的熟人,所以特意微信沟通了一下,知道是靠谱的。就让我让装到生产环境上去了。
在实际的使用过程中,OneAPM
确实也帮了我们的大忙。使用了几个月了,觉得真的是减轻了我们运维童鞋工作,同时也非常快速地定位问题,开发童鞋们也很感激。下面就举一个真实环境中的栗子。
下面就是我从线上摘出来的典型的例子。线上出了问题,一分钟后,在OneAPM 的管理后台就看到了错误消息。如图三
还以上边的WxJSSDK 没有找到为例,线上出问题时,使用浏览器抓包,得到的是如下结果,因为线上是关闭了日志输出的,只看到白白的一片,抓包则是 500 错误。
!
现在不用一台台上去检测了,一分钟后,OneAPM 后台就收到了错误信息报告。点击去看如下:
错误信息报告表明,这是一个非常严重的PHP错误,就是在做微信开发时,要引用微信官方的SDK,开发童鞋给漏掉了,导致出现了找不到类 ’WxJSSDK’ 这样的错误,Nginx 接到这样的错误,会向客户端返回 500
。
我直接把OneAPM错误信息报告发给开发童鞋,开发童鞋心领神会,再也不会跟我纠缠说谁谁的问题了!
开发童鞋还告诉了我修复的办法:引入文件就好了,特意找到了这段代码参考下图。
有了OneAPM就是这么爽,我也不用再用终端爬到每台机器上去确认,更不用担心随着公司的业务发展,加到多少台Web和API服务器。
我需要拥有的,就是一个OneAPM 的管理后台!
每次公司内部的技术分享,我都会从OneAPM拉出一些案例,也会提供给开发主管一些素材,总结程序员可能常犯的错误,为此,受到了老板的奖励!至于啥奖励,大家懂的。平时参加一些业内的技术交流,也会向他们推荐OneAPM,已经成为了OneAPM的忠粉,他们团队里做支持的孟智童鞋还和我成为了好朋友!
OneAPM 的服务是很有特色的,可能这种服务还在早期,国内好像还没有类似的应用,所以在后台和功能上,也有一些不足之处,趁这个机会也吐个槽,希望能受到开发团队的关注 ,并改进。
第一、 由于我经常用,所以OneAPM账号长期处于登录状态,但是每次敲入OneAPM.com 都进到了首页,搞技术的都懂啊,你们的产品经理莫非是临时工?
第二、最需要改进的,就是看错误日志的面板,搜索、错误分级都还没有做好。幸好我用熟悉了,否则新用户会很晕的,欲知详情,请看下图。
第三、 如果做了错误分级,我最想要的就是报警了,就像DNSPod ,每一次域名出故障,连不上,都短信、微信、邮件就来了,听说你们拿了7000万啊,在出严重错误的时候,能不能给我来个短信啊,我就不用每天挂着这个后台了,有木有!等到这些有了,即时将来有可能收费,我也会积极向领导争取滴!
本文作者系OneAPM发布 ,想阅读更多好的技术文章,请访问OneAPM官方技术博客。