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

目录
相关文章
|
4天前
|
运维 负载均衡 Cloud Native
云原生架构技术之云原生微服务
微服务模式将后端单体应用拆分为松耦合的多个子应用,每个子应用负责一组子功能。这些子应用称为“微服务”,多个“微服务”共同形成了一个物理独立但逻辑完整的分布式微服务体系。这些微服务相对独立,通过解耦研发、测试与部署流程,提高整体迭代效率。此外,微服务模式通过分布式架构将应用水平扩展和冗余部署,从根本上解决了单体应用在拓展性和稳定性上存在的先天架构缺陷。但也要注意到微服务模型也面临着分布式系统的典型挑战:如何高效调用远程方法、如何实现可靠的系统容量预估、如何建立负载均衡体系、如何面向松耦合系统进行集成测试、如何面向大规模复杂关联应用的部署与运维。
22 4
|
4天前
|
NoSQL 关系型数据库 MySQL
高可用数据库架构:互备(Multi-Master)技术详解
本文介绍了分布式系统中的互备(Multi-Master)机制,特别是在高可用数据库系统中的应用。互备机制超越了传统的主从复制,允许每个Master节点同时进行读写操作并互相同步数据,以提高可用性和负载均衡。文章探讨了主从复制与互备模式的区别,以及互备模式的数据同步和冲突解决策略。还以MySQL的双主复制和MongoDB的副本集为例,展示了MM模式在数据库高可用性中的实践。最后,强调了互备在未来分布式系统中的重要性。
20 7
|
4天前
|
资源调度 运维 Cloud Native
云原生架构技术之无服务器技术
当这些BaaS云服务日趋完善时,无服务器技术(Serverless)因为屏蔽了服务器的各种运维复杂度,让开发人员可以将更多精力用于业务逻辑设计与实现,而逐渐成为云原生主流技术之一。
18 5
|
4天前
|
Kubernetes 负载均衡 Cloud Native
云原生架构之容器技术
容器作为标准化软件单元,它将应用及其所有依赖项打包,使应用不再受环境限制,在不同计算环境间快速、可靠地运行。
26 9
|
5天前
|
Cloud Native 物联网 持续交付
未来科技浪潮:区块链、物联网与虚拟现实的融合创新云原生技术:重塑IT架构的未来
【5月更文挑战第31天】在信息技术飞速发展的今天,新兴技术如区块链、物联网和虚拟现实等正成为推动社会进步的重要力量。本文将探讨这些技术的发展趋势及其在各领域的应用前景,揭示它们如何相互融合,共同塑造一个智能化、互联的未来世界。 【5月更文挑战第31天】本文深入探讨了云原生技术的兴起及其对传统IT架构的颠覆性影响。通过分析云原生的核心概念,如微服务、容器化、以及持续集成/持续部署(CI/CD),文章揭示了这些技术如何促进更高效、灵活和可扩展的软件开发实践。同时,本文还讨论了企业在采用云原生技术时面临的挑战与机遇,并展望了云原生技术在未来IT领域的发展趋势。
|
5天前
|
运维 监控 Cloud Native
云原生技术:重塑企业IT架构的未来
【5月更文挑战第31天】随着云计算技术的不断发展,云原生技术已经成为了企业IT架构转型的重要驱动力。本文将深入探讨云原生技术的核心概念、优势以及在实际应用中的实践案例,帮助读者更好地理解云原生技术的价值和潜力。
|
7天前
|
项目管理 微服务
拥抱不确定性:技术实践中的敏捷思维构建高效微服务架构:后端开发的新趋势
【5月更文挑战第29天】 在快速变化的技术世界中,不确定性已成为常态。本文探讨了如何在技术实践中运用敏捷思维来应对不确定性,提出了一套实用的策略和心态调整方法。通过案例分析,展示了在项目开发、系统设计以及团队协作中如何有效地应用敏捷原则,以适应需求变动、技术演进和市场波动。文章强调了持续学习、灵活适应和以人为本的管理对于维持技术实践敏捷性的重要性,旨在为技术人员提供一种面对不断变化环境的心智工具箱。
|
8天前
|
监控 Devops API
构建高效微服务架构:API网关的作用与实践构建高效稳定的云基础设施:DevOps与容器化技术融合实践
【5月更文挑战第28天】 在当今的软件开发领域,微服务架构因其灵活性、可扩展性和容错能力而备受推崇。本文将深入探讨API网关在构建微服务系统中的关键角色,包括它如何促进系统的高可用性、安全性和性能监控。我们将剖析API网关的核心组件,并借助具体实例展示如何实现一个高效的API网关来服务于复杂的微服务环境。 【5月更文挑战第28天】 随着企业数字化转型的深入,传统的IT运维模式已难以满足快速迭代和持续交付的需求。本文聚焦于如何通过融合DevOps理念与容器化技术来构建一个高效、稳定且可扩展的云基础设施。我们将探讨持续集成/持续部署(CI/CD)流程的优化、基于微服务架构的容器化部署以及自动化监
|
8天前
|
运维 Kubernetes Cloud Native
构建高效云原生应用:采用微服务架构与容器化技术
【5月更文挑战第28天】 在当今数字化转型的浪潮中,企业正迅速采纳云原生技术以保持竞争力。本文深入探讨了构建高效云原生应用的关键要素,重点分析了微服务架构和容器化技术如何共同推动应用的敏捷性、可扩展性和可靠性。通过具体案例分析,揭示了这些技术在实际业务场景中的应用效果及其带来的显著改进。
|
9天前
|
监控 负载均衡 数据库
构建高效微服务架构:后端开发者的技术挑战与策略
【5月更文挑战第27天】 在数字化转型的浪潮中,微服务架构已成为软件开发的一大趋势。它通过拆分传统单体应用,实现服务的细粒度管理和独立部署,从而提高了系统的可扩展性和灵活性。然而,随之而来的是一系列技术挑战,包括服务治理、数据一致性、网络延迟等问题。本文将探讨这些挑战并提出相应的解决策略,以帮助后端开发者构建和维护一个高效的微服务系统。