大家在使用可观测性产品当中,海量的数据一定会给排障带来障碍。稍微有点排障经验的技术人员都希望排障过程中能够追寻trace,并能沿着这个trace将各种可观测性的数据关联到这个trace上,这样最终就可以将问题根因找到。在eBPF技术出现之前,大家最常用的trace就是dapper论文中提到分布式追踪技术,但是在实际落地过程中会经常碰到以下痛点:
第一个痛点:探针自动化覆盖依赖人工:
APM探针安装需要人工安装,应用重启才能生效,所以很难做到自动化覆盖所有业务。导致云原生环境里某些节点并未安装APM探针或者人工插桩,所以无法顺着trace深入排查遇到阻碍。
第二个痛点:探针难以覆盖多语言的微服务业务:
微服务的设计哲学中强调,每个小团队可以使用擅长的语言并针对需求做出自认最佳的开发,这就意味着开发语言是多样的。trace也会由于多语言的难以统一追踪而断掉。
第三个痛点:APM trace缺少内核可观测数据:
DNS的性能导致业务抖动、Kmem 相关bug导致业务pod oom重启、业务pod出现请求另外一个pod请求不通、业务迭代产生网络消耗大引起业务性能下降问题、共享存储导致业务请求性能发生抖动、 kube-dns 配置出现异常导致业务异常等等问题都很难通过单一的APM trace数据进行排障。
另外一个常见的问题就是某段代码突然慢了,这段代码之前都是运行好的,单凭APM trace中采集的数据难以回答为什么突然慢了。这个时候多半需要人为介入,再从应用日志、系统日志找到内核可观测性数据去排查问题,比如找到当时srtt数据是否正常,某次文件读写时间和传输数据量、操作系统进程调度是否正常。
Metric数据全景图定义:
当前业界的主要解决思路:
有些公司推出了OneAgent概念,本质上利用脚本做自动化检测,自动化安装脚本,从而保证节点能够做到探针全覆盖。但是此种方式仍然需要人工干预决定业务何时才能重启,探针采集数据才能生效。
Kindling的解决思路:
Kindling利用eBPF技术或者内核模块技术构建的探针,以DeamonSet工作在Node所在的Linux操作系统上,即可覆盖所有环境,不会出现没有探针覆盖的情况。另外非常重要的一点是应用无需重启,探针即可采集内核层的数据,对业务无干扰。为了能够支持当前国内主流的CentOS7系列(eBPF运行在该类型操作系统默认内核上有技术局限性),Kindling通过构建内核模块的技术获取了同样数据,保证用户在高版本内核上与低版本内核获得同样的体验。
当前业界的主要解决思路:
针对不同语言推出不同的APM agent,但是有些语言如Go和C语言很难做到自动化插裝,只能提供SDK包以便人工插裝。另外每个语言特性不一致,导致不同语言探针采集的数据集很难一致,对后端的整合分析带来更大的压力,用户体验也不一致。会出现某种语言有某些指标,而另外语言可能就缺失了这部分的指标。
Kindling的解决思路:
eBPF代码或者内核模块代码工作在内核层与语言无关,所以程序无需做任何插裝或改动,也不用重启即可被观测,所有程序采集指标完全一致,用户理解不会有偏差。
当前业界的主要解决思路:
当前比较常见的做法是将prometheus的数据和APM trace进行关联,这种方案能解决应用层导致的问题,但是针对云原生环境很多问题如DNS的性能导致业务抖动,共享存储导致业务请求性能发生抖动,代码突然执行慢了等问题排障帮助有限。
针对3与4类型的metric数据,当前主流做法是利用BCC、BFTRACE、Ftrace、Systamp等与内核交互的工具采集数据并输出至console中展示,当前并未有能提供7x24小时运行的可观测方案。主要原因是3与4类型中很多种类数据的数据量是非常大的,而7x24小时运行过程中,绝大多数情况是数据是正常的,保存这些大量正常的数据是浪费存储资源。
Kindling的解决思路:
Kindling构建全局拓扑图和排障trace来排查问题,排障trace有别与APM trace,eBPF排障trace只是APM trace中的一个如A->B调用环节。Kindling重点做的事情就是将3与4类型的数据关联至排障trace当中,通过判断排障trace是否异常,决定该trace的存储,从而实现存储友好的7x24小时运行云原生可观测性工具。
kindling未来希望在有全局拓扑图和排障trace的概念之上,不断丰富第3与第4类型的数据,能够帮助用户排障云原生上所有故障。
在丰富指标方面,主要遵循以下两个思路:
以下的思维导图是Kindling近一年想做的事情。其中云原生故障场景和业务场景,欢迎各位用户持续不断贡献。
主要时间节点如下:
这里在多花点时间介绍下我们认为对用户非常有帮助的OnCPU和OffCPU指标功能:
程序OnCPU火焰图是解决线上CPU消耗较高时的排障利器,OffCPU火焰图是解决程序等待资源较长的排障利器。OnCPU的火焰图已经有很多开源项目正在演进了,Kindling无意重复造轮子或者集成某一个OnCPU火焰图工具。Kindling正在做的是借鉴了OnCPU和OffCPU火焰图的思路,利用eBPF技术分析排障trace异常时间段内,不同线程的表现,最终能够帮助用户分析异常发生时间段,哪些线程可能是问题元凶、再进一步分析哪些函数或者资源导致了异常,并且要能够实现7X24小时常并存储友好。
在云可观测性方面有任何疑问欢迎与我们联系: Kindling官网