【故障定位系列】容器CPU问题引起的故障如何快速排查

原文地址:https://mp.weixin.qq.com/s/0VlIjbeEdPZUbLD389disA

当生产环境中的容器CPU出现异常时,可能会引发上层业务出现一系列问题,比如业务请求缓慢、网页卡顿甚至崩溃等,如果没有一个有效的故障定位方法,运维人员很难从海量的告警信息中快速找到根本原因并解决问题。

1 故障场景

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

image.png

通常的方法是,从海量的告警信息中搜索有效信息,经过几十分钟时间的排查,可以拿到如下故障结论:

  • **定界(确定故障服务节点):**服务J是根因服务,影响了上游一系列的服务

  • **定位(确定服务上的具体问题):**服务J的CPU使用率非常高

但是,对于生产环境中出现的问题,几十分钟的排查时间无疑是太久了。因此,我们需要一个效率更高、更准确的方案,能够在几分钟内就能找到问题根因。

2 故障定位思路分析

下面从定界和定位两个方面进行展开,讨论如何才能更高效的实现故障定位。

2.1 定界

对该故障的定界主要有如下2个难点

  • 如何确定是自身、访问组件、访问下游服务的问题?

  • 如何确定是自身还是下游服务的问题?

构建实时关系拓扑

首先需要拓扑依赖,构建出实时的关系拓扑

image.png

通过异常检测确定下游故障点

其次,对访问下游组件或者访问下游服务的异常或者错误进行异常检测,判断是否符合当前服务的故障范围。

image.png

进一步定界

一旦确定是访问下游服务导致之后,有如下3种可能:

  • 下游服务问题

  • 网络问题

  • 自身问题

判断方法是:客户端响应时间和服务端响应时间的基准对比。

image.png

  • 如果服务端的耗时也波动了,大概率就是服务端的问题;

  • 如果服务端的耗时没有波动,大概率是网络问题或者客户端的问题:

    • 通过网络丢包、重传来确定是否有网络问题;

    • 如果GC严重则大概率是客户端问题。

2.2 定位(确定服务节点上的具体问题)

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

image.png

当前服务自身的问题包含如下几种类型:

  • GC问题

  • 资源问题

  • 变更问题

  • 等等

对这几种类型的问题,我们只能一一检测,并且上述只能作为辅助因素,因为没有严谨的数据能证明GC超过XXXms跟当前故障是否一定强相关。

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

image.png

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

不同环境下的数据来源APM数据(包含serviceName、ip、pid、containerId、podName、主机host、k8s clusterId)
主机采集的进程数据(包含主机host、pid等)和APM关联方案:主机host+pid
docker采集的容器数据 (包含主机host、containerId等)关联方案:主机host+containerId
k8s采集的container数据(包含k8s clusterId、containerId、podName等)关联方案:k8s clusterId+containerId

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

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

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

CPU异常检测的难点:

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

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

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

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

3 实战案例

接下来,我们采用故障演练的方式来验证。

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

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

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

3.1 故障注入

image.png

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

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

3.2 故障定位

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

image.png

点击根因节点

image.png

由于CPU问题会导致许多的组件访问都会出现问题,所以CPU的优先级会更高一些。

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

image.png

这个排查过程只需要几分钟就可完成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/79930.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DeepSeek 智能客服应用指南:构建、策略与成效升级

目录 一、引言二、DeepSeek 与智能客服的相遇2.1 DeepSeek 的技术亮点2.2 智能客服:企业不可或缺的 “数字助手”2.3 DeepSeek 如何适配智能客服需求 三、基于 DeepSeek 搭建智能客服系统3.1 需求分析3.2 技术选型3.3 系统架构设计3.4 搭建步骤实操 四、基于 DeepSe…

JVM运行时数据区域(Run-Time Data Areas)的解析

# JVM运行时数据区域(Run-Time Data Areas)的解析 欢迎来到我的博客:TWind的博客 我的CSDN::Thanwind-CSDN博客 我的掘金:Thanwinde 的个人主页 本文参考于:深入理解Java虚拟机:JVM高级特性与最佳实践 本文的JVM均…

【特别版】Kubernetes集群安装(1master,2node)

Kubernetes集群安装 虚拟机准备 按照三台虚拟机标准,一台控制节点两台工作节点 主机名ip配置要求master-k8s192.168.242.102GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多node01-k8s192.168.242.112GB或更多RAM,2个CPU或更多CPU…

Excel点击单元格内容消失

Excel点击单元格内容消失 前言一、原因说明二、解决方案1.菜单栏中找到“审阅”,选择“撤销工作表保护”2.输入密码3.解除成功 前言 Excel想要编辑单元格内容时,无论是单击还是双击单元格内容都莫名其妙的消失了 一、原因说明 单击或者双击Excel中单元…

最优化方法Python计算:有约束优化应用——线性Lasso回归预测器

实际应用中,特征维度 n n n通常远大于样本容量 m m m( n ≪ m n\ll m n≪m),这种高维小样本场景下特征数据可能含有对标签数据 y i y_i yi​的取值不必要的成分,甚至是噪声。此时,我们希望回归模型中的优化…

如何为APP应用程序选择合适的服务器

搭建一个成功的APP应用程序,服务器选择是至关重要的决策之一。合适的服务器不仅能确保应用流畅运行,还能节省成本并保障安全性。本文将为您详细解析如何为APP选择最佳服务器方案。 一、了解您的APP需求 在选择服务器前,首先需要明确您的应用…

