什么是软件开发领域的根本原因分析 (RCA)?
根本原因分析的定义
根本原因分析 (RCA) 是一个经过验证的故障排查技巧,软件开发团队会使用此方法来识别和解决核心问题,而不是尝试处理表面症状。根本原因分析是一个结构化的分步流程,旨在通过收集和分析相关数据并测试可解决问题的多种方案来找出首要的底层原因。
为什么根本原因分析很重要?
根本原因分析在软件开发过程中至关重要,因为这一系统性的方法允许团队更高效地进行故障排查并开发长期解决方案以避免问题再次发生。通过解决错误和缺陷的根本原因,开发人员能够确保其系统稳定、可靠并高效,减少代价高昂的停机时间并加快开发过程。RCA 还能帮助开发人员基于问题的影响和严重性对问题进行优先级排序,让他们得以首先处理最关键的问题。
如何进行根本原因分析
作为各行各业(从科学和工程领域,到制造业和医疗保健)一种解决问题的方法,根本原因分析要求遵守一系列特定步骤来隔离和理解导致系统缺陷或故障的根本因素。在软件开发领域进行根本原因分析所涉及的步骤遵循相同的通用 RCA 原则:
- 第 1 步:定义问题并设置告警(如可能)
RCA 的第一步是定义问题并确保所有人都清晰理解问题。这可能包括设置告警来监测潜在问题,例如异常应用程序行为、系统性能降级,或者安全事故。 - 第 2 步:收集并分析数据以确定潜在引发因素
定义了问题之后,下一步就是收集和分析数据。这可能包括查看系统日志、应用程序性能指标、用户反馈,以及其他相关数据源。数据评估应该引导您得出一个可能导致问题的潜在引发因素的列表。 - 第 3 步:确定根本原因
第 2 步的数据分析结束之后,从多种 RCA 方法中选择一种来分析数据和潜在引发因素,从而找出问题的真正根本原因。根本原因分析应该提出更正行动方面的建议。 - 第 4 步:实施解决方案并记录行动
找出根本原因之后,最后一步就是实施解决方案来解决问题。这可能包括更改代码和配置设定,或者进行或多或少的系统调整。很重要的一点是要记录为解决问题而采取的所有行动,从而确保这些行动有效并可在必要时重复进行。
软件领域之外的根本原因分析的方法和技巧
人们开发了很多实用工具来协助实现有效的 RCA。进行头脑风暴和分析潜在原因时,这些方法能够让您将信息可视化并将信息整理到旨在解决问题的可用框架内。热门的根本原因分析方法包括:
- 5 个为什么
“5 个为什么”是一种解决问题的策略,可帮助找到根本原因,其方法是连续提出“为什么”问题,直到找出问题的直接原因。当团队多次问“为什么”,且每个问题都很符合逻辑地引出下一个问题的时候,这会鼓励团队成员进行批判性思考和深入挖掘,帮助避免表面或表层的解决方案。 - 帕累托图
帕累托图是柱状图和线状图的结合体,以图形方式列出问题最常见的根本原因的频率,从最有可能的原因开始。基于帕累托原则,即 80% 的效果来自 20% 的原因,此图表按照重要性列出各个原因,并显示每个原因的累计影响,从而帮助团队优先处理对问题影响最为重大的原因。 - 散点图
散点图会使用点来帮助团队找出数据中可能造成问题的模式。通过在图表上画两个数字变量,您能够更轻松地找到数据间的任何关联性。这一技巧能够帮助您快速识别变量间的任何重要关系,并找出离群值,因为离群值可能就是您正在寻找的潜在原因。 - 鱼骨图
这一视觉工具外形像鱼骨,会以图形呈现可能导致问题的因素,鱼头代表问题,鱼骨代表潜在原因的类别。这对于促进团队之间的协作尤其有效,可以帮助更全面地理解问题。 - 失效模式与影响分析 (FMEA)
FMEA 是一种结构化的经验性方法,可帮助识别潜在的失效及其影响。这是一种系统性方法,涉及识别潜在的失效模式、评估其严重程度、确定发生和检测出来的几率,然后按照潜在风险分数对这些模式进行排序。它能帮助团队专注于需要首先解决的最重要问题,还有助于防患于未然。
面向软件开发人员的根本原因分析工具
在软件领域,RCA 能够暴露深藏在代码中的根本性问题。但是由于云原生技术的使用以及当今现代应用程序的复杂性,人们越来越难以确定问题的根本原因。团队可以使用可观测性和安全工具实现强大的 RCA 结果,例如:
可观测性
可观测性通过数据收集和分析提供有关软件性能和行为的实时洞察,让您得以通过监测指标、日志和跟踪,以及通过诸如下面这些 AIOps 和可观测性工具,识别问题并获得有关根本原因的可见性:
- Machine Learning 和 AIOps
搜索、可视化和 Machine Learning 可帮助识别异常并让问题的根本原因浮出水面。这能够帮助您做出明智决策并快速采取纠正行动。 - 分布式跟踪
借助分布式跟踪来跟踪和分析请求在复杂的分布式系统内的流动,这可以提供有关组件和服务间交互的洞察,进而找出可能导致问题的瓶颈和其他问题。 - 日志模式分析
分析由应用程序和基础架构生成的日志模式和趋势,以找出问题的根本原因,以及检测异常、错误和可能影响软件性能的其他问题。 - 服务依赖关系映射
通过确定系统内不同组件之间的关系和依赖性,您可以自动映射可能导致问题的服务依赖关系,并理解单个组件内的变化如何影响系统的其他部分。 - 延迟和错误关联性
通过分析与延迟和错误率相关的数据以确定二者之间的关联性,您可以找出模式以及错误和性能问题之间的关系,这能够帮助准确定位根本原因。
安全
在根本原因分析中,很重要的一个方面是分析安全相关数据以找出系统内的漏洞和弱点。这有助于预防安全漏洞和可能影响软件性能的其他问题。
- 通过非监督式异常检测,提供多一层防护
要想实现全面安全,您需要提供多层威胁保护。非监督式 Machine Learning 能够找出您数据中与正常活动的偏差,而无需指定什么是异常,而且能够找出标准威胁猎捕方法很可能会错过的攻击。 - 调查威胁并探索关联性
通过分析与所检测到事件相关的安全数据,帮助确定它们是否表示真实威胁,还是可以予以忽略。安全分析师可以通过查看会话模式、事件的时间线以及来自主机的诊断信息,找出恶意活动。
进行根本原因分析时需要避免的常见错误
根本原因分析对于识别和解决问题极其有效,但是团队需要知道几类常见错误:
- 缺少数据验证:未能对分析中所用的数据进行验证的话,会导致得出错误的结论和无效的解决方案。
- 将解决方案选做原因:缺乏培训和支持以及预算有限等问题基本上不会是问题的根本原因。这些在绝大多数情况下是解决方案。很重要的一点是要挖掘得更深,以找到问题的最根本原因。
- 需要找出唯一的原因:可能会有很多因素导致出现问题,很重要的一点是找出所有因素,而不是最方便的单个因素。
- 没有让正确的人员参与进来:有效且真正效果出色的 RCA 要求所有利益相关方——包括软件开发人员、测试人员和业务分析师——都提出意见。
根本原因分析的优点
在软件开发领域进行根本原因分析的优点在于能够改善故障排查、降低成本并提高效率——所有这些都有助于生产更优质的产品和收获更满意的客户。根本原因分析是软件开发过程中的重要组成部分,能够帮助团队找出重大错误的源头并确定修复方案。RCA 还能帮助团队防止问题再次发生。
- 帮助避免问题再次发生:RCA 能够支持团队实施解决方案来解决根本原因,而不局限于表面症状。通过防止问题再次发生,团队能够节省时间和成本,并提高所开发软件的整体质量。例如,软件团队可能发现应用程序的某个特定功能总是一直崩溃。通过执行 RCA,他们可能发现问题原因是未能正确处理某个特定的用户输入集合。有了这一信息,他们就能实施正确的解决方案来预防这一问题。
- 提高流程效率:找到根本原因后,团队就能优化流程来防止类似问题再次发生,进而提高效率、减少停机时间并精简开发流程。如果开发团队发现由于测试套件的问题而导致持续集成管道不断发生故障,他们就可以执行 RCA 确定是不是由于测试运行速度太慢而导致管道超时。现在他们就可以优化测试套件来避免未来发生类似问题。
- 预防客户不满意:根本原因分析可帮助团队解决会影响客户满意度的问题。举个例子,如果团队收到用户投诉说,某项功能加载速度过慢,他们就可以执行 RCA 以确定问题是不是出在数据库查询优化不当。通过实施解决方案(例如优化查询以提升性能)来预防这一问题再次发生,他们就能提供更加积极的用户体验。如果软件能够一直满足客户期望,那它就是在慢慢赢得客户的信任和忠诚度,这最终能帮助企业提高收入并实现长期增长。
开展根本原因分析的技巧
- 从多个来源收集信息,并理解您的数据
执行根本原因分析时,数据质量、可见性和透彻理解数据都至关重要。Elastic 可为您提供解决方案,让您将所有数据都集中到一个系统中。您可以在 Kibana 和交互式工具中获得数据可视化,而这些数据可视化可帮助您深入挖掘可观测性问题并调查安全事故。 - 和团队共同开展,让更多人查看数据和了解问题
Elastic 在 Kibana 和 OpenTelemetry 中针对个性化协作提供大量支持,帮助您简化工作流并协助团队上报问题。 - 做注解
Elastic 提供精简的告警和案例管理功能,让您可以凭借针对您的数据和可视化的更丰富上下文更快地收获洞见,包括在 Kibana 中从 Elasticsearch 查询动态收集注释。对于基于查询的注释,您还能够通过注解手动为 Kibana Lens 可视化添加注释。
使用 Elastic 进行根本原因分析
Elasticsearch 平台以及其内置解决方案——Elastic 企业搜索、Elastic 可观测性 和 Elastic 安全——可以彼此协作,发挥巨大作用,协助您进行根本原因分析。Elastic 可观测性是一项部署极为广泛的解决方案,适用于将指标、日志和跟踪转换为行之有效的 IT 见解,让您能够实现对整个数字生态系统的一体化可观测性。此外,分析师将 Elastic 安全评为安全分析和 SIEM 领域的领导者。
更具体来说,下列功能可在不同阶段帮助您更快地完成根本原因分析:
- 通过 Elastic 代理和数以百计的集成采集数据。
- 使用预配置的告警和异常检测,接收有关潜在问题的自动通知,从而有效地为您的监测工作开启“自动导航”模式。
- 应用 Machine Learning 和 AIOps 来大规模地处理大型数据集,使用定制的交互式功能(包括 APM 关联性和解释日志率骤升)协助开展 RCA 以获得可观测性,对于安全调查则使用诸如会话视图和事件时间线等功能,并使用 Osquery 向主机查询诊断信息。
- 使用引导式旅程确定引发因素,并使用 Elastic 案例管理针对根本原因开展协作并共同找出正确的解决方案来修复并预防问题。
为了帮助您的团队充分利用根本原因分析,欢迎开始免费试用并了解 Elastic 能够为您提供哪些帮助。