
eBPF
文章平均质量分 88
JinrongLiang
开放、自由、分享
展开
-
Ubuntu下基于 Cilium CNI 的 Kubernetus集群环境搭建
Ubuntu下基于 Cilium CNI 的 Kubernetus集群环境搭建1. 前言2. 安装三个Ubuntu2.1 三个机器都关闭防火墙2.2 三个机器都关闭swap2.3 三个机器都关闭selinux3. 部署Kubernetus集群3.1 安装 kubeadm、kubelet和kubectl3.2 安装 Docker3.3 初始化 Master Node3.4 集群中添加 Worker Node4. 安装Cilium4.1 安装Helm4.2 安装Cilium4.3 验证Cilium5. 总结1原创 2021-05-11 18:32:57 · 1871 阅读 · 4 评论 -
基于 eBPF 的 prometheus 监控方案
从最新资源构建二进制文件:$ go get -u -v github.com/cloudflare/ebpf_exporter/...cp -ip go/bin/ebpf_exporter /usr/local/bin/ebpf_exporter运行一个示例:$ sudo ebpf_exporter --config.file=src/github.com/cloudflare/ebpf_exporter/examples/bio.yaml输出结果如下:浏览器访问9435端口,输出结原创 2021-04-13 17:23:25 · 5133 阅读 · 0 评论 -
BPF Tools 参考链接
链接1:http://www.brendangregg.com/bpf-performance-tools-book.html链接2:https://github.com/iovisor/bcchttps://github.com/iovisor/bpftrace链接3:https://github.com/torvalds/linux/blob/master/include/uapi/linux/bpf.h链接4:https://github.com/iovisor/bcc链接5:https://原创 2021-03-17 14:22:04 · 484 阅读 · 0 评论 -
使用BPF跟踪Linux内核
1. 前言我们可以使用BPF对Linux内核进行跟踪,收集我们想要的内核数据,从而对Linux中的程序进行分析和调试。与其它的跟踪技术相比,使用BPF的主要优点是几乎可以访问Linux内核和应用程序的任何信息,同时,BPF对系统性能影响很小,执行效率很高,而且开发人员不需要因为收集数据而修改程序。本文将介绍保证BPF程序安全的BPF验证器,然后以BPF程序的工具集BCC为例,介绍常见BPF程序,具体为kprobes和tracepoints类型的BPF程序的使用及程序编写示例。2. BPF验证器BPF原创 2021-03-11 19:17:51 · 2171 阅读 · 0 评论 -
BPF程序类型
1 前言根据BPF程序的主要目的,可以将其分为两类。一类是跟踪,一类是网络。1.1 跟踪跟踪类程序可以提供系统行为和系统硬件的直接信息。它们可以访问特定内存区域,从运行进程中提取执行跟踪信息。还可以直接访问为每个特定进程分配的资源,包括文件描述符、CPU和内存。1.2 网络网络类程序可以检测和控制系统的网络流量。它们可以对网络接口的数据包进行过滤,甚至可以完全拒绝数据包。可以将BPF程序附加到网络驱动程序接受数据包的网络事件上,也可以将BPF程序附加到数据包传递给用户空间的网络事件上。2. BP原创 2021-03-09 15:12:49 · 1252 阅读 · 0 评论 -
网络bcc程序测试方案
网络bcc程序测试方案1. 具体做法1.1 准确性测试1.2 性能测试2. 数据模拟工具3. 传统工具举例3.1 iftop实时流量监控工具(此工具可用来测试网络流量指标程序)3.2 netperf3. iperf网络组指标有四个,分别是网络流量、网络延时、丢包率、错包率,主要测试准确性和性能两个方面。准确性测试主要测试程序对于要提取的网络数据是否准确,可以用模拟工具模拟要提取的数据,例如使用tc命令设置网络延时和丢包,然后使用我们编写的程序采集数据,并且使用传统工具进行对比,测试我们的程序采集的数原创 2020-10-10 16:10:49 · 1402 阅读 · 0 评论 -
Ubuntu18.4 中 eBPF & bcc环境搭建
bcc安装1、配置内核选项在/usr/src目录下使用 make menuconfig命令进行如下内核配置:CONFIG_BPF=yCONFIG_BPF_SYSCALL=y# [optional, for tc filters]CONFIG_NET_CLS_BPF=m# [optional, for tc actions]CONFIG_NET_ACT_BPF=mCONFIG_BP...原创 2020-02-20 22:54:16 · 7169 阅读 · 3 评论 -
Ubuntu下bpf纯c程序的编写与运行
1. 前言2. 搭建bpf程序运行环境2.1 下载源码3. bpf代码分析及运行4. 总结原创 2020-10-07 21:20:01 · 7041 阅读 · 9 评论 -
bcc Reference Guide 中文翻译
bcc Reference Guide文章目录bcc Reference GuideBPF CEvents & Arguments1、kprobes2、kretprobes3、Tracepoint4、uprobes5、uretprobes6、USDT probes7、Raw Tracepoints8、system call tracepoint9、kfuncs10、kretfuncsData1、bpf_probe_read()2、bpf_probe_read_str()3、bpf_ktime_ge原创 2020-08-21 20:02:04 · 4167 阅读 · 0 评论 -
使用eBPF&bcc提取内核网络流量信息(二)
通过上次从0开始编写自己的bcc程序的介绍,我们已经用编写的bcc程序提取出内核网络中数据关键字段为进程的PID,进程的名字,进程的收包实时流量、发包实时流量,收包流量总和,发包流量总和,总的收发流量等数据,今天我们通过分析内核源码,为其增加源地址、源端口、目的地址、目的端口等字段。上次我们使用kprobe挂接了两个重要的函数,分别是tcp_sendmsg和tcp_cleanup_rbuf,下面我们结合源码进行解读。为什么要挂接tcp_sendmsg,我们先看这个图:网络数据包的发送过程起始于应用层的原创 2020-08-03 17:26:05 · 3294 阅读 · 2 评论 -
使用eBPF&BCC提取内核网络流量信息
前言本文将分享从0开始编写自己的bcc程序。那么开始编写bcc之前,自己一定要明确,我们要用bcc提取什么数据。本文的实例是统计内核网络中的流量,我要提取的数据关键字段为进程的PID,进程的名字,进程的收包实时流量、发包实时流量,收包流量总和,发包流量总和,总的收发流量等。我们知道bcc是eBPF的一个工具集,是eBPF提取数据的上层封装,它的形式是python中嵌套bpf程序。python部分的作用是为用户提供友好的使用eBPF的上层接口,也用于数据处理。bpf程序会注入内核,提取数据。当bpf程序运原创 2020-07-27 18:30:11 · 3363 阅读 · 2 评论 -
kprobes/kretprobes 在 bcc 程序中的使用
1. kprobes/kretprobes 介绍1.1 kprobes 介绍kprobes 主要用来对内核进行调试追踪, 属于比较轻量级的机制,,本质上是在指定的探测点(比如函数的某行, 函数的入口地址和出口地址,,或者内核的指定地址处)插入一组处理程序.。内核执行到这组处理程序的时候就可以获取到当前正在执行的上下文信息, 比如当前的函数名, 函数处理的参数以及函数的返回值,,也可以获取到寄存器甚至全局数据结构的信息。1.2 kretprobes 介绍kretprobes 在 kprobes 的机制原创 2020-06-21 16:10:17 · 1810 阅读 · 0 评论 -
eBPF内核探测中将任意系统调用转换成事件
上回,我们说到bpf_trace_printk 带的参数太多了,会出现error: <unknown>:0:0: in function kprobe__inet_listen i32 (%struct.pt_regs*): too many args to 0x55a83e8f8320: i64 = Constant<6>这样的错误,这是 BPF 的限制。解决这个问题的办法就是使用 perf,它支持传递任意大小的结构体到用户空间。要使用 perf,我们需要:定义一个结构体声原创 2020-06-07 16:35:46 · 1034 阅读 · 0 评论 -
eBPF学习——抓取内核网络中的socket信息
bcc 是基于 LLVM 的工具集,用 Python 封装了底层机器相关的细节,bcc工具使得 eBPF 的使用更加方便,使用时内核探测代码用 C 写, 数据处理用 Python 。本文将使用 bcc工具抓取内核网络中的数据,包括抓取 backlog 信息、port 和 IP 信息、网络命名空间信息等。eBPF 可以将任何内核函数调用转换成可带任何数据的用户空间事件。每当有程序监听 TCP socket,就得到一个事件通知。当在 AF_INET 和 SOCK_STREAM 类型的 socket 上调用系统原创 2020-05-31 17:05:31 · 2873 阅读 · 0 评论