写点什么

故障定位系列 -3- 容器资源故障

作者:乒乓狂魔
  • 2025-04-11
    浙江
  • 本文字数:1061 字

    阅读完需:约 3 分钟

准备出一系列故障定位的经验分享文章

1 故障场景

某个时刻,几十个电商服务同时出现告警,如下所示



经过几十分钟的排查,最终确定了如下故障结论

  • 定界:服务 J 是根因服务:影响了上游一系列的服务

  • 定位:服务 J 的 CPU 使用率非常高

2 定位难点

2.1 定界的难点

这个之前的故障案例中已经详细分析过了,见 故障定位系列-1-接口级故障

2.2 定位的难点

当我们发现当前服务是根因服务时(即下游服务并未发现问题),我们就需要分析当前服务自身的问题



当前服务自身的问题包含如下:

  • GC 问题

  • 资源问题

  • 变更问题

  • 等等

那就只能一一检测上述问题,并且上述问题也只能作为辅助因素,因为没有严谨的数据能证明 GC 超过 XXXms 跟当前故障是否一定强相关


当我们要查看该服务或者实例的资源指标,这里就涉及到非常重要的数据关联操作



不同环境下的数据如何跟 APM 的服务和服务实例建立关联呢?

本质上就是定义一套资源标准,将不同环境下的数据指标映射到这套标准上

  • APM 数据要采集足够多的关联字段,才能跟其他各种环境的资源数据进行关联


做到了上述几点,就建立起了服务实例跟各种资源指标的关联,然后就进行异常检测


CPU 异常检测的难点:

异常检测为了适应各种服务的波动,通常是突变检测,即产生突变即会认为是异常,对于 CPU 来说,很容易被突变检测认为是异常,因此还需要一些其他的一些抗干扰的检测能力

  • 最低的 CPU 阈值:低于此则不认是异常

  • 波动率:比如至少波动 30%才可能认为造成响应时间的波动


同时对 CPU 波动度进行打分,波动度越高得分高,根因排序的优先级就高,因此同一个服务内的各个根因都要有打分机制,通过打分机制来决定到底哪个更适合作为根因

3 实战案例

我们到RootTalk Sandbox上进行上述故障场景的复现。

RootTalk Sandbox是一个故障演练和定位的系统,可以进行多种故障场景的复现,目前开放注册。

地址:https://sandbox.databuff.com/

3.1 故障注入



如上图所示进行操作,对拓扑图中的 service-j::k8s 这个服务的所有实例容器 CPU 满载的故障。

注入后等待 2~3 分钟,可直接点击跳转到 Databuff 的故障定位平台

3.2 故障定位

登录 Databuff 后可以看到完整故障树,如下图。



点击根因节点



一旦是 CPU 问题会导致许多的组件访问都会出现问题,这时候 CPU 的优先级会更高一些

点击服务实例-CPU 问题的地址链接,可以直接验证是否真的是 CPU 抖动上升了



用户头像

乒乓狂魔

关注

还未添加个人签名 2017-11-30 加入

还未添加个人简介

评论

发布
暂无评论
故障定位系列-3-容器资源故障_可观测性_乒乓狂魔_InfoQ写作社区