解密北极星指标体系如何实现根因分析
解密北极星指标体系如何实现根因分析
在之前的文章中提过我们的观点,AIOps 实践中常见的挑战:故障根因与可观测性数据的割裂 认为依赖算法给出根因建议缺乏可解释性,本篇文章重点介绍下我们的根因定位的思路, 按照这个思路去快速实现根因定位,我们认为是能够落地1-5-10的,如果对文章的思路有任何疑问,欢迎联系我们一起探讨。
为什么高效定位故障根因定位难
排障过程本质是我们拿着程序最后的执行结果去猜测验证程序执行异常的过程
当前人为定位故障主要依赖于指标告警,但是现在绝大多数指标反映的程序执行结果,并未对程序执行过程提供更多的信息。举例说明,CPU利用率是程序执行完代码之后的CPU的被使用的反映,内存利用率是程序已经使用内存的执行结果,所以排障过程本质是我们拿着程序最后的执行结果去探索程序执行异常的过程。
在探索程序执行异常的过程中,有哪些数据能反映程序 执行过程呢?能反映程序执行过程数据目前常规就是日志以及各种事件(将APM数据称之为程序执行的事件数据,比如执行的代码堆栈、慢方法等)。
由于可观测性盲区的存在导致猜测验证过程依赖专家经验
不管是日志、APM数据所反映出程序执行过程其实都存在很多盲区,关于程序执行盲区,可以参考团队在KubeCon,eBPF大会等会议上分享内容。也可以参考可观测性工具的盲区与故障排查困局 这篇文章,里面有更加详细讨论。
什么数据能够对故障定位起到决定性作用
基于以上的论述,我们认为要能够实现故障定位的关键数据要满足以下特点:
- 覆盖程序执行的盲区,不管程序任何操作都应该有数据能够和程序执行过程对应起来
- 数据分类要足够抽象,便于排障的人员能理解,这点很重要因为团队之前拿着程序依赖内核的行为数据去和用户沟通之时,绝大多数开发不能理解这些数据,就别提用这些数据进行排障
- 每个数据分类要足够隔离,不要相互影响
北极星指标体系是故障定位中的关键数据
北极星指标体系是基于TSA方法论得到的程序执行过程完整数据,关于TSA的方法论,有兴趣的朋友可以参考大神的博客,https://www.brendangregg.com/tsamethod.html 也可以参考这篇公众号的文章,TSA方法:基于线程时间分布分析性能瓶颈http://u6v.cn/5yDFVr
从这套方法论来看,采集的数据是覆盖了程序的完整执行过程,第一个要求满足了,那第二个要求就是我们将程序与内核交互的数据进行抽象而得到的。第三个就是因为我们是根据进程在操作系统上执行On与Off数据而来,所以数据是隔离没有影响的,这里也许有内核专家会疑惑比如由于网络包产生的软中断会消耗很多的CPU,所以CPU时间和网络时间不能隔离,但是我们是基于On与Off数据而来,由于网络包产生的软中断CPU消耗会被计算到ON的CPU时间之上,并能通过内核火焰图反应出最终的问题。
一次接口执行的北极星指标