当前位置: 首页 > 编程日记 > 正文

TS - 处理故障的一些通用方法

本文是对解决问题的一些方法内容的改写与补充!

首要的问题

对于发生在线上的问题, 最紧要的事项一定是“以最快最有效的方式解决问题,降低对线上业务的影响”,然后才是深挖问题,探求根本原因,防微杜渐,未雨绸缪。
而对于非线上问题,客观上会有“相对多一点的处理时间、多一些的分析和处理方法”。

1 接触与了解

从总体着眼,从细节入手!

确认基本相关信息是必须执行的首要环节,也是后续处理问题的基础。
如果无法清楚地辨别或陈述问题的基本信息,那么,此时要面对的将不仅仅是问题本身!
不明确和不充分的信息资源,将极大地制约问题处理的效率和效果。

问题的基本信息概括起来,主要包括两个方面:在怎样的背景环境下?发生了怎样的问题?
进一步的细分,可能涉及如下内容:

1.1 问题现象的描述

  • 问题的直观现象
  • 问题的初始级别
  • 问题发生的时间、地点、报告人
  • 问题发生的阶段和场景:新安装阶段、实验阶段、生产场景、维护场景。。。
  • 问题发生前的操作

1.2 问题的边界与归属

从现象和场景,来判断是自身的问题?还是外部问题?
实质上,这是在确认自身在问题处理中的角色定位:该发挥怎样的作用和达到怎样的效果,由谁来处理、跟进、协助。

如果是自身的问题,那么当前的问题级别和影响是什么?
对应级别和影响的问题,应由对应级别和影响的人去解决,因为这涉及到相应的应急方案措施、资源调动和投入。

如果是外部的问题,那么谁是相关人?需要提供哪些必要的信息?需要进行哪些必要的分析?

1.3 当前状态和进展

确认是自身的问题后,就需要进一步了解问题的详细信息。

- 设备版本信息
- 设备使用信息:单方使用还是多方共用。。。
- 设备相关配置、流程、服务、网络状态- 收集设备当前日志,并开启Debug级别日志
- 报错信息来源与内容- 获取设备远程登录信息
- 客户及现场工程师的联系方式- 已采取的步骤、操作、方案。。。问题状态和现象发生了怎样的改变;
- 当前投入的资源:参与问题处理的人员及角色定位;

1.4 问题定性

根据收集到问题信息,清楚地辨别问题性质,是探寻问题本质的第一步,也决定着后续处理的方向。

产品问题? --- 需求问题? --- 情绪发泄?
原生问题? --- 由其他问题引发的衍生问题?
个别? ---  共性?
偶发? ---  频繁?
。。。。。。

1.5 下一步的信息

  • 在当前处理状态下,问题的发展趋势;
  • 下一步的人力或物质资源的需求;
  • 下一步的步骤、操作、方案。。。;

2- 定位与分析

从总体着眼,从细节入手!

2.1 一般性流程

precondition status  -->  configuration & data flow  -->  log&infos flow  -->  troubleshooting flow
  • 每一个环节的前提条件是否成立?
  • 每一个环节的配置和数据流是否正确?
  • 依据每一个环节的日志或信息,能够获取怎样的判断依据?

问题定位和分析的过程,实质上是具体业务流程的“映射”,顺序和步骤大致相同,遵循着业务数据的流向。
每一个业务环节和阶段的日志和配置信息,都是判断的依据。
因此,熟悉业务环节和阶段是问题定位与分析的基础要求。

2.2 常用的定位与分析方法

a. 场景区分

针对不同阶段和场景,侧重点不同。
例如:

  • 如果问题发生在全新安装或全新集成阶段,那么问题发生的原因更可能与误操作、误配置、流程错误相关。
  • 如果问题发生在产品使用阶段,那么要首先确认问题发生之前的状态、操作信息、业务使用背景、备份配置等。

b. 最小环境与分解排除

  • 最小环境法:正向流程分析(业务起点至终点),从最基本因素开始排查,逐步添加其他因素进行判断。
  • 分解排除法:反向流程分析(业务终点至起点),根据业务原理流程,逐步查找有效信息,排除干扰项,缩小范围。

