跳到主要内容

6 篇博文 含有标签「排障实战」

查看所有标签

依赖报错怎么办

· 阅读需 4 分钟
Kindling-OriginX
故障根因推理引擎

依赖报错怎么办

在开发过程中,经常会依赖各种库,可能是公共的、可能是公司内部的。这些依赖给我们开发带来了很多便利,避免了重复造轮子。但是这也导致程序中的很多部分彻底变成了黑盒,出现问题时更加难以定位和确定根因,使得很多时候既没有明确的排查方向,又要面对程序执行的黑盒,根本无从下手。

常常会遇到通过日志发现底层依赖库抛出了异常,例如依赖的某个库中抛出了网路连接的错误,通过日志看到产生了Connection Refused或着响应发生了超时,但通过 APM 工具发现网络和其他依赖服务都没有问题,只能看着错误信息干着急。

依赖报错怎么��办

要不先求助依赖库的开发同学看看

依赖报错怎么办

再求助负责基础设施的同事帮帮忙

依赖报错怎么办

最后只能重新想办法,可办法又是什么呢?

依赖报错怎么办

通过查看日志,我们定位到抛出异常的库。但是,我们并没有对这个库进行过任何变更,那么该如何进行接下来的排查呢?又需要哪些数据来佐证内心对问题的各种推测和猜想呢?这些推测和猜想又真的是正确的方向么? 依赖报错怎么办

需要明确方向,打开盲区

一方面需要对 Trace 数据做更加深入和全面的分析及数据关联来明确排查方向,另一方面需要真正能够彻底消除盲区,真实还原程序执行过程。

Kindling-OriginX 通过分析和关联 Trace 、Log、Metrics 数据,补充并细化 trace-profiling 的指标,深入并明确问题方向;另一方面利用 eBPF 结合 trace-profiling 技术打开程序执行和系统调用盲区,从根本上彻底还原程序执行过程,不再有黑盒存在。 依赖报错怎么办

定位关键指标,关联相关数据

依赖的相关代码中确实存在bug。 依赖报错怎么办

智能化给出可解释性的根因报告

根据报告和数据发现网络设施确实存在波动,提供相关交接数据。 依赖报错怎么办

自动化 Tracing 关联分析异常数据,彻底打开全部盲区

消除传统 Trace、Log、Metrics 数据中的盲区,找到盲区中的问题点,发现存在DNS耗时异常。 依赖报错怎么办 对于难以明确排查方向,无法定界的故障,Kindling-OriginX 快速组织和分析故障线索,通过自动化 Tracing 关联分析,以给出可解释的根因报告的方式,为这类故障提供可操作的排查方法。

如何找到并发请求中的锁

· 阅读需 7 分钟
Kindling-OriginX
故障根因推理引擎

如何找到并发请求中的锁

经常听大家讲到在业务平峰期间一切正常,但当并发上升时用户端延时上升,体验急剧下降,往往这时候是由于应用锁导致。例如用户端访问时延是3s,数据库访问耗时500ms,而数据库索引和慢请求也都已优化,那么其他的2.5s到底是消耗在哪里?如果这其中的体验差距是由锁导致,那么又该如何快速定位这些锁,并将他们消除呢?

一方面受制于现有可观测性工具能力的限制,我们并不能有效地发现然后将其解决,另一方面传统的压测方法也并不能完美复刻生产环境的全部真实情。对于这些并发上升导致的问题,以及应用中看不见的锁,Kindling-OriginX 提出新的解决方法。

历史经验不准

实际工作中往往习惯于使用个人历史经验判断是哪些服务出现故障,哪些应用容易出现锁,微服务架构下,应用缩容扩容,应用实例数的不同,相同的问题常常表现出不同的现象。这就导致使用历史经验判断并不能有效的找到问题。

Kindling-OriginX 能够快速给出全部异常节点的根因报告,同时报告已给出分析结论,不论问题表现的现象如何,用户都能够快速简单的进行统一分析。例如下图的拓扑结构中,同样的性能问题,因为每个节点的实例数的不同,都会导致表现出不同的现象。Kindling-OriginX 已经分别对报告做了聚合,对数据做了分析,用户只需要简单查阅报告即可。 如何找到并发请求中的锁-历史经验不准

