当前位置: 首页 > news >正文

遇到运维故障,有没有排查和解决故障的正确流程?

稳定是偶然,异常才是常态,用来标注IT运维工作再适合不过。

因为对于IT运维来说,工作最常遇到的就是不稳定性带来的各种故障,经常围绕发现故障、响应故障、定位故障、恢复故障这四大步。

故障处理是最心跳的事情,没有之一。

首先它的发生是随机的,完全未知,尤其是大型互联网系统,海量的用户,故障发生后精神高度紧张,要顶着巨大的压力,用最短的时间协同各方制定方案、恢复业务,尤其考验一个人的综合素质。

其次,处理期间要面临各种老板、质量部门和未知部门未知人员的盘问,各种客服报过来的用户投诉和催促(PS 平时真不知道有这么多人关心着我们),对外信息的同步升级、对内故障的处理都要兼顾,毫不夸张,就是一场必须用最快速度打赢的突击战,需要团队在平时就训练有素,居安思危,同时,它也是一个SRE向高段位修炼的最好道场,被故障搞的神经衰弱,真的很刺激,人们常说台上一分钟台下十年功,运维又何尝不是。

那么,如何处理好一个大型互联网系统的突发故障呢,有没有方法论?

一、丰富的业务储备

1、百发百中生死告警

告警是发现故障的最有效途径,其建设要围绕3个点准、少、快,准是告警的信息准,少是告警的数量少都是有效告警,快指的是告警的实效性高速度快。

作为大型互联网系统,服务和指标都是海量的,告警再怎么分级、收敛还是多,所以必须建立一个用户使用角度的生死告警,并且不断修正确保其准确,生死告警代表系统的生死任何人在任何时候任何地点看到都需要立刻响应

告警收到崩溃,时常手机烫到死机,告警的短信铃音连成直线,但很多时候其实是正常的,沉重的历史包袱要把存量告警梳理一遍成本太大,绞尽脑汁后,果断拉齐所有部门,建立唯一生死告警,后面新系统也做了同样的操作,搞好后大家面对告警都松了一口气,可以看下我们生死告警的群公告。

所以,业务一定要有P0级生死告警,判断到底是真故障还是假故障

2、深度理解系统架构

SRE和系统运维的最大区别,我认为SRE得在系统运维的基础上研究业务,研究系统架构、产品架构,SRE面向的是用户稳定性

大型互联网系统,模块多、依赖关系复杂,运行的资源环境复杂,如果不了解系统架构,在出现问题时基本就是抓瞎的,不知道服务的功能,不知道到故障后对用户的影响,不知道出了问题后查哪些指标,不知道服务依赖了哪些第三方资源,不知道服务间是怎么调度的,等等都会让SRE局限在系统外的狭窄空间,只能被动的接受安排,很难对产品稳定性提出建设性的意见。

所以要高效处理好故障,一定要和研发的架构师一起深入理解系统架构,而不仅仅停留在基础资源iass层。

3、各种预案了然于心

一定要在日常勤加练习,对各种原子预案可以“闭着眼”快速操作

4、完备的运维工具

从故障发现、故障诊断、故障恢复全过程都离不开工具的支持,一定要选对工具提效,能自动化全部自动化,人肉已经不能很好的处理大型互联网场景下的故障处理,效率太低。

LinkSLA智能运维管家,从故障发现到恢复做了全流程的设计,虽然目前还有很多要做的地方,但已经大大提升了我们在故障发现、分析、诊断、恢复、复盘的效率,上张图。

二、强劲的综合素质

1、临时应变能力

故障的突发性、不可预见性、每次处理的人都不一样,需要用智能运维工具快速定位、根因排查,快速应对故障,降低故障影响,提高运维工程师的综合素质,不仅仅在技术层面,也在心理和应变决策方面。

2、组织协调能力

大多数故障需要跨部门多人协同处理,SRE需要起到组织、协调引导故障快速解决的作用,所以组织协调能力不可或缺。

3、快速的决断力