c. 对比与替换

  • 对比:跟正确的做比较,不同的便是可疑的。纵向,同一事物不同时间段的对比;横向,同一时间段不同事物的对比。
  • 替换:分阶段分区域,逐步调换对象,分别验证。换数据、换配置、换模块、换设备、换环境。。。换人。

d. 重现与模拟

  • 重现:在真实环境观察或模拟问题的发生,得到更多的信息,验证想法和操作等。
  • 模拟:如果没有真实环境,可以建立虚拟环境(模拟器simulator)来验证基本流程、配置、数据等。

e. 相似案例

相似的问题现象大都有着相似的原因。
从前期的相似案例中,可以获取可参考的处理方法,推动当前问题的解决。

f. 试错

条件允许的情况下,有依据地多次尝试,可能会发现新的可用信息或处理方式;

g. 信息搜索

信息不仅来自公司组织内部,也广泛的存在外部空间。

  • 常用搜索引擎命令
  • Get technical information from the Internet

h. 获得帮助

每个人都是某一方面的菜鸟,某一细节的白痴。
我们的目标是解决问题,在必要情况下,应该及时从他人请求帮助,这没什么可耻的。
可耻的是:有方法有途径来解决问题,但却不去尝试。

  • 信息获取途径汇总

3 - 处理与跟进

从总体着眼,从细节入手!

3.1 一些注意事项

  • 关注根本问题:问题处理的过程中,很有可能又引入或出现新的问题,此时面对多个问题,应持续关注根本问题,合理排序,逐个解决,如无必要,不建议同时处理多个问题;
  • 信息记录:尽可能保留相关信息(log 、 screenshot、等等),作为后续处理和问题回溯的资料,例如:在相关登陆程序中启用log保留功能;
  • 获取权限:重大影响及关键操作一定要获得双授权(customer and local)
  • 状态同步:及时更新状态并知会相关人。更新信息应包括:当前状态、Next action、可能的预计结果、时间点、你的困境和需求等;
  • 自我审视:低头解决问题, 抬头看问题状态(自己的角色与作用、进展、性质、customer和high level的反馈。。。)
  • 。。。。。。

3.2 无奈的“三板斧”

  • 重启: 根据问题的实际情况,进行业务切换或重启(进程、服务、模块、系统、节点、集群、硬件平台等);
  • 重置:回退到上一版本的配置、回退到默认配置等;
  • 重装: 软硬件系统已经彻底崩溃或损毁,重装是无奈的选择,业务短时间无法恢复;

实际上,以上操作都是“灾备方案”的步骤和内容。一个合理的灾备方案,必须备份了数据和配置信息。
在“重启、重置、重装”过程中,通过导入备份数据和配置,有利于业务的快速恢复。

3.3 全局关注(whole picture)

你只是问题处理流程上的一个环节或者节点,从整个流程上去审视本身的作用,做好该做的事,会更好促进问题解决!

  • 从整个事件流程去观察一个阶段和环节;
  • 从一个时间范围去观察共发事件的相互影响;
  • 从一个周期去观察时间范围。

4 - 沟通与协作

4.1 换位思考

假定此时你是客户,从客户的角度来理解利害点和需求。
受限于信息不对等,理解会存在偏差,不存在“感同身受”,只是尽可能地“设身处地”去了解。
别把自己的感知强加给他人!
你的理解可能只是你的主观感受,不是客观的实际状态。

4.2 情绪控制

人与人的区别,比人与动物的区别都要大。
个体的巨大差别(知识背景、技能状态、秉性喜好、利害冲突等等),必然会出现难以理解的情况。
对于过程中出现难以理解的事物,只能说。。。尽量避免情绪上的对立。
普通人一旦有了对立情绪这个内因,必然会导致态度上的消极,事物上的拖延,于己于人于事无益!