k8s(11) — 探针和钩子

钩子和探针的区别: 在 Kubernetes(k8s)中,钩子(Hooks)和探针(Probes)是保障应用稳定运行的重要机制,不过它们的用途和工作方式存在差异,以下为你详细介绍&…

Kafka消息队列之 【消费者分组】 详解

消费者分组(Consumer Group)是 Kafka 提供的一种强大的消息消费机制,它允许多个消费者协同工作,共同消费一个或多个主题的消息,从而实现高吞吐量、可扩展性和容错性。 基本概念 消费者分组:一组消费者实例的集合,这些消费者实例共同订阅一个或多个主题,并通过分组来协调…

什么是Blender?怎么获取下载Blender格式文件模型

glbxz.com glbxz.com 官方可以下载Blender格式文件模型 BlenderBlender 是一个免费的开源程序,用于建模和动画,最初由一家名为 Neo Geo 的动画工作室作为内部应用程序开发,后来作为自己的程序发布。这是一个称职的程序,近年来由于…

IC ATE集成电路测试学习——PLL测试(一)

PLL测试 什么是PLL? PLL Phase-Locked Loop(锁相环)它的作用就是:把低速、稳定的外部时钟,转换成芯片内部需要的高速时钟。 PLL的作用 我们知道,芯片的内部不同的模块,很可能用的不是一个频…

ReaRAG:教 AI 思考、搜索和自我纠正以获得事实准确答案(含git实现)

推理模型(LRMs)的发展取得了显著进展,展现出强大的推理能力,能在复杂任务中表现出色。然而,这些模型在多跳问答(QA)任务中仍面临挑战,主要归因于其对参数化知识的依赖,导…

第2章——springboot核心机制

一、为何以继承方式引入SpringBoot 1.提出疑问 以前我们在开发项目时&#xff0c;需要什么&#xff0c;引入对应的依赖就行&#xff0c;比如我们需要连接mysql数据&#xff0c;则引入mysql驱动的依赖&#xff0c;如下&#xff1a; <dependency><groupId>com.mys…

网络接入服务商查询

要查询网站的 网络接入服务商&#xff08;即网站服务器托管或接入的ISP公司&#xff09;&#xff0c;可以通过以下方法进行查询&#xff1a; 方法1&#xff1a;通过IP地址查询 步骤1&#xff1a;获取网站IP 使用 ping 命令&#xff1a; ping example.com 返回的IP地址即为服务…

超详细!RxSwift 中的 BehaviorRelay 使用教程(含原理 + 示例 + 实战)

目录 前言 1.什么是 BehaviorRelay 2.基本使用方式 3.BehaviorRelay的常用API 4.BehaviorRelay 和其它类型的对比 5.BehaviorRelay的使用场景 1.绑定UITableView 2.MVVM 场景下使用 BehaviorRelay 6.使用注意事项以及建议 1.注意事项 2.使用建议总结 7.推荐阅读 前…

vue-grid-layout实现拖拽修改工作台布局

效果图 vue-grid-layout 文档地址&#xff1a;vue-grid-layout 官网介绍&#xff1a; 使用 // 安装&#xff1a; npm install vue-grid-layout --save// 引用&#xff1a; import { GridLayout, GridItem } from vue-grid-layout// 注册&#xff1a; components:{ GridLay…

windows使用bat脚本激活conda环境

本文不生产技术&#xff0c;只做技术的搬运工&#xff01;&#xff01;&#xff01; 前言 最近需要在windows上使用批处理脚本执行一些python任务&#xff0c;但是被自动激活conda环境给卡住了&#xff0c;研究了一下解决方案 解决方案 call your_conda_path\Scripts\activa…

u-boot学习笔记(四)

文章目录 cmd/sub_cmd/exit.cdo_exit()exit.c可提供的命令及使用方式&#xff1a; ext2.cdo_ext2ls()do_ext2load()ext2.c可提供的命令及使用方式&#xff1a; ext4.cdo_ext4_size()do_ext4_load()do_ext4_ls()do_ext4_write()ext4.c可提供的命令及使用方式&#xff1a; fastbo…

OpenCV 图形API(80)图像与通道拼接函数-----仿射变换函数warpAffine()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 对图像应用仿射变换。 函数 warpAffine 使用指定的矩阵对源图像进行变换&#xff1a; dst ( x , y ) src ( M 11 x M 12 y M 13 , M 21 x M…

《React Native热更新实战:用Pushy打造无缝升级体验》

《React Native热更新实战:用Pushy打造应用“空中加油”,实现无缝升级体验》 写在前面:当你的APP需要"空中加油"时… 想象一下这样的场景:凌晨2点,你的React Native应用刚上线就爆出重大BUG,用户差评如潮水般涌来,应用商店审核至少需要3天…此刻你多么希望能…

《社交应用架构生存战:React Native与Flutter的部署容灾决胜法则》

React Native和Flutter作为当下热门的跨平台开发框架&#xff0c;在社交应用开发领域各显神通。今天&#xff0c;我们深入探索它们在高可用架构中的部署与容灾策略。 React Native凭借其独特优势&#xff0c;在社交应用开发中拥有一席之地。它基于JavaScript和React&#xff0…