基于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 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
|
2月前
|
前端开发 JavaScript 测试技术
Kotlin教程笔记 - 适合构建中大型项目的架构模式全面对比
Kotlin教程笔记 - 适合构建中大型项目的架构模式全面对比
35 3
|
20天前
|
监控 安全 API
使用PaliGemma2构建多模态目标检测系统:从架构设计到性能优化的技术实践指南
本文详细介绍了PaliGemma2模型的微调流程及其在目标检测任务中的应用。PaliGemma2通过整合SigLIP-So400m视觉编码器与Gemma 2系列语言模型,实现了多模态数据的高效处理。文章涵盖了开发环境构建、数据集预处理、模型初始化与配置、数据加载系统实现、模型微调、推理与评估系统以及性能分析与优化策略等内容。特别强调了计算资源优化、训练过程监控和自动化优化流程的重要性,为机器学习工程师和研究人员提供了系统化的技术方案。
140 77
使用PaliGemma2构建多模态目标检测系统:从架构设计到性能优化的技术实践指南
|
10天前
|
人工智能 自然语言处理
RWKV-7:RWKV系列开源最新的大模型架构,具有强大的上下文学习能力,超越传统的Attention范式
RWKV-7是RWKV系列的最新大模型架构版本,具有强大的上下文学习能力,超越了传统的attention和linear attention范式。本文详细介绍了RWKV-7的主要功能、技术原理及其在多语言处理、文本生成等领域的应用场景。
77 7
RWKV-7:RWKV系列开源最新的大模型架构,具有强大的上下文学习能力,超越传统的Attention范式
|
2月前
|
监控 前端开发 数据可视化
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
@icraft/player-react 是 iCraft Editor 推出的 React 组件库,旨在简化3D数字孪生场景的前端集成。它支持零配置快速接入、自定义插件、丰富的事件和方法、动画控制及实时数据接入,帮助开发者轻松实现3D场景与React项目的无缝融合。
150 8
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
|
26天前
|
运维 Cloud Native 持续交付
云原生技术深度探索:重塑现代IT架构的无形之力####
本文深入剖析了云原生技术的核心概念、关键技术组件及其对现代IT架构变革的深远影响。通过实例解析,揭示云原生如何促进企业实现敏捷开发、弹性伸缩与成本优化,为数字化转型提供强有力的技术支撑。不同于传统综述,本摘要直接聚焦于云原生技术的价值本质,旨在为读者构建一个宏观且具体的技术蓝图。 ####
|
2月前
|
Cloud Native 持续交付 云计算
云原生技术在现代IT架构中的转型力量####
本文深入剖析了云原生技术的精髓,探讨其在现代IT架构转型中的关键作用与实践路径。通过具体案例分析,展示了云原生如何赋能企业实现更高效的资源利用、更快的迭代速度以及更强的系统稳定性,为读者提供了一套可借鉴的实施框架与策略。 ####
25 0
|
2月前
|
运维 Kubernetes Docker
深入理解容器化技术及其在微服务架构中的应用
深入理解容器化技术及其在微服务架构中的应用
63 1
|
2月前
|
监控 Java 微服务
从零构建微服务架构:一次深度技术探索之旅####
本文作为一篇深度技术分享,引领读者踏上自底向上搭建微服务架构的征途,旨在通过实战经验剖析,揭示微服务转型背后的技术挑战与解决方案。不同于常规摘要仅概述内容,本文摘要将直接以故事化手法,简述作者从单体应用困境出发,逐步迈向微服务化的心路历程,涵盖关键决策点、技术选型考量及实践收获,激发读者对微服务架构设计与实现的浓厚兴趣。 ####
|
2月前
|
Cloud Native 持续交付 云计算
深入理解云原生技术及其在现代IT架构中的应用
在数字化浪潮的推动下,云原生技术已成为企业转型的关键。本文将通过浅显易懂的语言和生动的比喻,带领读者探索云原生的核心概念、优势以及如何在企业中实现云原生架构。我们将一起揭开云原生的神秘面纱,了解它如何助力企业快速适应市场变化,提升业务的灵活性和创新能力。

热门文章

最新文章