一个可行的方法:根据当时的实际情况,来确定意愿层级 : 尽心、尽力、尽责。

  • 尽心 --- 愿意投入工作时间之外的精力和资源。
  • 尽力 --- 工作时间之内,力所能及地做些额外的事情。
  • 尽责 --- 基于事情本身,完成职责之内的事情。

如果心中有“猛虎”,就把这理解为只是一份工作中的一个task而已,如果task的安排具有合理性(时间、技能、目标、资源。。。),那就遵从这个合理性的安排。
就事论事,简单直接的基于事情本身来开展,基于本职尽责。这是共同协作完成事情的基本要求,同时这也是沟通与协作基础。

4.3 客户认知

无论是外部客户还是内部客户,一般情况下,可预先假定他们是“高贵、繁忙,迫切而又茫然”的。

  • 高贵 --- 以客户满意度为最高要求,及时同步问题状态,保持适当update频率。否则,客户有了情绪,分分钟就能“Management Escalation”到high level发起challenge。
  • 繁忙 --- 客户的时间是宝贵的,总是没时间的,极有可能没法及时回复和协作。保持谦逊,连环E-mail,连环Call;引入“high level”,继续搞。或者,从第三封邮件开始,明确申明这是第几次请求回复,并设置默认选项和时间点,促成客观选择。
  • 迫切 --- 无论问题怎样,客户总是希望以最快速度解决。慎重承诺deadline。
  • 茫然 --- 通常不具备相关知识背景,或者只了解基础的一部分。因此,最初接触到的问题信息和表述,很可能不准确、不完整,未必反映问题的本质。必要时,信息需要亲自重新获取、确认和对比。需要客户配合某些操作时,提供详细的步骤。

如果“恰好”遇到一个“耐心好,时间充裕,懂产品”或者"肯钻研"的客户,那么“However,everything has two sides......”,你懂的。

5 - 技术问题闭环

问题得到彻底解决的标志,不是问题现象的消失,而是同样的问题不再出现。
也就是说,要想使问题真正闭环,需要探求问题的本质,明确产生问题和触发的根本原因,制定有效的预防措施,并进一步改善处理流程。
这个过程,通常称为RCA/EDA(Root Cause analysis / Escape Defect Analysis),简而言之,这是一个“问题复盘”和“制定预防措施”的过程。

如果仅仅止步于问题现象的消失,甚至满足于问题处理完成,忽略了对问题的复盘和根本原因的探求,那么这个“根本原因”将会一直潜伏和等待,直到下一个“时机”制造出“更大的惊喜”。
深挖问题,探求根因,防微杜渐,未雨绸缪,这才是业务运行的长久之计。

假设如下几种场景:

代码问题

  • 是否考虑加强“Code review”环节?
  • 通过多人专家review、举行review会议、采用自动代码检视工具和框架等方法是否可以有效避免代码的异常?

配置问题

  • “配置改动”的授权、审核和操作环节是否足够安全,
  • 能否通过“Double Authorization”、“Double Check”、操作前备份配置文件和数据等方法来充分保障?

硬件问题

  • 为什么在日常巡检中没有发现?
  • 原因是什么(评估指标不合理、检视频率过低、人为疏忽等等)?
  • 可以采取哪种对应的改进措施(更新评估指标、提高检视频率、使用自动脚本或工具等等)?
  • 备件储备和更换流程是否健全?

测试性问题

  • 为什么本应该在测试阶段就应该暴露的问题,结果却没有发现?
  • 是测试流程有缺失、测试用例和方法不合理、测试环境有缺陷?

特别注意

在进行“问题闭环”的过程中,有一个最容易误入歧途的关键点,也就是“最终的问题归因”。
根本原因可以是流程欠缺,可以是工具有问题,也可以是信息不准确,甚至是偶发的不可预知因素,但绝不能轻易牵扯到具体某一个人,某一个行为。
简单来说,就是绝不能轻易将“能力不足”、“工作习惯”、“性格特征”等因素来作为根本原因。

