基于BPF提升postgres可观测性的前提或条件
最近看到一个新产品(dbdoctor)使用了eBPF技术,可实现对sql级别的监控,其涵盖了,cpu,内存,io,网络等,功能非常强大,目前mysql版本的已经开卖了。经过一番了解发现,该技术对于数据库的性能分析,故障排查方面很有用处。下面对了解到的内容总结一下。
参考:
Linux 可观测性 BPF&eBPF 以及 BCC&bpftrace 认知 - 知乎 (zhihu.com)
基于bpftrace对PostgreSQL进行观测 - 墨天轮 (modb.pro)
基于bpftrace对PostgreSQL进行观测(续) - 墨天轮 (modb.pro)
PostgreSQL + eBPF实现数据库服务可观测 - 墨天轮 (modb.pro)
BPF、eBPF、BCC、bpftrace的联系
BPF:最初的作用是提升网络过滤工具的性能和监控。
eBPF : 扩展后的BPF通常缩写为eBPF,事实上,在内核中只有一个执行引擎,即 BPF(扩展后的 BPF),它同时支持扩展后的 BPF和经典的 BPF 程序。eBPF有很多工具,按照封装程度由低到高分别是libbpf<bcc<bpftace
BCC(BPF 编译器集合,BPF Compiler Collection
):最早用于开发 BPF 跟踪程序的高级框架。它提供了一个编写内核 BPF 程序的C语言环境,同时还提供了其他高级语言(如Python、Lua和C++)环境来实现用户端接口。它也是libbcc
和 libbpf
库'的前身,这两个库提供了使用BPF 程序对事件进行观测的库函数。BCC源代码库中提供了 70多个BPF 工具,可以用来支持性能分析和排障工作。你可以在自己的系统上安装 BCC,无须自己动手编写任何 BCC代码,更适合开发复杂的脚本和作为后台进程使用,它还可以调用其他库的支持。比如,有不少用 Python 开发的 BCC程序,它们使用 Python 的 argparse
库来提供复杂、精细的工具命令行参数支持。
bpftrace:是一个新近出现的前端,它提供了专门用于创建 BPF 工具的高级语言支持 ,bpftrace 工具的源代码非常简洁,因此本书中介绍相关工具时,可以直接带上源代码来展示具体的观测操作以及数据是如何被处理的。bpftrace 也是基于 libbcc 和 libbpf库进行构建的。编写功能强大的单行程序短小的脚本方面甚为理想
观测postgres的前提和条件
Linux前提
- 4.1 - kprobes
- 4.3 - uprobes
- 4.6 - stack traces, count and hist builtins (use PERCPU maps for accuracy and efficiency)
- 4.7 - tracepoints
- 4.9 - timers/profiling
内核还需要使用以下选项进行构建:
CONFIG_BPF=y
CONFIG_BPF_SYSCALL=y
CONFIG_BPF_JIT=y
CONFIG_HAVE_EBPF_JIT=y
CONFIG_BPF_EVENTS=y
CONFIG_FTRACE_SYSCALLS=y
CONFIG_FUNCTION_TRACER=y
CONFIG_HAVE_DYNAMIC_FTRACE=y
CONFIG_DYNAMIC_FTRACE=y
CONFIG_HAVE_KPROBES=y
CONFIG_KPROBES=y
CONFIG_KPROBE_EVENTS=y
CONFIG_ARCH_SUPPORTS_UPROBES=y
CONFIG_UPROBES=y
CONFIG_UPROBE_EVENTS=y
CONFIG_DEBUG_FS=y
postgres前提
最好可以重新编译,并在configure 增加–enable-dtrace选项,可以跟踪postgres提供的观测点。
查看postgres的观测点可以使用readelf -n postgres ,也可以使用tplist-bpfcc -l /home/postgres/bin/postgres,或者访问pg官网提供的信息PostgreSQL: Documentation: 16: 28.5. Dynamic Tracing
一些学习地址
GitHub - bpftrace/bpftrace: High-level tracing language for Linux eBPF
bpftrace/tools/README.md at master · bpftrace/bpftrace · GitHub
Linux eBPF Tracing Tools (brendangregg.com)
Using BPFtrace to Trace PostgreSQL Vacuum Operations (timescale.com)
后续继续更新相关的内容。