本文地址:https://www.ebpf.top/post/kernel_btf/
英文文档:https://www.kernel.org/doc/html/latest/bpf/btf.html
本文地址:https://www.ebpf.top/post/kernel_btf/
英文文档:https://www.kernel.org/doc/html/latest/bpf/btf.html
原文地址:https://networkop.co.uk/post/2021-03-ebpf-intro/
本站相关文档:使用 Go 语言管理和分发 ebpf 程序
本文地址:https://www.ebpf.top/post/ebpf_network_exporter
公有云网络问题,是一个老生常谈的事情了。今天主要简单说明下,在内网环境下去分析 & 定位这个问题。也并不是一开始就需要 eBPF 加持的,可以从简单的基础工具到监控配合去相关比较快速的定位问题,解决问题。下面会从发现问题到一步步配合使用 Or 开发一些简单的东西去解决问题的大致思路。
图 1-1 为网络层内核收发核心流程图,在函数流程图中我们可以看到 Netfliter
在其中的位置(图中深色底纹圆角矩形)。图中对应的 hook
点有 5 个,每个hook
点中保存一组按照优先级排序的函数列表:
tracepoint
的介绍可以参见 Kernel 文档这里。从 Linux 内核 4.7 开始,eBPF 程序可以挂载到内核跟踪点 tracepoint
。在此之前,要完成内核中函数跟踪的工作,只能用 kprobes/kretprobe
等方式挂载到导出的内核函数(参见 /proc/kallsyms
),正如我们前几篇文章跟踪 open
系统调用方式那样。尽管 kprobes
可以达到跟踪的目的,但存在很多不足:
在上篇文章中我们为文件 open
系统调用采用了 perf_event
的方式将数据从内核上报至用户程序。但是到目前为止,我们只是实现了文件打开记录的跟踪,并没有对文件访问的结果是成功还是失败进行展示。
在上一篇 ”使用 ebpf 实时持续跟踪进程文件记录“ 中,我们简单介绍了使用 eBPF 跟踪文件打开记录的跟踪。为了简单演示功能,我们直接使用了 bpf_trace_printk
进行演示,正如上文所述,bpf_trace_printk
存在一些限制:
本文主要用于演示基于 ebpf 技术来实现对于系统调用跟踪和特定条件过滤,实现基于 BCC 的 Python 前端绑定,过程中对于代码的实现进行了详细的解释,可以作为学习 ebpf 技术解决实际问题的参考样例。