不善决断对处理故障是个大伤,因为故障期间每分每秒都很珍贵,而且基本上充斥着各种决策,每个决策都需要权衡利弊不能犹豫,所以要独挡一面的处理复杂的故障,一定要锻炼快速的决断力。

4、迅速的执行力

快速决断后,就要快速的执行,执行过程一定不能拖延,快速操作做到闭环。

5、优秀的心理素质

用户量越大的系统、责任心越强的人,处理故障所需要的心理素质就越强大,否则根本就无法在那种高压的环境下从容的处理,期间还要面临故障延长带来的定级压力,所以要做大型互联网系统的SRE,真的要有一颗强大的心。

三、有章法的处理过程

具备了这些储备和素质后,算是有了和故障战斗的能力,但还不够,处理过程还需要遵循一些战术和章法,才能做到有条不紊,快速结束战斗、取得胜利。

收到告警后,首先快速判断影响范围,第一时间通知到对应管理员,如果影响严重立刻开启专家会议,以最快速度恢复,将故障影响降到最低。

大型互联网系统模块众多、依赖关系和运行环境复杂,研发和SRE要快速通过各种监控、指标的变化分析定位大概故障点,并将可疑的问题罗列出来,然后将其分发下去分别快速落实,此过程的价值观一定是先恢复业务再排查问题但往往得排查到能足够支撑预案决策的原因,再由总指挥牵头制定恢复方案,再由SRE和研发去分工执行,验证结果是否符合预期,循环往复直至故障恢复,下面我们从两个角度看一下。

1、故障临时组织——分工协作篇

在这里就引出了一个最重要的点——因故障临时聚在一起的这些人如何快速建立组织、高效协作?谁该干什么该如何分工?一些大的故障会有几十个人、N多部门参与处理,如何保证处理过程有序而不乱?在经过无数次故障后,我认为一般要有5类角色:

总组织(流程专家, 发动机角色,组织大家快速分工到位,形成作战室,负责过程纠偏,一般是SRE)
总指挥(对恢复方案负责,带领技术专家们, 拿主意做决策,一般默认在场经验最丰富的架构师)
执行官(对各种执行负责,一般是由经验丰富的SRE和研发)
信息官(对故障恢复情况周期性通告, 内、外信息的上通下达,一般是SRE)
外部团队(按需参与,一般由执行官负责调度)

生产力决定生产关系,有了好的生产关系,生产力才能上去,所以上面的分工尤其重要,根据故障的大小这5类角色可以复用,但不可裁剪,总组织在里面尤其重要

另外关于角色,也不一定很刻板的言明指定,协作多了后会有默契在里面,每一次分工其实都是对人的授权,不管言明与否,如果要高效快速,不妨按照这种分工试一下。

在一些复杂故障的处理过程中,会有源源不断的信息从执行官、信息官反馈到总指挥,总指挥协同他的专家组进行分析决策,再把新的执行指令分发下去,如果大家目标偏了,比如陷入到了问题中,总组织负责识别并纠偏,整个临时组织的执行力、反馈力都是极强的。

当你经历一次重大故障,全天8个小时一直在电话会中,不停的决策执行反馈、决策执行反馈,那个强度和压力是巨大的,但收获也是巨大的,毫不夸张的讲,一次重大故障,基本能把系统的架构摸得门儿清

2、故障排查过程——循序渐进篇

故障排查也是要遵循章法的,整个过程会从轻到重进行分析操作,比如机房的某个实例告警,不会一开始就把所有流量全部切到另一个机房,也不会一开始就找大老板申请机动资源劳民伤财的紧急扩容,而是会尝试重启预案,如果恢复了做下复盘就好。

所以为了杀鸡不用牛刀,故障的排查和操作是循序渐进的从低成本到高成本的方向走的,期间最重要的是要提高每个操作的可预见性,并用最优雅、简洁、快速的方式恢复业务,怎么从根本上解决问题等到故障复盘时再定,总结一下常用的故障判断优先级,从低到高。

