基于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官网

目录
相关文章
|
2天前
|
安全 NoSQL MongoDB
XJ-Survey:这个让滴滴日均处理1.2亿次问卷请求的开源系统,今天终于公开了它的架构密码!
嗨,大家好,我是小华同学。今天为大家介绍一款由滴滴开源的高效调研系统——XJ-Survey。它功能强大,支持多类型数据采集、智能逻辑编排、精细权限管理和数据在线分析,适用于问卷、考试、测评等场景。采用 Vue3、NestJS 等先进技术栈,确保高性能与安全性。无论是企业还是个人,XJ-Survey 都是你不可错过的神器!项目地址:[https://github.com/didi/xiaoju-survey](https://github.com/didi/xiaoju-survey)
37 15
|
8天前
|
存储 关系型数据库 分布式数据库
PolarDB 开源基础教程系列 1 架构解读
PolarDB 是阿里云研发的云原生分布式数据库,基于 PostgreSQL 开源版本,旨在解决传统数据库在大规模数据和高并发场景下的性能和扩展性问题。其主要特点包括: 1. **存储计算分离架构**:通过将计算与存储分离,实现极致弹性、共享一份数据以降低成本、透明读写分离。 2. **HTAP 架构**:支持混合事务处理和分析处理(HTAP),能够在同一系统中高效执行 OLTP 和 OLAP 查询。 3. **优化的日志复制机制**:采用只复制元数据的方式减少网络传输量,优化页面回放和 DDL 锁回放过程。 4. **并行查询与索引创建**:引入 MPP 分布式执行引擎。
35 7
|
9天前
|
机器学习/深度学习 算法 文件存储
RT-DETR改进策略【模型轻量化】| MoblieNetV3:基于搜索技术和新颖架构设计的轻量型网络模型
RT-DETR改进策略【模型轻量化】| MoblieNetV3:基于搜索技术和新颖架构设计的轻量型网络模型
20 4
RT-DETR改进策略【模型轻量化】| MoblieNetV3:基于搜索技术和新颖架构设计的轻量型网络模型
|
13天前
|
人工智能 JavaScript 安全
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
55 13
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
|
13天前
|
机器学习/深度学习 算法 文件存储
YOLOv11改进策略【模型轻量化】| MoblieNetV3:基于搜索技术和新颖架构设计的轻量型网络模型
YOLOv11改进策略【模型轻量化】| MoblieNetV3:基于搜索技术和新颖架构设计的轻量型网络模型
46 10
YOLOv11改进策略【模型轻量化】| MoblieNetV3:基于搜索技术和新颖架构设计的轻量型网络模型
|
16天前
|
机器学习/深度学习 缓存 自然语言处理
DeepSeek背后的技术基石:DeepSeekMoE基于专家混合系统的大规模语言模型架构
DeepSeekMoE是一种创新的大规模语言模型架构,融合了专家混合系统(MoE)、多头潜在注意力机制(MLA)和RMSNorm归一化。通过专家共享、动态路由和潜在变量缓存技术,DeepSeekMoE在保持性能的同时,将计算开销降低了40%,显著提升了训练和推理效率。该模型在语言建模、机器翻译和长文本处理等任务中表现出色,具备广泛的应用前景,特别是在计算资源受限的场景下。
333 29
DeepSeek背后的技术基石:DeepSeekMoE基于专家混合系统的大规模语言模型架构
|
20天前
|
机器学习/深度学习 安全 算法
十大主流联邦学习框架:技术特性、架构分析与对比研究
联邦学习(FL)是保障数据隐私的分布式模型训练关键技术。业界开发了多种开源和商业框架,如TensorFlow Federated、PySyft、NVFlare、FATE、Flower等,支持模型训练、数据安全、通信协议等功能。这些框架在灵活性、易用性、安全性和扩展性方面各有特色,适用于不同应用场景。选择合适的框架需综合考虑开源与商业、数据分区支持、安全性、易用性和技术生态集成等因素。联邦学习已在医疗、金融等领域广泛应用,选择适配具体需求的框架对实现最优模型性能至关重要。
279 79
十大主流联邦学习框架:技术特性、架构分析与对比研究
|
25天前
|
存储 缓存 关系型数据库
社交软件红包技术解密(六):微信红包系统的存储层架构演进实践
微信红包本质是小额资金在用户帐户流转,有发、抢、拆三大步骤。在这个过程中对事务有高要求,所以订单最终要基于传统的RDBMS,这方面是它的强项,最终订单的存储使用互联网行业最通用的MySQL数据库。支持事务、成熟稳定,我们的团队在MySQL上有长期技术积累。但是传统数据库的扩展性有局限,需要通过架构解决。
65 18
|
1月前
|
开发框架 前端开发 .NET
一个适用于 .NET 的开源整洁架构项目模板
一个适用于 .NET 的开源整洁架构项目模板
57 26
|
1月前
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。

热门文章

最新文章