如果认定某位员工有着“能力不足”、 “工作习惯有问题”、“性格不适合”等一个甚至几个问题,却又从事重要岗位执行重要操作,那这说明这不仅仅是技术故障,也是管理问题。
换而言之,就是管理层有责任,那么这就超出了“技术问题闭环”的范围。
应该让技术的归技术,让管理的归管理,技术性的问题要对应具体的技术细节和流程,而不是具体某一个人以及行为。

6 - 另一种方式

如果你认为下面的问题处理方式是对的:

  1. 疑似我的问题,请拿出充分的证据,否则就不是我的问题。。。拒不处理!
  2. 第三方的问题,不做必要分析,直接透传。
  3. 存在技术性问题向“非技术性问题”转换的可能性,于是“其实这不是问题,这是需求,这是体验差的抱怨。”。
  4. 过多引入不必要人员和事项,人多事情杂,流程长又慢,问题仍在处理中。
  5. 多次、长时间的索取不必要的信息,企图以时间来淡化微小问题的影响,迫使客户逐渐失去关注度。
  6. 问题个别罕见,没有足够的信息支持分析和定位,请在问题重现时,及时提供更多信息。
  7. 久拖不决,不了了之。

面对问题时,如果个体基础能力不足,却企图以抖机灵式的技巧来规避,最终都会将自身推入一个更深的大坑,“昨天总会在明天等你!”。

转载于:https://www.cnblogs.com/anliven/p/9123980.html

相关文章:

javascript读取XML文档

xml <?xml version"1.0" encoding"utf-8"?> <Menus> <Menu id"0" name"首页"> <MenuItemTitle sid"01" mid"0" name"常用选项"> <MenuItem mid"0" tid"0…

设计模式读书笔记-单件模式

单件模式- 确保一个类只有一个实例&#xff0c;全局只有一个入口点。 类如下: public class Singleton { private static Singleton uniqueInstance; // other useful instance variables here private Singleton() {} public static Singleton getInstance() { if (uniqueInst…

2.1 mac下多版本jdk的安装和管理

之前已经安装过jdk8了&#xff0c;安装路径&#xff1a;/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk 现在安装jdk10&#xff0c;下载后&#xff0c;双击dmg文件一直到安装完成&#xff0c;安装路径&#xff1a;/Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk 安装…

python多进程详解

目录 python多进程序.multiprocessing一、Processprocess介绍例1.1&#xff1a;创建函数并将其作为单个进程例1.2&#xff1a;创建函数并将其作为多个进程例1.3&#xff1a;将进程定义为类例1.4&#xff1a;daemon程序对比结果二、Lock三、Semaphore四、Event五、Queue六、Pipe…

【工具软件】webstorm的实用快捷操作(持续积累)

博主目前正在做前端的开发&#xff0c;使用到了一个十分实用的软件叫webstom&#xff0c;昨天做了一个破解教程的博客&#xff0c;但是审核没有通过&#xff0c;有兴趣的朋友可以私信我。webstom的实用之处就在于它数不胜数的快捷操作大大简化了写代码的繁琐步骤。但是那么多的…

无线Trace脚本(旧格式)-平均延时

