Kindling-OriginX 在快手 Staging 环境的异常诊断效果分享
业务可用性问题的快速诊断,历来是行业互联网公司面临的重大挑战,快手也不外如是。Kindling-OriginX的体系化设计理念快速打动了我们的工程师。快手随即开始了内部真实业务的验证落地;落地过程中,Kindling-OriginX能高效覆盖大部分线上问题的快速定界,其中20%可直接给出根因,缩短业务影响时长。未来,我们希望与Kindling-OriginX在异常场景和诊断效率上继续深度合作,进一步缩短业务异常的恢复时长,以及提升工程师研发幸福感。
---周辉,容器云稳定性团队负责人
Originx注:快手团队对根因的要求比较高,比如一般团队遇到请求被锁住,得到锁的代码堆栈就够了,但是快手团队要求更高,更希望知道为什么代码发生了锁住originx目前还只能给出哪段代码堆栈导致锁住。
目的
愿景:缩短对线上稳定性问题的定位时长,帮助业务快速止损,减轻日常问题排查的人力成本。
1.是否能在在公司落地,给实际的问题诊断带来帮助;
2.为问题诊断提供借鉴思路:通过ebpf采集系统层面指标,打通业务请求链路。
结论
OriginX 诊断能力
结论:能够进行问题的定界。
延时耗时示意图
初步分支定界
可以对问题起到初步分支定界的作用,能初步判断出是问题哪个或哪些类别,即 :
1.CPU 执行(onCPU)
- 是否能够下钻
- 对 frequency 问题的判定效果?可以设置 frequency 吗【Originx 目前支持各种频率 CPU 采样,但是需要重启探针】
2.等待调度到 CPU(RUNQ)
- 较少发生,主机有较高 的负载的场景
3.读写文件(VFS 的直接读写关联存储相关问题)
- 如何确定拿到的文件和请求是相关
- Originx 通过与请求过程中的系统调用关联,按照时间能精准匹配到请求时的系统调用
4.请求下游节点耗时长(网络调用)
5.锁等待或内存 GC 类型(futex 等)
- 如何确定拿到的这个锁和这个请求有关
- Originx 通过与请求过程中的系统调用关联,按照时间能精准匹配到请求时的系统调用
Originx 不擅长的故障种类:
1.对 CPU 算力分层类、夯机类、硬件类等问题的分析 Kindling-OriginX 诊断相对比较薄弱;
2.对Java 类服务的支持友好,接入 Kindling-OriginX 需要适配公司的 “全链路追踪系统”。
Originx 存在优化空间
快手使用的 Originx 版本在确定故障报告时存在多种可能性,需要人为排除噪音干扰因素。
1.由于一个采样报告只能得出一种结论,故障发生所在的时间段内若干采样点产生的多个报告,可能结论不一致,需要自己来判断具体是哪方面原 因占主导,排除干扰因素; 有时会出现----未发现明显异常的结论,如
2.故障分为慢故障和故障两大类。对于慢故障,请求调用时长与历史数据相对比,发现其大于 24h 内历史 P90(或 p99,p95) 数据,将其判定为慢故障。假设极端情 况,存在故障的实例的请求时延在 24h 内一直都很高,那么后续的请求也会被判断为正常请求,产生漏判。
3.下钻诊断能力不足,当前除了对网络故障具备更细粒度的诊断(需接入 DeepFlow,在根因报告中对于对外调用网络耗时长的问题,根 因推导能够回答网络耗时分布的根因,例如是客户端网络问题还是服务端网络问题,是 RTT 问题还是丢包重传问题),其他类型问题 有待关联更多数据提供更多的下转能力。
原理
请求故障评估标准
业务请求时延指标大于 P90(或者 P95,P99 阈值),就会判定为慢请求故障。
线程状态分析方法(TSA)
有别于从资源视角的 USE 方法是从整理上找破绽来缩小异常的范围,给出可能性的方向,TSA 是从主体(线程)角度出发进一步明确线程时间消耗在哪里的方式。