如今eBPF程序的编写,很多都是基于bcc或者bpftrace进行,也有开发者直接基于libbpf库进行,但是不管怎样,编写的xx.bpf.c程序,在加载到内核时,都必须经过内核的verifier校验器进行各种边界和内存检查,经常会碰到各种奇奇怪怪的verifier报错,导致eBPF程序加载失败。有些错误,开发者可能要花费大量的时间去分析并修改程序,并祈祷程序能够加载成功。特别是在低版本的内核运行低版本Clang编译器编译的eBPF程序,错误提示非常糟糕,经常找不到出错点,这就大大增加了开发难度。为此,本文梳理了一些常见的eBPFverifier报错,避免更多的人走弯路,写出能成功加载的eBP
本文分享自华为云社区《华为云CCETurbo:基于eBPF的用户自定义多粒度网络监控能力》,作者:云容器大未来。基于eBPF的容器监控的兴起容器具有极致弹性、标准运行时、易于部署等优点,越来越多的客户选择使用容器来部署自己的服务,随着容器规模越来越大,容器间网络交互也越来越复杂。我们需要一套完整的监控系统,让用户和运维团队可以更清晰的观测容器网络的运行情况。基本的容器网络监控,和虚机的监控类似,只能监控每个pod的网络流量、丢包等基本信息,监控的方式就是通过pod内网卡上的统计信息获取监控结果。这种监控看到的信息有限,无法满足对容器网络深入观测的目标。 比如用户想看一下容器网络中都有哪些连接
对Kubernetes集群进行监控对于确保容器化应用程序的健康、性能和可靠性至关重要。Kubernetes提供了强大的监控工具套件和集成,但是当您需要深入内核和网络级别的复杂性时,eBPF(扩展的伯克利包过滤器)就成为了无价的资源。在本文中,我们将探索惊人的eBPF功能,以及如何利用它提升Kubernetes监控策略。译自HowtoUseeBPFCapabilitiestoNavigateKubernetesMonitoring。作者DevGenius。在Kubernetes的背景下,eBPF在诸如容器网络监控(CNI插件)、通过基于eBPF的网络策略加强安全性以及进行详细的性能分析等任务中发
引言eBPF作为当前linux系统上最为炙手可热的技术,通常被用于网络流量过滤和分析、系统调用跟踪、性能优化、安全监控,当下比较知名的项目有Cilium、Falco等。Cilium是一个开源的容器网络和安全性项目,致力于提供高效的容器通信和强大的安全性功能,Cilium基于eBPF、XDP、TC等技术实现了Layer3(IP)、Layer4(TCP/UDP)以及HTTP层的负载均衡和网络防护,是一款非常优秀的网络安全工具。Falco是一个开源的云原生应用安全项目,旨在提供运行时容器安全性监控和威胁检测,Falco通过监视容器运行时环境的系统调用和其他事件,检测并报告可能的异常行为和安全威胁,使
原文:https://blog.mickeyzzc.tech/posts/ebpf/deepflow-agent-proto-devMongoDB目前使用广泛,但是缺乏有效的可观测能力。DeepFlow在可观测能力上是很优秀的解决方案,但是却缺少了对MongoDB协议的支持。该文是为DeepFlow扩展了MongoDB协议解析,增强MongoDB生态的可观测能力,简要描述了从协议文档分析到在DeepFlow内实现代码解析的过程拆解。0x0:如何分析一个协议(MongoDB)协议文档的分析思路首先要从官方网站找到协议解析的文档,在协议文档《mongodb-wire-protocol#standa
这两天有空,继续更新一篇有关eBPFBCC框架尾调用的内容。eBPF技术很新,能够参考的中文资料很少,而对于BCC框架而言,优秀的中文介绍和教程更是凤毛麟角。我尝试去网上检索有关尾调用的中文资料,BCC框架的几乎没有。即使找到了,这些资料也难以给出可供参考和正确运行的例子。BCC框架的中文资料也就图一乐,真正有指导意义的,还得去看BrendanGregg大神的博客和bcc项目。既然如此,我来抛砖引玉,就简单介绍一下eBPF尾调用在BCC框架中是如何应用的吧。1何为尾调用?引用ebpf.io网站的一句介绍:“尾调用允许eBPF调用和执行另一个eBPF并替换执行上下文,类似于一个进程执行execv
这两天有空,继续更新一篇有关eBPFBCC框架尾调用的内容。eBPF技术很新,能够参考的中文资料很少,而对于BCC框架而言,优秀的中文介绍和教程更是凤毛麟角。我尝试去网上检索有关尾调用的中文资料,BCC框架的几乎没有。即使找到了,这些资料也难以给出可供参考和正确运行的例子。BCC框架的中文资料也就图一乐,真正有指导意义的,还得去看BrendanGregg大神的博客和bcc项目。既然如此,我来抛砖引玉,就简单介绍一下eBPF尾调用在BCC框架中是如何应用的吧。1何为尾调用?引用ebpf.io网站的一句介绍:“尾调用允许eBPF调用和执行另一个eBPF并替换执行上下文,类似于一个进程执行execv
eBPF中实现内核态代码与用户态代码是可以实时通信的,这主要靠BPF映射来实现。BPF映射是内核空间的一段内存,以键值对的方式存储。内核态程序可以直接访问BPF映射,用户态需要通过系统调用才能访问这段地址。BPF映射有很多种类型,如下表所示。类型说明BPF_HASH哈希表BPF_ARRAY数组BPF_HISTOGRAM直方图BPF_STACK_TRACE跟踪栈BPF_PERF_ARRAY硬件性能数组BPF_PERCPU_HASH单CPU哈希表BPF_PERCPU_ARRAY单CPU数组BPF_LPM_TRIE最长前缀匹配映射BPF_PROG_ARRAY尾调用程序数组......本文列举了使用e
闲言少叙,本文记录了如何零基础通过BCC框架,入门eBPF程序的开发,并实现几个简易的程序。有关eBPF的介绍,网络上的资料有很多,本文暂且先不深入讨论,后面会再出一篇文章详细分析其原理和功能。我们目前只需要知道,eBPF实际上是一种过滤器,这种过滤器几乎可以插入内核源码的任意的流程和环节中,实现自定义的逻辑。由于eBPF自身的若干限制,使它最常见的用法是,附着在内核某些关键流程上,抓取一些关键数据,用于监控、统计和分析。1一个简单的例子下面是一个简单的例子,我想实现一个程序,用来实时监控内核可执行文件(ELF)的加载。这个程序运行如下:如图所示,每当有一个ELF文件被加载时,可以显示这个EL
本文是eBPF系列的第二篇文章,我们来学习eBPFBCC框架的进阶用法,对上一篇文章中的代码进行升级,动态输出进程运行时的参数情况。主要内容包括:通过kprobe挂载内核事件的eBPF程序要如何编写?通过tracepoint挂载内核事件的eBPF程序要如何编写?eBPF的程序事件类型有哪些?在开始之前,我们来回顾一下前一篇文章的内容。前一篇文章介绍了如何通过BCC框架来编写一个简单的eBPF程序。在内核空间,使用c程序实现eBPF的核心逻辑;在用户空间,使用python脚本作为eBPF程序的控制、加载和展示。其中,内核态通过若干eBPFhelper函数,获取内核观测数据,并通过PERF区域,将