P0:是否大面积告警, 排查基础资源比如网络、公有云是否有问题,决策是否要执行流量切换预案;
P1:如果是单服务、单实例,常规情况尝试 重启预案
P2:排查是否有时间吻合的变更,尝试 回滚预案,常规情况下回滚会在重启预案无效后再执行;
P3:排查是否有流量突增,或服务器压力增大,启动 扩容和限流预案
P4:排查是否有功能无法恢复,并拖垮其他优质服务,启动 降级预案
P5:综合预案、临时预案,具体情况具体制定,但基本是6把刀的组合拳。

制定恢复方案通常要遵循白名单原则,即优先保证不伤害优质服务,比如说C3机房的服务正常,C4已经大面积不可用,考虑要将流量切到C3,一定要保证C3机房的服务不受影响的前提下,再用C3去救C4机房,别本来75%的可用性,切后雪崩变成了0%。

内容转自知乎,有删减

相关文章:

遇到运维故障,有没有排查和解决故障的正确流程?

稳定是偶然,异常才是常态,用来标注IT运维工作再适合不过。 因为对于IT运维来说,工作最常遇到的就是不稳定性带来的各种故障,经常围绕发现故障、响应故障、定位故障、恢复故障这四大步。 故障处理是最心跳的事情,没有…...

javaWebssh汽车销售管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh汽车销售管理系统是一套完善的web设计系统(系统采用ssh框架进行设计开发),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用 B/S模式开发。开发环境为TOMCAT7.…...

基于pandoraNext使用chatgpt4

1.登陆GitHub 获取pandoraNext项目GitHub - pandora-next/deploy: Pandora Cloud Pandora Server Shared Chat BackendAPI Proxy Chat2API Signup Free PandoraNext. New GPTs(Gizmo) UI, All in one! 在release中选择相应版本操作系统的安装包进行下载 2.获取license_…...

12.视图

目录 1.视图的含义与作用 2.视图的创建与查看 1.创建视图的语法形式 2、查看视图: 1.使用DESCRIBE语句查看视图基本信息 2.使用SHOW TABLE STATUS语查看视图基本信息查看视图的信息 3.使用SHOW CREATE VIEW语查看视图详细信息 4.在views表中查看视图详细信息…...

Leetcode69 x的平方根

x的平方根 题解1 袖珍计算器算法题解2 二分查找题解3 牛顿迭代 给你一个非负整数 x ,计算并返回 x 的 算术平方根 。 由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。 注意:不允许使用任何内置指数函数和算符&…...

在Linux上安装配置Nginx高性能Web服务器

1 前言 Nginx是一个高性能的开源Web服务器,同时也可以作为反向代理服务器、负载均衡器、HTTP缓存以及作为一个邮件代理服务器。它以其出色的性能和灵活性而闻名,被广泛用于处理高流量的网站和应用程序。本文将介绍在Linux环境中安装Nginx的步骤&#xf…...

LeetCode 每日一题 Day 11||贪心

2697. 字典序最小回文串 给你一个由 小写英文字母 组成的字符串 s ,你可以对其执行一些操作。在一步操作中,你可以用其他小写英文字母 替换 s 中的一个字符。 请你执行 尽可能少的操作 ,使 s 变成一个 回文串 。如果执行 最少 操作次数的方…...

ocr表格文字识别软件怎么使用?

现在的OCR软件几乎是傻瓜式的设计,操作很简单,像金鸣识别的软件无论是网页版还是电脑客户端又或是小程序,界面都简单明了,用户只需提交待识别的图片,然后点击提交识别,等识别完成就直接打开或下载打开就行了…...

【QT 5 调试软件+Linux下调用脚本shell-经验总结+初步调试+基础样例】

【QT 5 调试软件Linux下调用脚本shell-经验总结初步调试基础样例】 1、前言2、实验环境3、自我总结4、实验过程(1)准备工作-脚本1)、准备工作-编写运行脚本文件2)、给权限3)、运行脚本 (2)进入q…...

使用 Goroutine 和 Channel 构建高并发程序

使用 Goroutine 和 Channel 构建高并发程序 文章目的与概要Golang 并发模型的重要性 Goroutine 和 Channel 的基础Goroutine:轻量级线程Channel:通信机制Goroutine 与 Channel 的协同工作 构建高并发模型的策略有效使用 Goroutine使用 Channel 进行数据传…...

