Kindling项目目标:利用eBPF技术带来的可观测性的上帝视角 ——关联内核可观测数据的trace

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
云拨测,每月3000次拨测额度
简介: 当前可观测性领域存在三大痛点:1. 探针自动化覆盖依赖人工;2. 探针难以覆盖多语言的微服务业务;3. APM trace缺少内核可观测数据。针对三大痛点,Kindling分别是如何解决的呢?

当前可观测性工具在云原生环境缺失了什么?

大家在使用可观测性产品当中,海量的数据一定会给排障带来障碍。稍微有点排障经验的技术人员都希望排障过程中能够追寻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数据全景图定义:


  1. 1类型的Metric数据是Linux /proc下数据,Promethues和Zabbix等主流监控数据就来自于/proc 下的统计数据,APM探针也会有部分统计数据如TPS、平均时延、错误率等。
  2. 2类型的数据当前是APM产品主要采集的数据,该类型数据大量通过APM trace进行展示,并不是以常规指标形式展示,少部分数据以常规指标形式展示。
  3. 3类型的数据,当前该类型数据采集工具缺失,如BCC等工具是作为小工具临时使用,业界并未有监控工具将该部分数据作为可观测性数据7X24小时运行保存展示。
  4. 4类型的数据,当前主要还是专家型技术人员通过BCC、Bftrace、Ftrace等工具去获取内核函数执行情况。



Kindling基于eBPF技术构建的上帝视角带来了解决方案——关联内核可观测数据的trace


针对痛点一:当前解决方案 VS Kindling解决方案


当前业界的主要解决思路:


有些公司推出了OneAgent概念,本质上利用脚本做自动化检测,自动化安装脚本,从而保证节点能够做到探针全覆盖。但是此种方式仍然需要人工干预决定业务何时才能重启,探针采集数据才能生效。


Kindling的解决思路:

Kindling利用eBPF技术或者内核模块技术构建的探针,以DeamonSet工作在Node所在的Linux操作系统上,即可覆盖所有环境,不会出现没有探针覆盖的情况。另外非常重要的一点是应用无需重启,探针即可采集内核层的数据,对业务无干扰。为了能够支持当前国内主流的CentOS7系列(eBPF运行在该类型操作系统默认内核上有技术局限性),Kindling通过构建内核模块的技术获取了同样数据,保证用户在高版本内核上与低版本内核获得同样的体验。


针对痛点二:当前解决方案 VS Kindling解决方案


当前业界的主要解决思路:

针对不同语言推出不同的APM agent,但是有些语言如Go和C语言很难做到自动化插裝,只能提供SDK包以便人工插裝。另外每个语言特性不一致,导致不同语言探针采集的数据集很难一致,对后端的整合分析带来更大的压力,用户体验也不一致。会出现某种语言有某些指标,而另外语言可能就缺失了这部分的指标。


Kindling的解决思路:

eBPF代码或者内核模块代码工作在内核层与语言无关,所以程序无需做任何插裝或改动,也不用重启即可被观测,所有程序采集指标完全一致,用户理解不会有偏差。


针对痛点三:当前解决方案 VS Kindling解决方案


当前业界的主要解决思路:

当前比较常见的做法是将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使用和BCC、Bftrace同样的原理从而得到应用运行环境中3类型与4类型数据,为了能够支持当前国内主流的CentOS7系列(eBPF运行在该类型操作系统默认内核上有技术局限性),Kindling通过构建内核模块的技术获取了同样数据,保证用户在高版本内核上与低版本内核获得同样的体验。


  • Kindling 通过分析在同一个socket fd上的read系统调用和wrtie系统调用即可得到应用在处理该socket上请求耗时,并将该次请求与返回封装成排障trace。通过耗时、返回码等业务层语义能够确定每次eBPF排障trace是否异常。在一个socket fd上的read系统调用总时间,可以得到一个请求上的网络request时间,分析一个socket fd上的write系统调用总时间,可以得到一个请求上的网络response时间。将一个socket fd上的最后一个read和第一个write时间差即是程序处理的总时间。将同一个socket fd上三者时间关联在一起看,即可看到请求的耗时的完整分布,得到类似chrome里面下图




  • Kindling 获取到的3类型数据与4类型数据通过各种关联手段关联至排障trace,在确定排障trace异常之时能存储该排障trace,同时也存储了3类型数据与4类型数据。该种方式确保了Kindling是可以运行在云原生环境的7X24小时存储友好的可观测性工具。

Kindling未来的发展思路与Roadmap


kindling未来希望在有全局拓扑图和排障trace的概念之上,不断丰富第3与第4类型的数据,能够帮助用户排障云原生上所有故障。

在丰富指标方面,主要遵循以下两个思路:

  • 希望社区用户能够贡献更多的故障场景至太空舱项目https://github.com/Kindling-project/space-capsule,该项目致力于收集云原生上不同种类的故障,并通过混沌工程进行在一个demo中模拟各种种类故障。在探针端,针对每种故障,分析内核源代码,明确内核层面关键指标,给出排障方向。根据当前的场景,已经在Kindling 演进思维导图中“探针指标能力增强”中列出来了一些的指标。


  • 将会不断借鉴其它排障工具的原理、提炼eBPF技术能够获取到的3类型与4类型数据,并找到使用3类型与4类型数据的故障场景,也欢迎社区用户一起贡献工具、场景和思路。