无法找到锁在哪里

实际生产环境中,一方面不可能事无巨细将应用所有变化都记录在日志中,另一方面很多数据也无法直接进行观测得到。往往知道应用里有锁,但是根本没有有效手段去找到锁在哪里。

Kindling-OriginX 通过实时监控和深度分析,快速识别性能瓶颈的同时,对每一个慢请求从系统调用级别进行拆解分析,究竟是GC、CPU等待、或是代码质量问题一目了然。

例如在下图示例中,futex耗时远大于历史基线值(futex是一种用于用户空间应用程序的通用同步机制,这里简单起见可以将其理解为一种锁机制),再结合自动化GC关联分析,得出故障根因是有锁,且该锁是由于系统发生GC导致 如何找到并发请求中的锁-无法找到锁在哪里1 如何找到并发请求中的锁-无法找到锁在哪里2

人工分析不可行

实际生产环境中,时时刻刻产生大量的 Trace 数据,要从这些大量的低价值数据中找出问题的根源,需要耗费大量时间进行人工分析,几乎不可能通过人工的方式找到关键数据。这不仅增加了工作负担,而且没有任何时效性可言。

Kindling-OriginX 通过异常占比与报告收敛的方式进行数据聚合,即使在大量 Trace 数据的情况下,也能对数据情况一目了然,快速找到所关心的数据。

如何找到并发请求中的锁-无法找到锁在哪里2 如何找到并发请求中的锁-无法找到锁在哪里2

干扰数据导致无法找到锁

系统整体性能急剧下降时,所有机器往往都处于高负载状态,越多的连接也会导致CPU需要处理的上下文切换越多,内存对象频繁的创建和释放也可能会导致出现因垃圾收集(GC)造成的延迟。这些干扰信号都可能会导致真正的问题被掩盖。

Kindling-OriginX 针对干扰数据多的问题,一方面将报告数据收敛聚合,避免数据过多造成的干扰,另一方面报告中直接给出根因结论,只需快速查阅就能得到结论,无需再进行人工分析和有效性判别。 如何找到并发请求中的锁-干扰数据导致无法找到锁

传统的可观测性工具在面对并发请求中的锁时无法提供有效的定位方式和解决方案,个人历史经验的误判,海量数据的分析、噪声信号的干扰,以及在动态复杂环境下的有效诊断,都要求更先进的技术和方法。Kindling-OriginX 提供全新的自动化、智能化关联分析 Log、Metrics、Trace 数据解决方案,通过 eBPF 和TraceProfiling 技术还原每一次请求过程,精准定位分析并发上升时应用中的各类问题。

如何集成 DeepFlow 的数据增强网络故障的解释力

· 阅读需 9 分钟
Kindling-OriginX
故障根因推理引擎

如何集成 DeepFlow 的数据增强网络故障的解释力

DeepFlow 是基于 eBPF 的可观测性开源项目,旨在为复杂的云基础设施及云原生应用提供深度可观测性。DeepFlow 基于 eBPF 采集了精细的链路追踪数据和网络、应用性能指标,其在网络路径上的全链路覆盖能力和丰富的 TCP 性能指标能够为专业用户和网络领域专家提供充足的排障定界支撑。

Kindling-OriginX 是一款故障根因推导产品,目标是提供给用户一个可解释的故障根因报告,让用户能够直接了解故障根因,并附有根因的推理过程以便验证根因的准确性。网络故障是故障当中比较难以简单解释的,仅仅告知用户哪段网络有问题是不够的,用户需要更多指标以及图解,才能帮助用户更好的理解网络到底发生了什么故障,以及发生在哪个环节。

本文介绍 Kindling-OriginX 通过结合 DeepFlow 完备的网络数据能力,自动化生成可解释的故障根因报告。

soma-chaos模拟网络故障

如何集成 DeepFlow 的数据增强网络故障的解释力

  • 针对seat-service注入200ms延时的网络模拟故障。
  • 接下来我们先使用 DeepFlow 来识别200ms的网络故障,并做出相应的action。

人工最简化排障过程

步骤一:利用Trace系统缩小范围

