SRE智能化服务检查体系构建
# 背景
# 需求输入
xx群控服务上线,上线完成后,未进行服务检查,CPU全部打满,业务也不知道,运维介入反推后才发起回滚。暴露出服务变更后,服务检查的必要性和重要性,同时又不能纯依靠人挨个维度逐渐检查,需要有平台能力,上线之后只需告诉他一个结论即可
xx服务,上线约20分钟后,内存打满,导致服务通信行为异常,更换容器规格后服务恢复
xx服务,上线后成功率下降且持续劣化,没有恢复迹象
# 问题剖析:变更的“双刃剑”效应
故障溯源:数据显示,高达95%以上的生产故障由变更直接或间接引发。这表明,变更管理是稳定性建设的核心战场。
变更分类
- 外部变更:运营商、机房等基础设施层面的变更,虽不可控但可预知。
- 内部变更:研发上线、架构调整、配置修改等,是故障的主要来源,占比极高。
当前模式的瓶颈
目前,我们对变更质量的把控,核心依赖于“人”。这带来了三大挑战:
- 能力差异:不同工程师的经验、技能、责任心存在差异,导致变更质量参差不齐。
- 主观误判:人工判断易受认知偏差、状态疲劳等因素影响,对复杂系统的潜在风险识别能力有限。
- 效率瓶颈:人工检查流程繁琐、耗时,无法适应敏捷开发和快速迭代的需求。
# 目标
为解决上述瓶颈,我们提议构建一个权威的自动化变更质检平台,作为所有变更流程的必经关卡。该平台的目标是将变更质量保障从“依赖人”转变为“依赖系统和流程”。
# 产品设计
- 标准化与客观化:建立统一的、量化的质量度量标准(如错误率、延迟、资源饱和度等),由平台自动执行检查,输出客观结果,消除人为不确定性。
- 风险前置与拦截:在变更流程中嵌入自动化检查点,实现“发布中监控、发布后验证”,将风险扼杀在萌芽阶段。
- 效率与规模化:自动化检查极大提升质检效率,支持高频次的变更需求,为业务快速迭代提供坚实的技术保障。
- 知识沉淀与赋能:将专家经验固化为平台的检查规则,实现知识的沉淀与复用,赋能整个团队,提升整体变更成熟度。
通过该平台,我们期望能将变更引发的故障数量降低一个数量级,显著提升系统的整体可靠性与韧性。”
# 架构设计
# 指标计算
- 变更前10分钟均值
- 环比前一天,前一周同时刻数据
# 模型设计
实例E-R关系图:主要分为服务检查模板、服务检查任务、检查项模板、检查项
服务检查模板:服务检查通过服务检查模板建立检查任务,模板定义了接入方、回调接口、检查项模板、同步/异步/同步非阻塞的通知方式、检查方式(正相关、泛相关)
检查项模板:定义检查类型是正相关、泛相关检查各自包含的检查项及检查范围
检查项:定义每项检查指标、数据来源、阈值、比对方式
检查任务:定义任务id、任务状态、检查结果、检查详情
接入方可以根据自己变更特点,创建服务检查模板,服务检查模板需要关联检查项模板,检查项模板用来定义使用至少1种检查方式(服务自身、网关F0接口等),不同的检查方式检查项是不同的(cpu、接口成功率等),可以自定义至少1种检查项(指标、阈值)。
实体服务检查模板:接入方调用服务检查,首先需要明确自己的场景类型,根据场景选择适合的模板传参,同时根据自己的场景选择检查方式,当前默认两种模板,分别对应正相关与泛相关的场景。
检查项模板:检查项模板和服务检查模板关联,默认生成两种模板。
服务检查任务:发起方发起检查任务,系统创建JobID(根据用户类型+工单id+时间戳生成),按照对应模板类型继续后续流程,并更新状态(待执行、执行中、执行完成、执行失败)
检查项:每种指标都需要关联数据源、比对类型(计算方式),根据阈值进行比对。
# 规范设计
# 接入规范
检查目标*:**
正相关:集群(zns形式或ns、服务、集群根据指标数据源来决定)**
泛相关:网关全量F0接口、qa巡检
时间范围**:**
变更开始时间和结束时间
如果没有明确的时间默认为收到调用前10分钟为开始时间,后5分钟为结束时间。
结果返回**:**
- 异步,用户需要给出回调地址
- 返回集群每个检查指标的详细记录,指标检查通过数量和不通过数量。
# 异常判定
指标 | 变化类型 | 阈值 | 备注 |
---|---|---|---|
接口入向成功率 | 下跌 | 10% | |
接口入向时延 | 上升 | 30% | |
接口入向流量 | 下跌 | 30% | |
CPU使用率 | 上升 | 20% | |
内存使用率 | 上升 | 20% |
注:以上指标为一个集群所有pod或所有接口平均值
对比开始时间:变更前1分钟
对比结束时间:变更完成后2分钟(需要关注监控数据的生产速度延迟大小)
判定规则:变更后的时间与变更前30分钟指标的平均值进行对比,检查指标中有一项不通过即为异常。
# 应用场景
- CD(代码上线、配置上线)
- 服务更新编排
- 路由变更
- 服务迁移
# 检查规范
目标:固定为一个完整的集群,如project-onk8s.op.qcvmbj6-docker
变更开始时间:10位时间戳
变更结束时间:10位时间戳
变更人:字符串
回调接口:首次接入提供
app_name:接入方标识,首次接入分配。
检查类型:服务类默认为正相关,首次接入配置
# 常用的统计量
统计量 | 描述 | 结论 | 备注 |
---|---|---|---|
平均值 | 将所有数值相加,然后除以数值的数量,得到平均值。 | 适用 | 容器把突增、突降变化降低,阈值不能设置过大 |
中位数 | 将所有数值按照大小排序,取出中间位置的数值作为中位数。如果数值的数量为偶数,则取中间两个数值的平均值作为中位数。 | 适用 | |
众数 | 数据集中出现次数最多的数值。 | 不适用 | |
极差 | 数据集中最大值和最小值之间的差值。 | 适用 | 无论指标突增突降,插值都可反映出变化 |
求和 | 将所有数值相加,得到求和值。 | 不适用 | 变更前后数据点数量不对等 |
最大值或最小值 | 取出所有数值中的最大值或最小值作为结果。 | 不适用 | 无法解决当前问题 |
百分位数 | 将数据点按大小排序后,按照百分比划分为不同的部分 | 适用 | 和中位数类似 |
方差 | 每个数据点与平均数之差的平方的平均值。 | 不适用 | |
标准差 | 方差的正平方根。 | 不适用 | |
相关系数 | 用于描述两个变量之间线性关系的统计量。 | 不适用 | |
四分位数 | 将数据点按大小排序后分成四份,第一份的最大值为第一四分位数,第二份的最大值为第二四分位数,第三份的最大值为第三四分位数。 | 不适用 | |
正态分布参数 | 包括均值和标准差,用于描述正态分布的形态和特征。 | 不适用 | |
比率或百分比 | 将某个数值除以总数值,然后乘以100,得到比率或百分比 | 不适用 |
# 泳道图
# 产品图
# CD质检
集群巡检