大数据机器学习与深度学习——过拟合、欠拟合及机器学习算法分类

大数据机器学习与深度学习——过拟合、欠拟合及机器学习算法分类 过拟合,欠拟合 针对模型的拟合,这里引入两个概念:过拟合,欠拟合。 过拟合:在机器学习任务中,我们通常将数据集分为两部分:训…...

Lenovo联想拯救者Legion Y9000X 2021款(82BD)原装出厂Windows10系统

链接:https://pan.baidu.com/s/1GRTR7CAAQJdnh4tHbhQaDQ?pwdl42u 提取码:l42u 联想原厂WIN10系统自带所有驱动、出厂主题壁纸、系统属性专属LOGO标志、Office办公软件、联想电脑管家等预装程序 所需要工具:16G或以上的U盘 文件格式&am…...

pytorch中的transpose用法

注意:维数从0开始,0维 1维2维…,负数代表从右往左数,-1代表第一维,以此类推 import torch import numpy as np# 创建一个二维数组 arr torch.tensor([[[1, 2],[3, 4]],[[5, 6],[7, 8]]]) print("原始数组:"…...

SpringBoot面试题及答案(最新50道大厂版,持续更新)

在准备Spring Boot相关的面试题时,我发现网络上的资源往往缺乏深度和全面性。为了帮助广大Java程序员更好地准备面试,我花费了大量时间进行研究和整理,形成了这套Spring Boot面试题大全。 这套题库不仅包含了一系列经典的Spring Boot面试题及…...

KUKA机器人如何隐藏程序或程序段?

KUKA机器人如何隐藏程序或程序段? 如下图所示,新建一个示例程序进行说明, 如下图所示,如果红框中的动作指令不想让别人看到,想隐藏起来,如何做到? 如下图所示,在想要隐藏的程序或程序段的前后,分别添加 ;fold 和 endfold指令(这里要注意是英文状态下的输入法), 如…...

C++ STL(1)--概述

1. 简述 STL即标准模板库 Standard Template Library,包含了许多在计算机科学领域里所常用的基本数据结构和算法。STL具有高可重用性、高性能、高可移植性(跨平台)的优点。 两个特点: 1.1 数据结构和算法分离。 1.2 它不是面向对象的,是基于模…...

unity 2d 入门 飞翔小鸟 死亡闪烁特效(十三)

一、c#脚本 using System.Collections; using System.Collections.Generic; using UnityEngine;public class Bling : MonoBehaviour {public Texture img;public float speed;public static bool changeWhite false;private float alpha0f;// Start is called before the fi…...

Cannot find cache named ‘‘ for Builder Redis

当引入 Redissson 时,springCache 缓存机制失效 原因:springCache 默认使用本地缓存 Redisson 使用redis 缓存 最后都转成redis了。。。 总感觉哪不对 两者居然不共存...

IntelliJ IDEA的下载安装配置步骤详解

引言 IntelliJ IDEA 是一款功能强大的集成开发环境,它具有许多优势,适用于各种开发过程。本文将介绍 IDEA 的主要优势,并提供详细的安装配置步骤。 介绍 IntelliJ IDEA(以下简称 IDEA)之所以被广泛使用,…...

光线追踪算法实现

我们已经涵盖了所有要说的内容! 我们现在准备编写第一个光线追踪器。 你现在应该能够猜测光线追踪算法是如何工作的。 首先,请花点时间注意一下,光在自然界中的传播只是从光源发出的无数光线,它们四处反弹,直到到达我…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析,分为​​已启动​​和​​未启动​​两种场景: 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​:当其他组件(如Activity、Service)通过ContentR…...

如何在Windows本机安装Python并确保与Python.NET兼容

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...

Redis上篇--知识点总结

Redis上篇–解析 本文大部分知识整理自网上,在正文结束后都会附上参考地址。如果想要深入或者详细学习可以通过文末链接跳转学习。 1. 基本介绍 Redis 是一个开源的、高性能的 内存键值数据库,Redis 的键值对中的 key 就是字符串对象,而 val…...