BEGIN {#程序初始化&#xff0c;设定一变量以记录目前处理的封包的最大ID号码。在awk环境下变量的使用不需要声明&#xff0c;直接赋值。highest_uid 0;total_packet0;total_delay_time0; } #下面大括号里面的内容会针对要进行处理的记录&#xff08;也就是我们的trace文件&am…

友元函数、类的非静态成员函数、静态成员函数的区别

类中申明的函数相对于类来说有三层意思&#xff1a;1.有this指针2.函数在类的作用区域中3.可以访问类中私有部分 4.可以被继承非静态成员函数具有1234静态成员函数具有234友元函数具有3静态成员函数与友元函数的区别只是作用区域的不同 友元函数具有全局性 不慎使用可能会造成函…

【转载】“error LNK1169: 找到一个或多个多重定义的符号”的解决方法

c的小细节的地方 原文地址&#xff1a;https://blog.csdn.net/xiaosu123/article/details/5665729 问题描述如下&#xff1a; 有 三个源文件&#xff0c;A.h、B.cpp、C.cpp。 A.h是头文件&#xff0c;其中声明了三个变量a1、a2、 a3。 B.cpp是A.h中所声明的类的实现源代码&…

【jQuery】jQuery知识点梳理(持续更新)

jQuery是什么&#xff1a; 由图标可知&#xff1a; j&#xff1a;JavaScript query&#xff1a;查询 所以可以分析得jQuery是一个JavaScript库&#xff0c;而且主要用来查询。 注意&#xff0c;下面的一行小字&#xff0c;write less do more 我们不仅可以看出jQuery以高效…

Python - 在CentOS7.5系统中安装Python3

注意&#xff1a;以下内容均使用root用户执行操作。 1-确认信息 # uname -a Linux localhost.localdomain 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux # # cat /etc/system-release CentOS Linux release 7.5.1804 (Core) # …

JQuery 基础:8.节点操作

1.replaceWith替换节点 $("br").replaceWith("<hr/>"); 2.wrap()包裹节点,将元素逐个用指定标签包裹 $("b").wrap("<font colorred></font>")转载于:https://www.cnblogs.com/xyangs/archive/2012/05/22/2513821.ht…

《CLR Via C# 第3版》笔记之(十四) - 泛型高级

为了更好的利用泛型&#xff0c;现将泛型的一些高级特性总结一下。 主要内容&#xff1a; 泛型的协变和逆变泛型的参数的约束1. 泛型的协变和逆变 对于泛型参数(一般用T表示)&#xff0c;指定了类型之后。就只能识别此类型&#xff0c;面向对象中的继承并不适用泛型参数&#x…

剑指offer-反转链表

输入一个链表&#xff0c;反转链表后&#xff0c;输出链表的所有元素。 #-*- coding:utf-8 -*- # class ListNode: # def __init__(self, x): # self.val x # self.next None class Solution:# 返回ListNodedef ReverseList(self, pHead):# write code h…

[NOIP模拟测试9]题(Problem) 题解 (组合数全家桶+dp)

达哥送分给我我都不要&#xff0c;感觉自己挺牛批。 $type0:$ 跟visit那题类似&#xff0c;枚举横向移动的步数直接推公式&#xff1a; $ans\sum C_n^i \times C_i^{\frac{i}{2}} \times C_{n-i}^{\frac{n-i}{2}},i\% 20$ $type1:$ 因为不能触碰负半轴&#xff0c;所以可以把右…

如何获取元素最终使用的css值

这个问题是在组件css加载方案中碰到的 场景&#xff1a; 元素的样式我们可以写在style里面&#xff0c;也可以写到外链css里面&#xff0c;如果没有设置&#xff0c;也会读取浏览器默认的css的&#xff0c;现在我们要计算getComputedstyle某个元素的最终所使用的css样式 区别&a…

【工具软件】webstorm如何使用快捷键生成固定代码

我们写前端页面时会有很多的机械重复代码&#xff0c;每写一个文件都要重新写一遍&#xff0c;枯燥且浪费时间&#xff0c;有没有一个方法可以快速生成这些代码呢&#xff1f;有&#xff01;webstorm替我们考虑到了这个问题&#xff0c;提供了解决方案&#xff0c;接下来让我们…

Citrix Receiver For Linux 预览版

Citrix各平台的客户端插件都在不断的完善和进行版本升级&#xff0c;但是For linux版本的ICA Client基本是一成不变&#xff0c;很长时间都不会有什么动静&#xff0c;但是Citrix产品都是搭配ThinClient来使用&#xff0c;而好多ThinClient都会使用Linux系统&#xff0c;而在Li…

5.20 单词小记

1.cart n. 二轮运货马车 vt. 用车装载 vi. 驾运货马车&#xff1b;用运货车运送 网络释义:购物车,小车,球车,分类与回归树 例:This would allow the server application to identify the cart from which it should add and removeitems. 这将使服务器应用程序能够确定它所应该…

windows性能计数器搜集方法

windows性能计数器搜集方法 PerfMon-Windows性能监视器是个好东西&#xff0c;可以辅助我们分析发生问题时间段服务器资源占用情况&#xff0c;但是部署性能计数器确实一个相当麻烦的事情&#xff0c;往往这种枯燥的事别人还做不了&#xff0c;只能由我们这些希望获取到PerfMon…

【HDU】3308 LCIS

1 #include<cstdio>2 #define MAXN 1000103 struct node4 {5 int left,right,val;6 };7 int a[MAXN];8 node tree[MAXN<<2];9 inline int MAX(int x,int y) 10 { 11 return x>y?x:y; 12 } 13 inline int MIN(int x,int y) 14 { 15 return x>y?…

【基础知识】如何在浏览器中查找元素属性节点

首先&#xff0c;什么是属性节点&#xff1f;属性节点是在编写html代码时&#xff0c;在html标签中添加的属性。 本文重点&#xff1a;如果您用的ie&#xff0c;我恳请您不要在用了&#xff0c;你们的每次使用都是打在前端工程师身上的一发子弹 代码实例&#xff1a; <!DOC…

C#系列五《多样化的程序分支》

上一篇介绍了C#程序设计分支的基本概念与基本操作&#xff0c;这篇的主题是高级的程序分支&#xff0c;例如&#xff1a;分支的嵌套与分支是使用的场景&#xff01;与三元运算符(&#xff1f;:),废话少说还是开始吧&#xff01; 1.三元运算符【&#xff1f;:】 三元运算符分为三…

Vue报错:Uncaught RangeError: Maximum call stack size exceeded

vue项目放在服务器上&#xff0c;报错如下&#xff1a; 堆栈溢出&#xff1a; 1、原因&#xff1a;有小类到大类的递归查询导致溢出 2、解决方法思想&#xff1a; A、在做递归查询时候由大类到小类去查询 B、匹配结果后及时return 退出&#xff0c;防止过多查询 转载于:https:/…

【Echarts】当页面宽度改变时如何使图表宽度自适应

问题&#xff1a; 当对echats不作任何处理时&#xff0c;图表宽度不会自适应&#xff0c;如图所示&#xff08;变绿的区域为echarts选中的div&#xff09;。 加载完后&#xff1a; 收缩浏览器页面之后&#xff1a; 解决方法&#xff1a; 编写js函数&#xff0c;当页面大小变…

【C#】登陆次数限制

我们在网上登陆的时候有些网站在用户多次输错密码之后会自动把账户冻结&#xff0c;不能在进行登陆&#xff0c;笔者这次做的winform程序就是要实现这种功能。 功能一&#xff1a;根据数据库字段判断用户名和密码是否匹配&#xff1b; 功能二&#xff1a;如果输入错误自动记录连…

linux 使用sendmail发送邮件

1111111111 转载于:https://www.cnblogs.com/We612/p/11274139.html

[转]MySQL innoDB数据插入性能优化

转载自: http://hiyijian.blog.163.com/blog/static/173086472201121621326471/ 起因&#xff1a;有一个innoDB引擎的表Table&#xff0c;在一个大概3000次的foreach循环中执行 INSERT INTO Table(columnA, columnB) VALUES (valueA, valueB)结果居然超出了60S的php执行限制&am…

vue+ivew-admin开发项目,内存占用过大解决办法

项目用的ivewadmin ivewUI&#xff0c;直接从github上拉下来用的&#xff0c;配置也没改&#xff0c;我们页面比较多&#xff0c;大该30个页面的样子&#xff0c;一启用&#xff0c;我们的电脑就卡了&#xff0c;然后&#xff0c;看一下&#xff0c;内存占用 1.5G了&#xff0c…

腾讯微视:向前一步是悲壮,向后一步是绝望zz

“换做以往的任何一场战争&#xff0c;微博之战、搜索之战和电商之战——大量投入但始终不见效果&#xff0c;打到现在腾讯肯定已经交牌了。微视的不同之处在于&#xff0c;它有些悲壮&#xff0c;因为这是腾讯最不想交出的一张牌。” 文 | 《财经》记者高洪浩 编辑|宋玮 如果有…