运维数据价值提升 基于SLO健康度体系探索与实践 演讲人:徐新龙 个人简介 徐新龙 蚂蚁集团基础设施团队SRE技术专家毕业于复旦大学信号处理方向 从事关于SLO的健康度体系建设,以及异常检测、故障定位、预案推荐等场景下的AIOps实践 曾就职于携程技术保障中心,负责AIOps的实践探索和落地 在人工智能技术结合运维场景的实践方面有丰富的经验和深 入研究 SLO介绍 为什么需要SLO SLO健康度体系 CONTENT 目录 如何利用SLO构建系统的健康度 AIOps赋能 SLO和智能化的结合 实践案例 基于SLO的实际运维场景介绍 SLO介绍 似曾相识的经历… 调度器性能分析… Day023:00 调度器队列有增长,怀疑请求容量有激增 Day017:00 增大重试时间间隔 Day018:00 重启调度器后仍无好转 Day020:00 定位到调度器的资源变更 Day111:00 集群状态:服役中 集群规模:11K节点,450Kpods 调度器资源优化 Day-517:00 调度器“带病”工作 Day-4~Day0 交付成功率下跌告警 Day-414:00 用户开始反馈 Day015:00 交付成功率下跌告警 Day020:00 排查认为是低优先级的容 器 Day-415:00 集群状态:服役中 集群规模:11K节点,450Kpods 经典思路--故障驱动 事前 变更管控 #注册 #审批 #过程式 #SOP #限流 #容量伸缩 事中 应急流程 事后 监控覆盖 #沉淀专家经验 #混沌攻击 •Event-drivenArchitecture •K8S主导的Operator体系正在削弱过程式变更的影响力 •多样性 •掌控力 DevvsSREorDev+SREor平台工程师 •改被动为主动 ServiceLevelIndicator 一个可以连续量化的指标,用来反映一个应用或者服务在某一个维度上提供的服务等级。 常用SLI 含义 时效性(Latency) 任何因果系统不可避免的具有延时,用来衡量和反映系统提供服务的速度快慢 可用率(Availability) 在时间片维度上反映系统提供服务的能力 成功率(SuccessRatio) 基于服务次数反映系统提供服务的能力 吞吐量(QPS) 实际系统都存在能力上限,对于能够提供或输出服务次数有所要求 正确率(Correctness) 系统能够正确提供服务的能力,常用于资金核验校对等 ServiceLevelObjective 服务等级目标,是对服务能力预期的声明。 明确服务目标 一致的客户体验 平衡效率与稳定性 改善用户沟通 以可用性目标为例,意味着可以接受的宕机或者不可用时长必须满足以下承诺 可用性目标 周 月 季 年 99% 100min 7.2hours 21.8hours 87.6hours 99.9% 10min 43.2min 2.18hours 8.76hours 99.99% 1min 4.32min 13.1min 52.6min 99.999% 6sec 26sec 1.31min 5.26min 99.9999% 0.6sec 2.6sec 7.86sec 31.5sec ServiceLevelAgreement 基于目标达成或失败的奖惩机制 原始数据vs.精加工数据 传统的Metric监控 •监控实体太多,难以关注到核心对象 •Metric太多,注意力容易失焦 •告警量大、告警频繁,疲于应对、容易麻木 •通过告警被动式的发现异常和故障 •SRE和研发缺少基于共同目标的沟通机制 •缺少相对统一的框架和实践驱动SRE工作 •不能形成可被借鉴、可复制的治理模式 •提炼通晒数据困难、费力度高 SLO健康度 •聚焦注意力 •对齐目标 •减少告警 •主动+被动式发现 •驱动SRE日常 •简化通晒数据 •可被借鉴的最佳实践 SLO健康度 基础设施域存在众多的异构系统 Kubernetes 应用网关 PaaS 中间件 数据平台 缓存 SLO SLO SLO record: pod_creation_request_total_count:delta1m expr: sumby(cluster,is_job)(sum_over_time(pod_creation_request_count:delta30s[1m])) record: pod_creation_request_total_count:delta1hexpr: sum_over_time(pod_creation_request_total_count:delta1m[1h]) 时序模型 Prometheus–单数值模型 Prometheus–SLO生成表达式 Recordingrule -record:PodCreationSLO30d -expr:1–pod_creation_request_error_count:delta30d/pod_creation_request_total_count:delta30d ServiceLevelFactor 服务水平影响因子 SLI的有效维度 SLO的分解维度 故障定位参考 SLO序列在时间维度铺开 ServiceLevelDependencies 服务水平依赖 •影响SLO的关键链路 •影响SLO的核心拓扑 •可以是一个SLO或监控项 •故障定位参考 [ "dependencies":[ [ •元数据配置 "slx_id":123456789, "category":"SLO", "name":"keycomponent-slo", "description":"component_frequent_restart","priority":1, "trigger":[ …….. ] ], …… ] ] •一段时间内预估的错误容忍量 •一次变更一次冒险 •用ErrorBudget来衡量这个冒险值不值得 目标错误率≥SLO阈值 选择较短的时间窗口𝑊,并计算该窗口的错误率超过SLO阈值时发出告警。 σ�𝑒𝑟𝑟𝑜�� σ�𝑡𝑜𝑡𝑎�� 𝑖=1≥𝑆𝐿𝑂𝑡ℎ𝑟𝑒𝑠ℎ𝑜𝑙� 𝑖=1 例如,30天的SLO为99.9%,则过去10分钟内的错误率≥0.1%时发出错误 -alert:HighErrorRate -expr:job:slo_errors_per_request:ratio_rate10m[job="testjob"]>=0.001 消耗速率警报 触发告警所需要的时间: 错误预算/错误量×燃烧率×告警窗口 警报触发时消耗的错误预算为: 燃烧率×告警窗口/告警时间 -expr:(job:slo_errors_per_request:ratio_rate1h[job="testjob"]>(14.4*0.001)andjob:slo_errors_per_request:ratio_rate5m[job="mytestjob"]>(14.4*0.001) )or( job:slo_errors_per_request:ratio_rate6h[job="mytestjob"]>(6*0.001)andjob:slo_errors_per_request:ratio_rate30m[job="testjob"]>(6*0.001) ) severity:page -expr:(job:slo_errors_per_request:ratio_rate24h[job="testjob"]>(3*0.001)andjob:slo_errors_per_request:ratio_rate2h[job="testjob"]>(3*0.001) )or(job:slo_errors_per_request:ratio_rate3d[job=“testjob”]>0.001 andjob:slo_errors_per_request:ratio_rate6h[job="testjob"]>0.001 ) severity:ticket 围绕SLO数据的能力建设 基础能力 •数据采集 •数据存储 •数据抽取 •多维透视 •数据展示 通用能力 •数据清洗 •模型抽象 •数据分析 •异常检测 •通用定位 生态运营 •模型扩展 •预案推荐 •智能决策 •故障自愈 •SLA运营 产品能力 •平台建设 •数据鉴权 •流程标准 •自动化 •易用性 AIOps赋能 •为SLO设置合理的目标值? •提升SLO告警的时效性和准确度? •SLO预警后如何快速定位根源? •针对整体SLO目标设定后,下游服务目标如何分解? •专家经验如何事先有效地注入到故障应急流程中? •如何将SLO和变更成功与否自动关联? •SLO在故障定级中如何发挥效用? AIOpsPlatformEnablingContinuousInsightsAcrossITOperationsMonitoring(ITOM) 运维场景 算法能力 智能运维 数字化 领域专家知识 问题定义 人机回圈 训练及调优 建模 输入输出定义 驱动和演进 决策及执行 数据分析 一些常用数据分析能力 居中度量 均值 中位数 众数 离散度量 极差 四分位差 方差 趋势度量 线性回归 指数平滑 ARIMA RNN、LSTM 周期度量 傅里叶变换 小波变换 序列分解 时间域分析 频率域分析 目标值推荐 待分析成功率SLO数据统计特性如下: SLO阈值分析 ------一般统计特性------ 最大值:1.00000000 最小值:0.99786642 平均值:0.99998783 中位数:1.00000000 众数:1.00000000 标准差:0.00010559 80线:1.00000000 85线:1.00000000 90线:0.99999874 95线:0.99998956 ----基线数据统计特性---- 基线平均值:0.99999994 基线标准差:0.00000011 ----残差数据统计特性---- 残差均值:0.00000060 残差标准差:0.00010558 残差峰度:201.97573294 残差偏度:-13.18331368 残差异常率:7.04861111% ----残差正态性检验---- KstestResult(statistic=0.49999976043925565,pvalue=0.0) -------SLO推荐值------- Objective:0.999 异常检测模型 基于统计规则或机器学习算法做出的预测 实际观测⊛预期目标 某种运算逻辑 或算法网络 阈值 基于数据分布或 场景的经验数值 vs. 异常检测准则 按照经验对残差数据集做出假设 x f(x) � 𝑥;𝜇,𝜎2 1 2𝜋� −(𝑥−𝜇) 2 2𝜎2 �=�=𝑒𝑥� 异常判断准则: PauTa准则 箱体图法 Tukey检验 Grubbs检验 Dixon检验 �检验 时间序列预测 常用算法: ARIMA 指数平滑 HotWinters STL分解 频域分析 RNN LSTM (I)动态阈值 (I)残差变换 通过数据分析,发现相关性,推导因果性 时间相关性 ��−�� 2 ��−�� 2 �−���−�� � 相关性打分 依赖相关性 Kubernetes拓扑 依赖相关性 构建SLD 维度清洗和标准化 SLF/SLD下钻 服务自动关联 异常打分 元数据检验 标准化输出 空间相关性 基于元数据拓扑结构的关联 图数据库模型 构建实体图谱 关联查询 量化异常时间点和事件时间点之间的相