当前位置: 首页 > Linux

运维大师:故障排除经验总结

时间:2023-04-06 04:09:37 Linux

腾讯蓝鲸智云,简称蓝鲸,是一套由腾讯互娱集团(IEG)自研自用,为企业研发搭建的一体化系统和运维PaaS开发框架,不仅为基础运维提供无人值守服务(发布变更、监控处理、调值、数据抽取等),还为运维人员提供解决方案(工具),以及调整以避免重复的运营服务。简介可以说,看似难以驾驭的问题排查可以说是世界上压力最大、难度最大、强度最大的工作之一,尤其是面对收入极高的业务和海量的服务运营,这带来了极度恐慌并引发肾上腺素激增,压力的存在会引发我们犯下愚蠢的错误。为了克服这种白痴本能,我们需要克制自己的怒火,并强迫自己有条不紊地进行每一次尝试。其实就是在运维中修炼出来的一种心态。淡定不乱,淡定应对,这才是真。我个人认为排查问题并找到根源来解决是一件很有成就感的事情。曾经有人问我:“你是怎么认为问题出现在xxx的?你是怎么确认根本原因是xxx的?”,我只能淡淡的回答:“靠经验”,后来觉得这个装逼是好的。其实,这里所说的“靠经验”是很模糊的。一直以来,大家可能都认为排错问题靠的是经验,但是分不清是靠什么样的经验来排错问题的。最后,故障排除问题逐渐成为一个问题。形而上学。其实故障排除工作往往遵循一些普遍的、不成文的实用规则,并不是所谓的玄学理论,结合自己的经验和总结,希望能给大家的实际工作带来收益。从入行到现在,我们遇到过各种各样奇怪的问题。但是,每个业务形式和系统都是不同的。对于某一类问题,我们往往可以搜索到很多解决方案,但个人觉得认知方法,经验很难复制,所以我就通过抽象(集)like(道路)来谈谈“排错”的方法论,希望能引起大家更多的共鸣。1.排查问题就像破案运维排查在线问题就像警察破案。这是一个不断分析线索、推理的过程。但在准备排查问题之前,我们应该了解三个认知:认知几乎是人与人之间唯一的本质区别。——傅盛《认知升级三部曲》系统不正常是正常的。今天,计算机系统已经变得极其复杂。一个用户请求可能会经过发送请求、DNS解析、运营商网络、负载均衡、服务器、虚拟机(容器),根据业务逻辑的复杂程度,还可能调用组件、缓存、存储、数据库。每个环节都可能出现问题,而且有些组件是分布式的,大大增加了排查的难度,所以出现问题后不要惊慌,要保持良好的心态。首要任务是恢复系统“在紧急情况下,飞行员的首要任务是保持飞机飞行。与确保乘客和飞机安全着陆相比,故障定位和排除是次要目标”,因此恢复在线系统是重中之重。而不是立即找出它发生的原因。道理永远只有一台计算机是一门科学,而计算机世界是由0或1组成的,这个世界只有是或否,没有中间地带,所以计算机世界的一切都有一个根本原因,有没有机会,一切都是必然。2、了解案例,评估规模。首先,评估问题的范围。是全网、部分区域,还是某条链路不通,还是多条业务线出现问题,评估case的大小。普通的民事案件,或者刑事案件。3.理清线索,整理分析手头的资料或线索。比如监控有网络告警,有的用户反映无法访问,有的开发人员反映服务器有问题,同时有改动等等,尽量不要遗漏这些看似一些无关紧要的线索,先梳理这些线索,再分析。推理的过程就是根据已知的线索,通过合理的想象和推理,得到一个唯一的结果。线索是整个推理过程的起点。线索好不好,有没有错误,会直接影响推理的好坏,所以是最基本也是最重要的环节。在整理线索时,最容易犯的错误是信息不足和主观臆断。4、扩大自己的信息量积极扩大信息的接收面,比如问问开发或者算法的同学,今天有没有上线修改,网络群有没有大的调整。从中获取有价值的信息点对于故障排除非常重要。查看监控,看某个监控项的变化,跟踪日志,调试信息,都是扩大信息量的手段。业余时间扩展知识,多了解相关系统,如架构、部署、逻辑等,一旦出现故障,讨论也能为你提供解决思路,举一反三,促进排查和解决问题。5.分析客户评价,辨别是非。如果是外部问题,比如业务投诉、用户反馈等信息,有时可信,有时人不可信。比如之前开发反馈有问题,有的广告位偏向异常,有的正常,让我们检查系统有没有问题,最后还是代码调用了动态配置导致的。有时反馈信息会被描述者过滤和处理。他的调查和分析可能会让你误入歧途。在收集信息的时候,你需要带着审视和怀疑的态度去分析每个人的证词。每个人的学习能力其实都很强。随着经验的积累,鉴定人证的能力也会逐渐提高。6、看清问题本质“听到马蹄声,猜是马,不是斑马”。看现象、看事件,要看本质,不要看表面。听到马蹄声,猜猜这是什么马。这匹马是谁的,有什么用,而不是猜测它是斑马、白马还是黑马。排除故障时不要先入为主。有时候看似不可能、极其简单的事情,可能就是最终的原因。不要轻易排除某种原因,比如“宇宙射线导致SSD数据错误”。很久以前遇到过某个svr耗时高的问题。经过长时间的排查和调优,还是不行。最后发现网卡居然满了。7、确定方向,进行定位,确定排查方向,比如从大到小,从上到下检查步骤,从大到小,首先检查IDC等比较宏观的地方是否存在问题网络、机房状态等,一一排除,逐步缩小问题范围。从上到下,先逐一查看现象的最上层调用链,逐步深入。并不是所有的问题都是从大到小,从上到下。宏观问题只有发展到一定程度,才会引起“质变”,才会引起关注。在导致质变的过程中,你的业务可能受到了某种程度的影响,但表现非常明显。这时候就需要进行微观分析,然后逐渐走向宏观诊断。8.总结记录。破案记性好,不如烂笔头。但是,在混乱的问题分析中,运维冷静地记录问题和判断,确实有点不切实际。但即便如此,我们还是可以在事情结束后保留??一份分析资料,总结记录处理过程中的执行步骤和解决方案,可以帮助自己和团队积累宝贵的处理经验。以上方法流程翻译成运维术语:9、出问题并不可怕。我们担心我们不会从这个问题中学到任何东西。我们害怕的是类似的问题会再次出现,提高问题定位的效率。值得做的事情,如:建立长效的错误代码机制,用具有统计意义和视觉意义的数字来简要描述错误的含义和范围。俗话说,专注就是本质,这在错误代码中已经屡试不爽。正常流程打印错误日志的主要目的是为了更好的排查和解决问题,提供重要的线索和指导。但在实际应用中,错误日志的内容和格式千差万别,错误提示可能不完整、没有相关背景、不清楚,使得排查和解决问题成为一项非常不便或耗时的操作。其实开发只要用心一点,也会减少很多排查问题的无用功。如何编写有效的错误日志,建立日志标准,对问题分析也有很大的帮助。定位问题避免二次损坏。当出现看似难以捉摸的问题时,本能可能是尽快重启并使系统恢复正常。虽然这种方法通常可以解决问题并迅速奏效,但它也可能使情况变得更糟。故障排除方法,包括重新启动不稳定的系统、尝试自动记录数据库、修复文件系统等,通常确实可以解决问题并使系统恢复生产轨道,但它们也可能导致数据恢复工作付诸东流和毁于一旦。失去确定问题根本原因的机会,甚至会大大延长关键系统的停机时间。保留现场也很重要,就像案发现场一样,需要实地勘查、采集样本、侦查、锁定。对于难以复现的问题,尽量创造条件保留可用于故障复现的数据或场地。网络环境复杂多变。虽然这对于立即解决问题没有起到直接的作用,但最终对于业务的长期稳定是有帮助的。建立一个集中的数据可视化平台,让你遇到问题不去分析。如果对业务了解不够,不依赖数据,很可能在解决问题的时候把事情弄糟。建立沙箱影子系统,模拟复杂多变的现网环境,避免线上冲击、重现或压测问题,例如:TCPCopy、DubboCopy等构建开源日志可视化解决方案,帮助我们解决最后“一公里”常见问题问题,如:ELK、Log.io等需要先磨刀霍霍,常用系统排查工具Perf、IPTraf、Netperf、TcpDump、GDB、Pstack、jstack、strace、top、iotop、Tsar等...十、结语总结这几年处理问题的一些思路和经验,可归纳提炼如下:收集信息,随时记录;协调资源并控制影响;冷静判断,冷静分析;以备后用。运维专家可能是每个运维人的梦想。他们敏锐的嗅觉似乎总能找出系统故障的根源。这种快速反应和准确定位的能力源自多年处理复杂系统问题的经验和个人的知识储备,其成功是难以复制的。虽然没有任何组织愿意为其颁发认证资格,但它依然是一项人人乐于追求的“神通”技能。本文分享一些操作上的经验和心得。本文涉及的方法、经验和思路不代表最佳实践。蓝鲸智云简介腾讯蓝鲸智云(简称蓝鲸)软件系统是一套基于PaaS的技术解决方案,致力于打造行业领先的一站式自动化运维平台。目前已经推出社区版和企业版,欢迎体验。请点击访问蓝鲸官网:http://bk.tencent.com