【故障定位系列】容器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.pswp.cn/pingmian/79930.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/79930.shtml
英文地址,請注明出處:http://en.pswp.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…