在微服务场景中,某个接口突然慢了,排障的第一步骤应该是看Tracing系统,找到Trace慢在哪个环节,以及慢的具体表现是什么。

用户通过Tracing系统能够找到具体的Trace,通过分析Trace能够发现seat-service执行时间很长,同时出现了一条非常长的config-service调用,但是config-service执行不慢。这个时候需要联动网络指标,来定位网络问题。

步骤二:利用DeepFlow火焰图确定故障发生在哪段网络

将故障代表traceid的输入DeepFlow在火焰图中,找到Trace在网络层面上的表现,然后深入分析这个火焰图,如果对火焰图比较了解,同时有具备网络知识的专家经验,是能够根据火焰图人为分析出:这个故障应该是发生在调用者也就是seat-service上,而且问题是发生了syscall到网卡的时间段,也就是容器网络时段出了问题(和故障注入是吻合的)。

如何集成 DeepFlow 的数据增强网络故障的解释力

步骤三:确定容器网络到底什么网络指标异常

根据故障排查经验,用户需要查看seat-service与config-service的pod的网络指标。这个时候用户需要跳转至DeepFlow的Pod级别的网络指标页面。通过该页面,用户能够查看出建连有200ms的延时突变以及RTT指标有突变。

如何集成 DeepFlow 的数据增强网络故障的解释力 如何集成 DeepFlow 的数据增强网络故障的解释力

步骤四:排除可能的干扰因素

根据经验,宿主机的CPU被打满和带宽被占满之时,虚拟网络也会出现丢包和时延,所以要排查当时seat-service与config-service所在node的CPU以及node级别的带宽,确保Node级别资源没有饱和。

通过k8s命令确认了两个pod所在的node节点,然后去DeepFlow的node指标监控页面查看相应指标,发现node的bps,pps等指标均在合理范围内。

如何集成 DeepFlow 的数据增强网络故障的解释力 如何集成 DeepFlow 的数据增强网络故障的解释力 如何集成 DeepFlow 的数据增强网络故障的解释力 由于node级别的网络指标没有出现明显异常,最终确定是seat-service的pod级别rtt指标异常。

人工排障总结

经过一系列的排查过程,最终用户是能够排查出故障的,但是对用户有以下要求:

  • 网络知识非常丰富
  • 深入理解网络火焰图
  • 熟练使用相关工具

Kindling-OriginX 如何结合 DeepFlow 指标,生产可解释的故障报告

Kindling-OriginX 针对不同的用户需求和使用场景,Kindling-OriginX 对 DeepFlow 的数据进行了加工呈现。

类比人工最简化排障过程,利用 Kindling-OriginX 的排障过程如下:

针对每一条 Tracing 自动化分析

针对此时的故障,自动化分析每条Trace,并按照故障节点对所列的Trace进行归集。Travel-service是由于级联故障导致的,本文不重点论述级联故障,如果有兴趣可以参考微服务级联故障该如何处理。 如何集成 DeepFlow 的数据增强网络故障的解释力

Review故障节点为seat-service的故障根报告

故障根因结论:对于子请求10.244.1.254:50332->10.244.5.79:15679 rtt指标出现200ms左右的延时

如何集成 DeepFlow 的数据增强网络故障的解释力

故障的推理验证

由于Kindling-OriginX 已经识别出是seat-service调用config-service的网络有问题,所以不用完全把 DeepFlow 的火焰图所有数据呈现给用户,只需要与 DeepFlow 对接,仅仅拿到seat-service调用config-service那段网络调用的相关数据即可。

利用 DeepFlow 的seat-service调用config-service数据自动分析出了客户端pod的容器网络出现了201ms的延时

如何集成 DeepFlow 的数据增强网络故障的解释力

Kindling-OriginX 会模拟专家分析经验,进一步关联DeepFlow的重传指标与RTT指标,从而确定到底是什么原因导致了seat-service调用config-service出现了延时的现象。

如何集成 DeepFlow 的数据增强网络故障的解释力

Kindling-OriginX 还会集成node的CPU利用率以及带宽指标,排除干扰因素。

如何集成 DeepFlow 的数据增强网络故障的解释力 Kindling-OriginX 将整个故障推理都在一页报告中完成,并且每个数据来源都是可信可查的。


