bcc/MySQL相关踩坑过程
背景
毕设做的是用 ebpf 对 MySQL tracing/monitor 的一个项目。本着站在巨人的肩膀上前行的想法,先看看bcc 中MySQL相关的工具。如果能在bcc工具基础上修改,那就再好不过了。
1. bcc
对 bcc 项目进行全局搜索。
bcc/tools 目录下相关于MySQL 的工具有 dbstat.py
dbslower.py
代码看着都还挺像回事的。
Copyright 2017, Sasha Goldshtein
都是这位大佬Sasha Goldshtein
在17年完成的。
直接开搞。RUN IT!
1 | $ python3 dbstat.py mysql |
出现了报错。
1 | raise USDTException("USDT failed to instrument PID %d" % pid) |
google it!
在bcc的issue中提到了这个报错。
https://github.com/iovisor/bcc/issues/2330
yonghong-song 提到
You need to recompile
mysqld
with usdt support. Seehttps://github.com/iovisor/bcc/blob/master/man/man8/mysqld_qslower.8#L17-L18
顺藤摸瓜。
发现默认的 MySQL 并没有开启 dtrace。
需要在编译 MySQL 的时候带上参数-DENABLE_DTRACE=1
。
同时也发现在dbstat.py
dbslower.py
的注释中都有提到这一点。
1 | dbstat.py |
现在问题就转化为编译安装MySQL并在编译时带上参数。事情在现在看来都是可解决的。
2 .compile MySQL
步骤看着挺简单。
1 | git clone --depth=1 https://github.com/MariaDB/server mariadb |
当make
的时候遇到报错
类似https://github.com/iovisor/bcc/issues/2233
1 | make[2]: DTRACE-NOTFOUND: Command not found |
貌似是缺失dtrace . 需要确认一下。
issue2233
里面提到了一个重要文档。
https://dev.mysql.com/doc/refman/5.7/en/dba-dtrace-server.html
问题又转化成安装 dtrace.
三: dtrace
3.1dtrace 是什么?
1 | DTrace 是动态追踪技术的鼻祖,它于 21 世纪初诞生于 Solaris 操作系统, |
3.2 dtrace with MySQL
处理刚才提到的 MySQL 官方文档。
1 | MySQL includes support for DTrace probes on these platforms: |
翻译如下:
1 | MySQL在这些平台上支持DTrace探针: |
得到了关键信息。在ubuntu 或 Linux 下使用 dtrace 需要编译。
只是更明确了一下。
问题现在聚焦于解决编译 MySQL 时的报错。
3.3 dtrace4linux
google 如何在linux 平台上安装dtrace 指向了这么一个仓库。
https://github.com/dtrace4linux/linux
1 | This is a port of the Sun DTrace user and kernel code to Linux. No linux kernel code is touched in this build, but what is produced is a dynamically loadable kernel module. This avoids licensing issues and allows people to load and update dtrace as they desire. |
问题好像变得只需要需要dtrace4linux就行了。
ubuntu/fedora 上就能有 dtrace.
1 | $ tools/get-deps-arch.sh # if using ArchLinux |
执行上面的命令。在make all
遇到报错。
ubuntu下遇到。
1 | fatal error: /usr/include/sys/types.h: No such file or directory |
切到 fedora 该问题解决。但是又碰到新问题。
1 | Make all error - FATAL ERROR: cannot find old_rsp FATAL ERROR: build.pl aborting |
google it.
发现issue https://github.com/dtrace4linux/linux/issues/113
大家都遇到了同样的问题,且没有解决方案。
再看了看 dtrace4linux 应该是不再维护了。
至此这条路是走不通了。
way 2: Solaris 10
直接自带。但不是 linux 系统, make no sense.
way 3: https://blogs.oracle.com/linux/dtrace-on-fedora
直接编译dtrace内核模块 编译fedora.
耗时几个小时,
测试在拉fedora 源码这一步就因为网络不稳定进行不下去了。
而且这种方式看起来过于暴力了。
4.Last
另一个方向: use uprobe
关键的一条信息:
page 14
hard way to go…