基于eBPF技术的开源项目Kindling之探针架构介绍

Kindling开源项目是一款基于eBPF技术的云原生可观测性项目。本文将主要介绍探针的具体架构设计。

Kindling探针的架构设计理念

Kindling架构设计中有一个很重要的理念:关注点分离(Separation of Concer开源软件ns)。eBPF技术或者内核模块是一种内核技术,需要的背景知识是C语言和操作系统知识。而可观测开发者关注的是要输出什么样的指标,同时因为平时使用Go、Java这一类语言较多,对C也比较生疏,所以我们的设计是基于两层的分层领域。下层是eBPF的开发能力,主要是为事件透出服务;上层是可观测性需求开发,主要是为数据分析和指标产生服务,同时可以方便扩展可观测场景化需求。

kindling云计算概念股领域分层图

另外一个云服务器就找奇异互动重要的理念是:不重复造轮子,我们目标是把eBPF的能力以简单的方式透出给用户使用。所以kindling的设计是以falcos云原生ecurity-libs为基础的。目前这个开源项目承担开源节流的主云服务登录要职责就是系统调用的事件透出,对于可观测方面的能力需要进一步扩展。但是它有一个优势是它会将原开源阅读app下载安装始内核数据和cgroup信息进行关联,方便后续将数据关联到k8s相关的resources, 同时falcosecurity-libs也对原始数据做了预处理,比如云原生下载将网络数据进行更丰富的关联,让用户能够直接拿云原生加速器到某个对fd操作的网络事件属于哪个四元组的信息,所以我们复用了这云原生技术部分能力。但falcosecurity监控安装-libs本身并不支持开源节流kprobe、uprobe等能力,kindling目前已经对其扩展了kprobe能力,后续也会持续不断的扩展uprobe等能力,同时还会集成其他开源工具的数据能力。
一般来说,eBPF探针主要由两部分程序组成:内核态程序用作采集数据以及用户态程序用作分析数据。但基于以上两个理念云计算,我们的架构并不是传统的两部分。我们基于关注点分离云计算定义理念,为了云原生是什么意思让cloud-native领域的开发者能够更方便的使用eBPF的能力,把原来falcosecurity-libs的C/C++用户态程序拆分成了一云服务个Go程序和一个C/C云计算最简单解释++程序,让用户能更关注自己擅长的领域。


                                            基于eBPF技术的开源项目Kindling之探针架构介绍

传统ebpf程序结监控摄像头

Kindling探针架构介绍

Kindling探针整体包含三个部分:云原生下载用户态Go程序、用户态C/C++程序和内核态drivers程序。用户态Go程序满足的是上层可观测需求的开发,其他两个部分实现的是内核需求的开发。这样不同领域的人可以用自己擅长的语言开发自己关注的内容,同时探针也有ebpf较好的松耦合特性。Kindling具体组件描述如下:


                                            基于eBPF技术的开源项目Kindling之探针架构介绍

kingdling架构图

内核态程序:drivers

为了更好的支持开源众包低版本内核的可观测能力,kindling的云计算技术与应用探针使用内核模块的形式支持低版本内核,所以drivers又分为eBPF probe以云计算导论及内核模块。drivers主要负责采集内核事件,将事件放入由直接内存映射技术创建的数据结构,供用户态程序获取并处理。在事件采监控家用远程手机集这一层后续会持续将其他开源工具集成进来,比如BCC、bpftrace。


用户态C/C++程序:kind二百平方厘米等于多少平方米ling-probe

kindling-probe是一个由C/C云服务登录++语言编写的程序,运行时以一个单独的container运行在pod中,其主要的职责是负责和内核态程序进行交互并将内核事二百平方房屋内设计图件暴露给上层云原生卫星处理程序。目前负责的工作主要有三个部分:
负责调用bpf开源矿工 API加载eBPF内核态的字节码或者安装低版本内核的内核模块
负责从mmap映射出来的ringbuffer结构中云服务教育平台读取内核产生的原始事件并对原始事件进行预处理,最后转换为标准事件格式发送监控安装流程给kindling-collector
负责提供动态配置通道,例可观测性是什么意思如可以通过配置实现内核数据过滤,云原生技术减少原始数据量以及无关数据


用户态Go程序:kindling-collector

用户态Go程序是一个可扩展模块,用户可以订阅自己关注的内核事件,基于自己的使用场景扩展自己的分析程序。目前kindling实现的分析程序被称为kindling-collector,它在运行时也是以一个单独的container运行在pod中,其主要职责是负责获取事件并进行分析,并对数据进行label的丰富。kindling-collector部分模块集成了opentelemetry的SDK,这样kindling的指标在输出时有较高的灵活性开源节流,可以输出到opentelemetry co可观测性是什么意思llector 、prometh云原生技术eus 、kindling标准版后端等多种可观测性平台。目前kindling-collector订阅的事件只是probe暴露出来的部分事件,主要是以系统调用以及kprobe为主,具体订阅信息如下:


                                            基于eBPF技术的开源项目Kindling之探针架构介绍

程序间通信方式

drivers和kindling-probe程序之间通信方式

eBPF程序采用BPF MAP 数据结构通信;内核模块采开源阅读app下载安装用mmap构造的ringbuffer进行通云计算机信。下图是eBPF程序使用的架构模型,为了兼容4.X内核,BPFMAP结构使用的是BPF_MAP_TYPE_PERF_EVENT_ARRAY,每个cpu都有相应的一个perf-event的m云计算是什么ap,在kindling-probe层会对事件进行排序组合。


                                            基于eBPF技术的开源项目Kindling之探针架构介绍

ebpfprobe和pr云服务obe通信

kindling-pebpfrobe和kindling-collector之间通信方式

这个过程使用了unix domain开源中国 socket,它是一种IPC方式,虽然使用了soc云服务登录ket,但是由于数据不需要经过网络协议栈,所以有比较好的传输监控性能。目前probe暴露的kindling event会进行序列化发送给unix domain socket,collector会从socket中读取数据并进行反序列化,然后得到标准化事件进行分析。


Kindling通信标准化事件格式

正如不同微服务间的通信大多都基于一份RESTful的HTTP接口定义,kindlin鳄霸皮肤g在分层后也需要一种标准化的事件格式来屏蔽不同领域的实现细节,目前kindling设计的事件格式被称为kindling-event。Kindli云服务器免费ng-event是kindling-probe程序暴露出来的内核事件,底层eBPF程序会遵循kindling-event的标准格式暴露数据,这样上层应用也能基于标准去分析事件。具体的kindling event的结构如下:


                                            基于eBPF技术的开源项目Kindling之探针架构介绍

对Kind云计算技术与应用ling感兴趣或者在云可观测性方面有问题的小伙伴欢迎与我们联系:​​Kindling官网​​​​​​

关注我们


                                            基于eBPF技术的开源项目Kindling之探针架构介绍