总结

Kindling-OriginX 与 DeepFlow 都使用了 eBPF 技术,立求在不同的场景中为不同需求的用户提供灵活高效解决方案,也期待未来能看到国内有更多能力互补产品的出现。

DeepFlow 能提供非常完备的全链路网络基础数据,能够让云原生应用具有深度可观测性,对于排查网络问题非常有用。

Kindling-OriginX 是利用eBPF采集排障北极星指标、AI算法和专家经验构建故障推理引擎,给用户提供可解释的根因报告。

故障根因报告解读之:CPU篇

· 阅读需 9 分钟
Kindling-OriginX
故障根因推理引擎

本系列文章将以云原生环境下分布式系统的不同类型故障入手,从真实系统出发,分别以不同类型的故障为例,对故障根因报告进行介绍和解读。

本篇将通过实际案例对故障根因报告进行解读。将会使用开源模拟故障案例集系统 soma-chaos 作为故障注入平台,在 Kindling-OriginX 在线Demo上进行故障报告的解读,可以通过点击阅读全文进入 Kindling-OriginX 官方网站,实际体验故障注入和 Kindling-OriginX 的故障根因推理能力。

报告解读

  • 在 ts-order-service 中注入故障:运行额外任务抢占Pod可用的CPU资源。

    注入完成后稍等片刻,进入 Kindling-OriginX 的「服务健康检测诊断」页面,在「SLO实时异常检测」Tab页下我们可以看到 ts-order-service 涉及的服务入口出现 SLO 告警。 SLO告警

  • 在这里可以看到目前异常根因节点占比 ts-order-service 和 ts-seat-service 各占一半,他们都处于报警服务入口调用链路中。具体情况我们通过诊断报告详细展开。

    进入故障列表后也可以看到,这里分别有ts-seat-service和ts-order-service两个节点的多份故障报告,同时已经做了聚合。 故障报告列表 点击ts-seat-service的TraceID后进入该节点最新的故障报告。一份故障根因诊断报告有部分内容及多种相关Log、Trace、Metrics数据聚合分析而成,这里分别简单介绍。

  • 诊断报告概要。包括TraceID、故障发生时间、请求耗时、耗时对比信息等基本信息。 诊断报告概要

  • 单次调用链路信息。故障链路的调用详细信息及耗时信息。 单次调用链路信息

  • 故障根因。即该故障报告的最终结论信息及建议处置方法。该报告显示故障根因并不在 ts-seat-service 处,判定根因节点在下游服务处。接下来在对报告中关联的各类指标介绍过程中简要说明为什么会得到这个故障根因结论。 故障根因

  • 故障节点分析。报告中会对响应时间与历史基线进行比对,同时自动关联异常时间段的日志信息,无需再去通过其他手段查找。 故障节点分析

  • 接口执行耗时分析。这部分报告会对本次调用的北极星排障指标与历史基线值进行比对。主要包括CPU时间、网络时间、等待时间、其他时间(主要为存储时间等)。这里可以看到本次调用耗时最长的是网络时间 183.35ms,而且远超历史基线值。分析到这里往往会认为该服务可能存在网络问题。接下来我们对该指标继续下钻,对网络层面的指标进行更加深入地钻取。 接口执行耗时分析

  • 对外调用具体信息。 对外调用具体信息

  • 请求网络耗时详细分析。这部分报告针对网络指标进行了更加详细的拆分和数据钻取,对广义上的网络耗时进行的更细致的分析,为判定网络是否出现问题提供更有说服力的证据。 请求网络耗时详细分析

  • 网络质量指标。同时 Kindling-OriginX 会对整体的网络质量进行分析,即结合分段的网络时间和网络质量来综合判定网络耗时长是由于网络问题还是由于其他问题导致。所以在本例中分析后得出的故障根因结论为下游服务可能出现问题 网络质量指标

  • 接下来继续分析ts-order-service的故障根因报告。同样打开一份ts-order-service的诊断报告。故障根因显示:Runq耗时高,存在CPU抢占。从接口执行耗时分析中也可以看到,runq耗时占比最大,耗时180.27ms。根据这份报告,先来解释下什么是runq。

    runq(Run Queue Latency) 是一项描述操作系统性能、稳定性的重要指标,它描述了线程从进入就绪态到运行态的等待时间。CPU runqueue是一个表示等待CPU时间的概念。它是一个系统的活动队列,用于存储正在等待CPU资源的进程。当一个进程请求CPU资源时,它会被添加runqueue,等待CPU分配时间片。

    ts-order-service的故障根因报告 ts-order-service接口执行耗时分析

  • 结合runq的定义和 Kindling-OriginX 给出的根因报告,我们可以得到的结论是ts-order-service节点 CPU资源不足。

    到目前为止,报告解读完成,目前根据得到故障报告可以得到两个结论,分别是:

    1. ts-seat-service 网络指标正常,但网络耗时高,可能为下游节点故障。

    2. ts-order-service CPU资源不足。

