导语:

看似无章可循问题进行排查时可以说是世界上最紧张且难度、强度最大的工作之一,尤其面对极高收入的业务、海量服务运营,带来极大的恐慌感并引发肾上腺素飙升,压力的存在可能诱发我们犯下的低级失误。克服这种白痴般的本能,我们需要克制自己快要爆发的一腔怒火、强迫自己以有条不紊的方式逐一开展尝试。其实做运维练就的是一种心态,足够淡定遇事而不乱,从容应对才是真。

排查出问题并找到根本原因加以解决,个人认为是一件很成就感的事情。曾经有人问过我:“你是怎么想到问题出现在xxx的?又是怎么确认根本原因是xxx的?”,我只能轻描淡写的回答:“靠经验”,然后感觉这个逼装得还可以。其实这里说的“靠经验”是很模糊的,一直以来大家可能都觉得排查问题要靠经验,但是又说不出具体通过什么样的经验排查出了问题,最后让排查问题逐渐变成了一门玄学。其实问题排查工作往往遵循一些通用且不成文的实践规则,并不是一门所谓的玄说,结合自身经历、总结,希望能为大家的实际工作带来助益。

运维常见错误解决(问题排查经验总结)(1)

吃一堑长一智

出了问题并不可怕,怕的是我们从问题中学不到什么,怕的是类似的问题重现,提高问题定位的效率,有哪些值得去做,比如:

建立长效错误码机制,使用具统计、可视意义的数字来简短描述错误含义和范畴,正所谓浓缩就是精华,这一点在错误码屡试不爽。

编写有效的错误日志,建立日志标准。正常程序中打错误日志主要是为了更好地排查问题和解决问题,提供重要线索和指导。但是在实际中打的错误日志内容和格式变化多样,错误提示上可能残缺不全、没有相关背景、不明其义,使得排查解决问题成为非常不方便或者耗时的操作。而实际上只要开发稍加用心,也需就会减少排查问题的很多无用功。如何编写有效的错误日志,建立日志标准,也是非常有利于问题分析的。

定位问题避免二次损害,当某个看似难以捉摸的难题出现时,本能可能是重启,尽快让系统恢复正常。虽然这样的方式经常能够解决问题而且起效神速,但同时也很可能把情况推向令人难以置信的恶化深渊。问题排查手段包括重新启动不稳定系统、尝试自动记录数据库、文件系统修复等等,这些方式往往确实能搞定难题并让系统重回生产轨道,但同时也没准导致数据恢复努力付之东流,毁掉确定问题根本原因的机会甚至大大延长关键性系统的停机时间。保留现场也非常重要,跟破案现场要要求现场勘察、样本采集、排查、锁定如出一辙,对于难以重现问题,尽量创造条件保留了可以用于故障重现的数据或现场。

线上环境复杂多变,虽然这一点并不能马上解决问题起到直接作用,但坚持这种处理思路,为开发和测试创造条件,降低因难以重现的疑难故障的挂起率,最终有助于业务的长期稳定。

建立集中的数据可视平台,不至于遇到问题才开始着手分析,若是对业务没有足够的了解又没有数据依赖,就很可能在解决问题时雪上加霜。

建立沙箱影子系统,模拟复杂多变的现网环境,规避线上影响,重现或压测问题,如tcpcopy、dubbocopy等

搭建开源的日志可视方案,协助我们去解决最后”一公里”的问题,常见如ELK、Log.io等

善其事必先利其器,常见系统排查工具perf、iptraf、netperf、tcpdump、gdb、pstack、jstack、strace,top、iotop、tsar等

……

结语

总结这几年处理问题的一些思路和经验,可以归纳提炼如下几句:

收集信息,随时记录

协调资源,把控影响

冷静判断,沉着分析

大胆假设,谨慎尝试

积极总结,以备后用

运维专家或许是每个运维人追寻的梦想,他们敏锐的嗅觉似乎总能揪出系统故障的根本原因。这种快速反应、准确定位的能力源自多年来处理复杂系统难题的经验积累与个人知识储备,而且其成功很难被复制。虽然没有哪家机构愿意为其颁发认证资质,尽管如此,这仍然是大家所乐于追寻的一种“超自然”的本领

,