线上问题解决的思路

工作中我们常常会接收到例如来自预警系统的告警邮件或者你的领导转发来的线上问题,那么当我们遇到这类问题的时候该如何去完成处理这个任务呢?以下的处理方法步骤可以提供参考建议。

一、一般我们目前线上问题的来源:

1.主动发现
相关owner每天查看系统监控情况,主动发现了一些异常的现象。
2.监控系统告警
比如应用响应时间在某个时间段上升了,资源层面cpu、内存、io、tcp连接数、disk、线程数、GC、连接池等各个服务器指标异常,可能是某台的服务器出现了异常,但是业务还未受到大面积影响
3.你的领导转发来自来组邮件或者产品
通常这类邮件会有明确的uid,日期时间,服务名称,问题现象。
4.来自微信
通常有截图,这个时候可以问清楚具体触发时间点,重复3的操作,遇到非必现问题,可以尝试多种操作来还原场景
5.生产故障邮件
OPS的发来的邮件

二、查问题的基本步骤

—了解问题概况,评估影响的范围
根据问题的来源,我们首先要确认的是这到底不是线上的故障? 还是个别的极端case问题?极端的case引起的一般我们会降低优先级。 比如不能下单这样的就是大大大大大大大大大大大大问题。
【tips:针对不同的问题范围直接会影响处理问题的优先级哦~~~】
如果已经确定了是线上故障,我们需要快速响应去定位故障点,找其原因。
稍大一点的公司,一般都有自己的监控系统(服务器监控,服务监控,业务监控)和日志系统。具体分析问题现象,定位问题,看log还是数据。一般能快速判是功能还是性能的问题。

如果是确定功能问题,我们一般可以从日志系统的trace入手:
若有抛错误,通过跟踪日志信息或者特定用户问题追溯来确定,一般这样的日志系统都有唯一的标识id串联上下游,日志是实时的,且支持过滤,统计等查询,可以查看一段时间的趋势情况

如果是确定性能问题,我们一般除了日志系统还会更多的结合监控系统并行灵活组合来看:
日志系统一般都会有各类型的埋点(自定义埋点,实时统计类埋点,PV),所有数据都是实时埋点,很短的delay。
监控系统里面一般会有应用监控,也包括上下游的服务,调用SOA,被调SOA,调redis监控,调用DAL监控,系统本身的监控,C#的应用还有IIS的监控,java的有VM的监控等

—协调资源
判断故障的影响面,这点很重要,你需要给一个明确的范围,配合关联的产品经理,告知有多少用户(百分比,订单量)会受到影响;
再结合影响面,找你的头,要么申请hotfix,要么放在就近版本修复,如果要修复,一定要让相关人员(主管,产品,测试,关联开发)清楚这个事情的来龙去脉。

—深入分析
针对上面的系统查看,我们一般能找到切入关键点,之后是一个复杂的收集信息-假设-验证—收集信息-假设-验证的循环过程,直到我们找到重现,找到根源。
这里简单列举下常见的一些疑点方向:

  1. 刚发布新版本不久后,线上在很短的时间内就出了问题。---那很大程度上是由于这次上的版本带来的问题,重点可以检查这次代码的改动点是什么。
  2. 版本是之前的,突然出现内存方面的错误,严重导致服务不可用。---可能是之前潜在的重大的bug。
  3. 线上之前一直稳定运行,业务量突增,各服务的响应时间增长,QPS先陡增然后下降,最后大量报错,最严重的时候出现服务不可用。---这种情况很大情况下是上游调用方的突然增加流量,或者是遭遇异常的攻击。
  4. 版本是之前上线的,QPS正常,服务响应时间增长,日志中出现警告。---可能是数据库,Redis的连接问题,或者定时任务出了问题,导致等等。。。
  5. 版本是之前上线的,QPS正常,但服务响应时间下降,错误率上升。---可能是下游依赖的服务有异常。
  6. 很多服务大面积出现短暂的业务失败。---很大可能是网络问题导致。

—问题重现,故障排除
确定好问题的范围后,接下来就是问题重现:

功能类问题,一般比较好重现,如果遇到不是每次都能重现的问题。如果是APP问题,还可以尝试借来手机还原场景,或者通过DEBUG模式尝试定位Dump文件。
根据前面掌握的基本信息,帮助我们快速去理清楚业务发生的时序,比如进入App页,会发生什么事情,Native逻辑做了什么,发起了什么请求(上传参数,内容),服务下发是否为空(检查服务下发),是否正常触发了业务回调,业务回调处理完毕页面内容渲染是否完成。

如果确定是性能问题,需要进行重现,这个过程有时候是比较困难的。。

  1. 要先拉取当前线上的发布版本,发布到测试环境,分析场景,准备相关的数据
  2. 我们要看上的机器配置 CPU ,内核,磁盘,物理机还是虚拟机 ,内存, 网络io 等
  3. JDK版本 ,JVM的参数
  4. 应用开关配置,数据库, 缓存, redis
  5. 接口平均的响应时间RT 是的多少, 接口的QPS是多少 平常的性能如何
    6.。。

—-验证问题是否解决
通常情况下,对于性能问题的验证:

  1. 如果线上直接保存了dump文件,直接拉下来分析,若无,转2
  2. 一般会拉取当前线上有问题的版本看是否能重现问题
  3. 然后先拉取生产一个稳定的版本,进行两者比对。
  4. 如果是上线前压测过的版本,我们要详细分析压测的场景。
  5. 再切换压测一个开发修复后的版本进行对比,还要和基线版本对比。
  6. 其中比对包括各项性能指标,有的还必须针对dump文件进行对比分析 。 最终的结果是一定要所有修复后的版本性能不能比原来生产稳定的版本差。
  7. 针对内存的问题,我们一般压测的时间会相对而言比较长一点,观察其趋势。

—上线验证
验证修复后的版本,确认OK后,进行上线,一般都是灰度发布完成后进行观察,看是否正常。

三、如何快速恢复(这个步骤应该和二并行做)

因为系统的可用性决定着公司的客户利益,影响公司的收益和信誉,所以一般我们遇到生产故障的第一要务是,恢复服务,尽可能的把对线上服务影响降到最低。
怎么来快速保障把影响减少到最小呢。一般会参考以下的方法:

  1. 版本回退:大量报错的情况下,又没有办法快速定位问题根源。一般我们都是功能测试人员负责版本上线,如果在是新版本上线后观察出现了问题,一般都是快速回退,切到近期稳定的一个版本。一般大一点的公司发布系统都做的比较好,可以快速切换版本,且大部分都采用的是灰度发布,可以将范围尽可能减少。
  2. 备份以及失效转移: 对于服务而言,一但某个服务器宕机,就将服务切换到其他可用的集群服务器上去。对于数据而言,如果某个磁盘出现损坏,就从备份的磁盘读取数据(一般都是事先就做好了数据的同步复制),这个一般都是DBA或者运维人员去操作。
  3. 切流量: 一般都会有开关控制,如果出现问题,进行关闭一部分流量。 这个发布人员都有权限。但需要事先和相关人员沟通好。
  4. 扩容机器:线上访问压力大,不能重启机器,或者重启也无法解决时,增加集群机器。
  5. 重启:当某台服务器的CPU高,或者连接数飙升时,会采取这种方法。这个一般也是运维的人员去完成该操作。

四、如果避免下次再入坑

等找到了根本原因,解决了问题之后,我们需要总结,举一反三,想想在这个故障排查和处理过程中,有哪些环节存在弱点?哪些流程/规范/制度需要优化?
这类似的问题是否在其他系统,模块或者团队中也存在?不断完善,以避免再次踩坑,也在团队中交流经验,共同提高。
再来聊聊我们的架构的一些保护机制
现在一般随着用户的访问增多,大的系统一般做到一定的规模后,架构都会经历过好几次的变迁,巨无霸的系统架构一般都是纵向和横向进行了拆分的,都是将各个模块独立部署,降低了系统的耦合性。这样的架构也更好的方便了我们能够快速排查问题。

总之,线上问题来临肯定有压力的,但不要怕!!!!!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容