级联故障处理

  • 在微服务系统中,任何单一故障往往都会以级联故障的形式表现出来,在该例子中即为ts-seat-service 和 ts-order-service 都发生了故障。从调用链路图中可以看到,ts-seat-service 是ts-order-service的上游节点。结合目前的结论和调用链路图,可以判定出ts-seat-service的调用慢非常有可能是由于ts-order-service慢导致的,根据级联故障处置优先级原则,应当优先解决被依赖节点的故障及ts-order-service。

    服务拓扑图

  • 在 ts-order-service 的故障根因报告中显示「Runq耗时高,存在CPU抢占」即表明该节点CPU资源不足,执行业务过程中耗费了大量的时间等待CPU资源。即CPU资源被我们注入的故障「运行额外任务抢占Pod可用的CPU资源」所抢占,导致链路中的请求在此处产生大量的等待,所以同时也会看到ts-seat-service的网络调用变慢,因为ts-seat-service的下游服务有锁。

小结

故障根因报告在 Kindling-OriginX 中扮演着重要的角色,它综合分析和展示了各种分散的Log、Trace、Metrics数据,结合专家经验自动完成关联聚合,避免了可能的信息断片和数据交叉误解,真正做到了从表面现象到深层次原因的逐步剖析。通过直观的报告展示方式,以全新的思路为故障排查定位以及故障根因的确定提供更加高效和便捷的解决方案,为实现分钟级定位级联故障,落地 1-5-10 故障响应机制提供一条可行之路。

棘手的级联故障

· 阅读需 8 分钟
Kindling-OriginX
故障根因推理引擎

已经使用很多可观测性工具,排障为什么仍然难?

在 Google 提出的SRE理念中,依据运维黄金指标是容易判断业务正常与否的,但是业务异常了,如何找到根因却是当前比较艰难的任务。

对于为什么排障难,不同角度能够得到不同的结论。本文主要从技术角度来谈谈为什么排障这么难?

各种可观测性工具 Traces、Metrics、Logging 的使用对于排查简单的问题确实比较有用,依据专家经验是能够做到快速排除故障的。

现在比较棘手的难题是出现一些级联的故障,也就是当业务出现异常的时候,各种异于平常的指标告警很多,即便在专家在场的情况下,依次排查每个告警仍然需要消耗非常多的时间。特别是在现代服务系统架构中,拓扑结构复杂,各服务间互相依赖,同时系统中存在着各类中间件,这些都使得大型业务系统中的故障往往都表现为级联故障,而且更加难以快速定位排障,在这种情况下,想要落地 1-5-10 是非常难的。

传统运维观念中为什么要设置不同种类的告警?

很多告警都是在踩坑中得到的经验教训,当业务异常之时,如果没有告警也就没有线索,不知道该往哪个方向排查。所以在传统排障理念中,告警提供了排障线索。

随着业务复杂化,踩得坑越来越多,告警规则以及各种类型的告警也变得越来越多。 在这种前提发展之下,实际生产中就会陷入左右为难的困境,不设置告警就没有了线索,或者缺失线索。但是告警过多又会带来很多干扰,产生告警风暴、埋没根因等问题,同时在一定程度上也会导致 OnCall 人员麻痹大意。那么这种困境该如何解决呢,是不是存在更加科学有效的方法?

