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

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

Kindling探针的架构设计理念

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

1.png

kindling领域分层图

另外一个重要的理念是:不重复造轮子我们目标是把eBPF的能力以简单的方式透出给用户使用所以kindling的设计是以falcosecurity-libs为基础的目前这个开源项目承担的主要职责就是系统调用的事件透出对于可观测方面的能力需要进一步扩展但是它有一个优势是它会将原始内核数据和cgroup信息进行关联方便后续将数据关联到k8s相关的resources, 同时falcosecurity-libs也对原始数据做了预处理比如将网络数据进行更丰富的关联让用户能够直接拿到某个对fd操作的网络事件属于哪个四元组的信息所以我们复用了这部分能力。但falcosecurity-libs本身并不支持kprobe、uprobe等能力kindling目前已经对其扩展kprobe能力,后续也会持续不断的扩展uprobe等能力同时还会集成其他开源工具的数据能力

一般来说eBPF探针主要由两部分程序组成内核态程序用作采集数据以及用户态程序用作分析数据。但基于以上两个理念,我们的架构并不是传统的两部分我们基于关注点分离理念为了让cloud-native领域的开发者能够更方便的使用eBPF的能力把原来falcosecurity-libsC/C++用户态程序拆分成了一个Go程序和一个C/C++程序让用户能更关注自己擅长的领域 

2.png

传统ebpf程序结构

Kindling探针架构介绍

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

3.png

kingdling架构图

内核态程序drivers

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

用户态C/C++程序:kindling-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 collector 、prometheus 、kindling标准版后端等多种可观测性平台目前kindling-collector订阅的事件只是probe暴露出来的部分事件主要是以系统调用以及kprobe为主具体订阅信息如下

5.png

程序间通信方式

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

eBPF程序采用BPF MAP 数据结构通信内核模块采用mmap构造的ringbuffer进行通信是eBPF程序使用的架构模型为了兼容4.X内核BPFMAP结构使用的是BPF_MAP_TYPE_PERF_EVENT_ARRAY每个cpu都有相应的一个perf-event的map在kindling-probe层会对事件进行排序组合

4.png

ebpf probe和probe通信

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

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

Kindling通信标准化事件格式

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

6.png


对Kindling感兴趣或者在云可观测性方面有问题的小伙伴欢迎与我们联系:Kindling官网

目录
相关文章
|
26天前
|
运维 Kubernetes Cloud Native
云原生技术:容器化与微服务架构的完美结合
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其灵活性和高效性成为企业的新宠。本文将深入探讨云原生的核心概念,包括容器化技术和微服务架构,以及它们如何共同推动现代应用的发展。我们将通过实际代码示例,展示如何在Kubernetes集群上部署一个简单的微服务,揭示云原生技术的强大能力和未来潜力。
|
24天前
|
存储 分布式计算 关系型数据库
架构/技术框架调研
本文介绍了微服务间事务处理、调用、大数据处理、分库分表、大文本存储及数据缓存的最优解决方案。重点讨论了Seata、Dubbo、Hadoop生态系统、MyCat、ShardingSphere、对象存储服务和Redis等技术,提供了详细的原理、应用场景和优缺点分析。
|
17天前
|
监控 前端开发 数据可视化
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
@icraft/player-react 是 iCraft Editor 推出的 React 组件库,旨在简化3D数字孪生场景的前端集成。它支持零配置快速接入、自定义插件、丰富的事件和方法、动画控制及实时数据接入,帮助开发者轻松实现3D场景与React项目的无缝融合。
64 8
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
|
6天前
|
运维 Cloud Native 持续交付
云原生技术深度探索:重塑现代IT架构的无形之力####
本文深入剖析了云原生技术的核心概念、关键技术组件及其对现代IT架构变革的深远影响。通过实例解析,揭示云原生如何促进企业实现敏捷开发、弹性伸缩与成本优化,为数字化转型提供强有力的技术支撑。不同于传统综述,本摘要直接聚焦于云原生技术的价值本质,旨在为读者构建一个宏观且具体的技术蓝图。 ####
|
26天前
|
监控 API 微服务
后端技术演进:从单体架构到微服务的转变
随着互联网应用的快速增长和用户需求的不断演化,传统单体架构已难以满足现代软件开发的需求。本文深入探讨了后端技术在面对复杂系统挑战时的演进路径,重点分析了从单体架构向微服务架构转变的过程、原因及优势。通过对比分析,揭示了微服务架构如何提高系统的可扩展性、灵活性和维护效率,同时指出了实施微服务时面临的挑战和最佳实践。
47 7
|
24天前
|
传感器 算法 物联网
智能停车解决方案之停车场室内导航系统(二):核心技术与系统架构构建
随着城市化进程的加速,停车难问题日益凸显。本文深入剖析智能停车系统的关键技术,包括停车场电子地图编辑绘制、物联网与传感器技术、大数据与云计算的应用、定位技术及车辆导航路径规划,为读者提供全面的技术解决方案。系统架构分为应用层、业务层、数据层和运行环境,涵盖停车场室内导航、车位占用检测、动态更新、精准导航和路径规划等方面。
86 4
|
25天前
|
Kubernetes Cloud Native 持续交付
云原生技术在现代应用架构中的实践与思考
【10月更文挑战第38天】随着云计算的不断成熟和演进,云原生(Cloud-Native)已成为推动企业数字化转型的重要力量。本文从云原生的基本概念出发,深入探讨了其在现代应用架构中的实际应用,并结合代码示例,展示了云原生技术如何优化资源管理、提升系统弹性和加速开发流程。通过分析云原生的优势与面临的挑战,本文旨在为读者提供一份云原生转型的指南和启示。
37 3
|
27天前
|
网络协议 数据挖掘 5G
适用于金融和交易应用的低延迟网络:技术、架构与应用
适用于金融和交易应用的低延迟网络:技术、架构与应用
53 5
|
25天前
|
运维 Kubernetes Cloud Native
云原生技术在现代应用架构中的实践与挑战####
本文深入探讨了云原生技术的核心概念、关键技术组件及其在实际项目中的应用案例,分析了企业在向云原生转型过程中面临的主要挑战及应对策略。不同于传统摘要的概述性质,本摘要强调通过具体实例揭示云原生技术如何促进应用的灵活性、可扩展性和高效运维,同时指出实践中需注意的技术债务、安全合规等问题,为读者提供一幅云原生技术实践的全景视图。 ####
|
29天前
|
Kubernetes Cloud Native 云计算
云原生技术深度解析:重塑企业IT架构的未来####
本文深入探讨了云原生技术的核心理念、关键技术组件及其对企业IT架构转型的深远影响。通过剖析Kubernetes、微服务、容器化等核心技术,本文揭示了云原生如何提升应用的灵活性、可扩展性和可维护性,助力企业在数字化转型中保持领先地位。 ####