以下的思维导图是Kindling近一年想做的事情。其中云原生故障场景和业务场景,欢迎各位用户持续不断贡献。

Kindling 演进思维导图

主要时间节点如下:

这里在多花点时间介绍下我们认为对用户非常有帮助的OnCPU和OffCPU指标功能:

程序OnCPU火焰图是解决线上CPU消耗较高时的排障利器,OffCPU火焰图是解决程序等待资源较长的排障利器。OnCPU的火焰图已经有很多开源项目正在演进了,Kindling无意重复造轮子或者集成某一个OnCPU火焰图工具。Kindling正在做的是借鉴了OnCPU和OffCPU火焰图的思路,利用eBPF技术分析排障trace异常时间段内,不同线程的表现,最终能够帮助用户分析异常发生时间段,哪些线程可能是问题元凶、再进一步分析哪些函数或者资源导致了异常,并且要能够实现7X24小时常并存储友好。





在云可观测性方面有任何疑问欢迎与我们联系:Kindling

             


           


目录
相关文章
|
4月前
|
运维 监控 Cloud Native
|
9月前
|
编解码 IDE 算法
2023年电赛---运动目标控制与自动追踪系统(E题)发挥题思路
2023年电赛---运动目标控制与自动追踪系统(E题)发挥题思路
283 0
|
存储 数据采集 人工智能
以Trace为核心的根因分析概述
近期一直在学习和复现“根因分析”领域的相关文章,在这里跟大家一起分享下相关内容。这里不在赘述关于“可观测性”和“AIOps”的重要性和必要性,也不过多的陈述在“复杂系统”中进行快速根因诊断的必要性,直接进入到相关算法和系统设计部分。
1284 0
以Trace为核心的根因分析概述
|
1月前
|
人工智能 搜索推荐 测试技术
让智能体像孩子一样观察别人学习动作,跨视角技能学习数据集EgoExoLearn来了
【4月更文挑战第11天】EgoExoLearn是一个大规模数据集,用于模拟人类通过观察视频学习任务的能力,包含120小时的日常生活和实验室场景视频,重点是第一人称视角和注视数据。该数据集提供多模态注释,设有跨视角动作理解等基准测试,旨在推动AI模仿人类行为的研究。尽管有挑战,如视角转换和多样性问题,但EgoExoLearn为AI学习和融入人类环境开辟了新途径。
23 1
让智能体像孩子一样观察别人学习动作,跨视角技能学习数据集EgoExoLearn来了
|
运维 监控 数据可视化
可观测性和传统监控的三大区别
可观测性和传统监控的三大区别
398 0
|
数据采集 存储 供应链
谈谈如何以正确的指标驱动有效的进行数据质量控制
数据质量管理是旨在维持高质量数据的一系列实践,包括从获取数据和实施高级数据流程一直到有效地分发数据的所有过程。
谈谈如何以正确的指标驱动有效的进行数据质量控制
产品设计-服务拓扑关系-apm-基础设施-paas-产品设计-调用关系-性能
产品设计-服务拓扑关系-apm-基础设施-paas-产品设计-调用关系-性能
72 0
产品设计-服务拓扑关系-apm-基础设施-paas-产品设计-调用关系-性能
|
数据采集 人工智能 运维
2022,我们该如何理解可观测技术
本文受访嘉宾:蒋志伟,爱好技术的架构师,先后就职于阿里、Qunar、美团,前 pmcaff CTO,目前 OpenTelemetry 中国社区发起人,https://github.com/open-telemetry/docs-cn 主要维护者。
308 0
2022,我们该如何理解可观测技术
|
存储 缓存 运维
调用链追踪系统在伴鱼:OpenTelemetry 最佳实践案例分享
在 理论篇 中,我们介绍了伴鱼在调用链追踪领域的调研工作,本篇继续介绍伴鱼的调用链追踪实践。在正式介绍前,简单交代一下背景:2015 年,在伴鱼服务端起步之时,技术团队就做出统一使用 Go 语言的决定。
637 0
调用链追踪系统在伴鱼:OpenTelemetry 最佳实践案例分享
|
Prometheus 监控 Cloud Native
3W字干货深入分析基于Micrometer和Prometheus实现度量和监控的方案(下)
最近线上的项目使用了spring-actuator做度量统计收集,使用Prometheus进行数据收集,Grafana进行数据展示,用于监控生成环境机器的性能指标和业务数据指标。一般,我们叫这样的操作为"埋点"。SpringBoot中的依赖spring-actuator中集成的度量统计API使用的框架是Micrometer,官网是micrometer.io。在实践中发现了业务开发者滥用了Micrometer的度量类型Counter,导致无论什么情况下都只使用计数统计的功能。这篇文章就是基于Micrometer分析其他的度量类型API的作用和适用场景。
554 0
3W字干货深入分析基于Micrometer和Prometheus实现度量和监控的方案(下)