Kindling-OriginX 创新提出仅仅依赖API SLO违约告警

SLO 违约告警其本质是依赖于 Google 提出的运维黄金指标来判断业务是否正常,如果业务不正常了,SLO 也就产生违约了。 Kindling-OriginX 能够不依赖于其它的告警,是因为 Kindling-OriginX 认为不管何种故障,最终都会影响到业务体验上,例如用户的访问请求等。如果任何业务都没有受有影响,即任意访问请求都没有变慢也没有出现任何错误和异常,那这个故障为什么能称之为故障呢?Kindling-OriginX 的核心能力是针对每次请求的故障trace,能够直接给出故障根因报告,在这种能力加持下,也就可以不用配置种类繁多的告警了。

面对棘手的级联故障,Kindling-OriginX 如何处理

面对棘手的级联故障,从本质来讲其实有两种优化手段

  • 通过算法判断出故障线索之间的潜在依赖关系,从而找到故障的根因,这也是传统 AIOps 的思路。
  • 重新组织故障线索,加快每个故障线索的分析,一分钟将所有故障线索都分析出结论。

Kindling-OriginX 选择了第二种方式来解决棘手的级联故障,通过trace来组织故障线索,每个故障trace都直接给出当前故障trace根因报告。

为了能够说明问题,这里以 soma-chaos 案例为例,通过注入一个网络故障后整个业务系统的变化分步作一具体说明。

  1. 对 routes service 注入网络故障。
  2. routes service 响应变慢。
  3. travel service 响应变慢,且比 routes service 更慢
  4. 初步走查发现大量请求在 travel service 处等待。

通过对故障现场的初步分析,我们可以得到两个线索

  1. travel service 响应变慢,同时大部分请求在等待
  2. routes service 响应变慢

通过对故障现场的数据观察和简单分析,得到了两个线索,但仍旧处于无从下手的阶段,往往需要更多的数据进行分析,或者需要有更丰富排障经验的专家来提供思路和排查方向。下面再看看 Kindling-OriginX 的解决方法。

对于这个故障,Kindling-OriginX 对于 travel service 的慢请求和 routes service 的慢请求都会分别直接给出根因报告,travel service 慢的根因是锁的时间很长,routes service 慢的根因是网络故障。

接下来不用再花费精力分析为什么 travel service 慢以及 routes service 慢,因为每个线索都已经快速的拿到了结论。接下来只需要根据结论来进行方案的研判或启动对应的应急预案即可以最快的速度进行业务的恢复。

在传统的排障方法中,很可能处置人员的注意力会被 travel service 的锁故障分散,甚至认为可能是根因,从而花费大量的时间和精力来分析和处理 travel service 的故障,但是却又不能精准快速定位,只能通过重启扩容等方案来进行穷举,浪费大量人力物力却也没能使业务快速回复。

Kindling-OriginX 通过对每个故障节点都直接快速给出结论,在排查级联故障之时,只需要遵循以下原则即可:

  • 被依赖的故障根因节点和基础设施故障(CPU、网络、存储)优先解决

级联故障该咋办?

· 阅读需 9 分钟
Kindling-OriginX
故障根因推理引擎

级联故障

单个服务发生故障,有可能导致故障沿着调用链路,扩散至多个上游服务,进而可能会导致多个服务均产生不同的故障现象,这就是典型的级联故障。在级联故障中,常常会被复杂多变的故障现象所误导,进而选择了错误的排查方向导致不可能及时完成排障。面对棘手的级联故障,究竟该怎么办?

什么是级联故障

这里以一个例子来展示级联故障。在如下所示的服务调用结构中,对 ts-route-service 服务注入故障。之后受多种因素的影响,在 ts-route-service 的上游节点甚至旁路节点都出现不同的程度的故障现象,这就是典型的级联故障在实际系统中的现象。 级联故障-什么是级联故障

为什么级联故障难以处置

这里继续以前文的系统为例,试试看能否找到故障。

该如何开始?

打开 Skywalking,筛选持续时间在 500ms - 10000ms 之间的近10分钟的请求数据,可以看到有667页近 10,000 条数据,这还是在并发量不大的情况下,如果稍有并发量这个数字更是难以想象,这么多 Trace 数据中究竟哪些有问题?哪些又能对我们定位帮助有帮助?该从哪些 Trace 数据着手开始分析?还没开始解决问题,就已经又得到了一堆的问题。 级联故障-如何开始1

既然看似都有问题,那就先随机选择几条 Trace 数据,抓紧时间开始排障。

下面这条数据看上去是 ts-travel-service 有问题。 级联故障-如何开始2

接下来这条看上去也是 ts-travel-service 出现了故障。 级联故障-如何开始3

再打开一条显示 ts-travel-service 和 ts-basic-service 调用时间很长。 级联故障-如何开始4

看到这里一头雾水就暂且认为故障发生在 ts-travel-service 或 ts-basic-service 。

该如何选择,选择是否完备?

通过对 Trace 数据的分析,大致定位问题原因是 ts-travel-service 或 ts-basic-service 出现故障,导致链路在 ts-route-plan-service 调用下游服务时候出现问题。那么这两个服务该如何选择先处理哪个?系统中当前只有这两个服务出现了故障?是不是有可能两个服务都出现了故障?分析到这里我们得到的是更多的疑问。可事实上,在这里我们无论选择哪一个开始排查,都并不能找到造成问题的根因所在。实际情况中那只能重头来过,听天由命各凭本事了。

级联故障中一旦选错了排查方向就会导致做无用功,浪费了大量时间得到的是更多的疑问。传统工具的告警或 Trace 数据往往以单体应用的视角为出发点,更加容易分散注意力。大量的 Trace 数据反而会成为选择错误排查方向的诱因。在实际故障处置过程中往往变成无从下手,无法抉择。要不凭经验拍脑袋,要不就在所有人焦急的催促中不停地重启、穷举,希望能够撞个大运。 级联故障-怎么办

是否有更好的方法处理棘手的级联故障

面对棘手的级联故障,从本质来讲其实有两种优化手段

  • 通过算法判断出故障线索之间的潜在依赖关系,从而找到故障的根因,这也是传统 AIOps 的思路。
  • 重新组织故障线索,加快每个故障线索的分析,一分钟将所有故障线索都分析出结论。

Kindling-OriginX 选择了第二种方式,通过 Trace 来组织故障线索,每个故障 Trace 都直接给出当前故障 Trace 根因报告。

级联故障-有办法

重新组织故障线索

Kindling-OriginX 以全局视角切入,一方面将出现 SLO 违约服务入口的故障节点全部列出,以节点比例进行统计根因占比,另一方面聚合故障报告数据。能够在排障开始阶段就能够对全局状态有所掌控,不再盲目查找数据。

级联故障-重新组织故障线索1 级联故障-重新组织故障线索2

直接给出故障根因

Kindling-OriginX 在报告中已直接给出了故障根因,无需人工分析,即使像上图所示有多个节点的报告,也只需逐个打开查阅即可,而无需逐节点查找数据再进行人工分析。只需将全部故障节点报告逐个阅读后,统一判定即可,不用再苦于如何选择 Trace 数据进行排障。 级联故障-直接给出故障根因1 级联故障-直接给出故障根因2 级联故障-直接给出故障根因3

标准化级联故障排障方式

在复杂的级联故障中,通过 Kindling-OriginX 逐个查询全部故障报告后,结合排障优先级原则进行故障处置(被依赖的故障根因节点和基础设施故障「CPU、网络、存储」优先解决)即可。同时关联的各类 Trace、Log、Metrics 数据也为各职能团队进行定界与任务交接提供标准化的数据,这也能够使多团队协作排障有标准化的流程与依据。

级联故障-标准化级联故障排障方式1 级联故障-标准化级联故障排障方式2 级联故障-标准化级联故障排障方式3 级联故障-标准化级联故障排障方式4 Kindling-OriginX 提供了一种新的处理级联故障的思路和方法,快速组织和分析故障线索,给出根因报告,并根据优先级原则进行故障处理。这种方法可以加速故障定位,避免级联故障中排查方向错误,同时能够以标准化的流程进行级联故障的排查,真正的有机会去在实践中落地 1-5-10 故障响应机制。