eBPF监控工具bcc系列三自定义工具trace

简介:


上篇中是通用的直接可用工具。

  trace工具可以指定跟踪函数并显示,可控制其输出格式来显示函数参数和返回值。

例如跟踪文件拥有者的属性更改,也就是跟踪三个文件系统调用chown,fchown,lchown。使用如下:

trace.py    'p::SyS_chown "file = %s, to_uid = %d, to_gid = %d, from_uid = %d", arg1, arg2, arg3, $uid'    'p::SyS_fchown "fd = %d, to_uid = %d, to_gid = %d, from_uid = %d", arg1, arg2, arg3, $uid'    'p::SyS_lchown "file = %s, to_uid = %d, to_gid = %d, from_uid = %d", arg1, arg2, arg3, $uid'

例如跟踪非主动上下文切换。

trace.py -p 1134138 't:sched:sched_switch (args->prev_state == TASK_STATE_MAX || args->prev_state == 0)'

跟踪系统中所有exec调用

# trace 'sys_execve "%s", arg1'

其中sys_execve是内核函数,%s表示打印字符串,这个被复制为arg1就是程序的入参。

例如跟踪系统读操作read,所读大小大于20000(这个参数可以通过man read查看是在第三个位置上),所以跟踪函数如下:

trace 'sys_read (arg3 > 20000) "read %d bytes", arg3'

还可以跟踪用户层函数,例如跟踪bash上readline脚本,并输出返回值,可以如下书写

trace 'r:bash:readline "%s", retval'

其中r表示retprobe是返回探针。

跟踪读写失败的命令

trace 'r:c:read ((int)retval < 0) "read failed: %d", retval' 'r:c:write ((int)retval < 0) "write failed: %d", retval' -T

1.   内核tracepoints

还可以跟踪内核的tracepoints,例如跟踪block:block_rq_complete的tracepoint,并打印多少扇区被传输。

trace 't:block:block_rq_complete "sectors=%d", args->nr_sector' -T

如果不清楚跟踪点的数据结构格式,可以使用tplist工具来获得,例如

tplist -v block:block_rq_complete

得到数据结构后就可以用做参数来获取nr_sector了。

2.   第三方库

越来越多高级库支持探针,就像内核tracepoint一样可以用来被跟踪。

例如跟踪pthread_create函数

trace 'u:pthread:pthread_create "%U", arg3' -T -C

            其中%U表示将arg3解析成用户层符号。同样,内核的是%K.

            现在Ruby,Node,OpenJDK都支持。

跟踪ruby示例:

trace 'u:ruby:method__entry "%s.%s", arg1, arg2' -p $(pidof irb) -T

跟踪共享库函数如下:

trace.py 'r:/usr/lib64/libtinfo.so:curses_version "Version=%s", retval'

 

3.   高级过滤

跟踪open,同时指出其打开的文件名字为test.txt

trace 'p:c:open (STRCMP("test.txt", arg1)) "opening %s", arg1' -T

trace 'p::SyS_nanosleep(struct timespec *ts) "sleep for %lld ns", ts->tv_nsec'

跟踪指定进程的指定函数,使用-p参数,如下:

trace -p 2740 'do_sys_open "%s", arg2' -T

 

 

 

目录
相关文章
|
5月前
|
安全 Linux 测试技术
|
2月前
|
存储 数据可视化 Linux
在Linux中,如何使用ELK进行日志管理和分析?
在Linux中,如何使用ELK进行日志管理和分析?
|
11月前
|
运维 前端开发 关系型数据库
高效调试与分析:利用ftrace进行Linux内核追踪(上)
高效调试与分析:利用ftrace进行Linux内核追踪
|
11月前
|
存储 网络协议 Linux
高效调试与分析:利用ftrace进行Linux内核追踪(下)
高效调试与分析:利用ftrace进行Linux内核追踪
|
5月前
|
运维 监控 安全
linux日志分析与追踪
在Linux中,日志分析涉及检查 `/var/log` 下的不同文件,如`messages`、`auth.log`、`kern.log`等,以及Web服务器和数据库日志。使用`tail`、`grep`、`awk`等工具实时查看和搜索日志,`logrotate`管理日志大小,`journalctl`处理Systemd日志,而`Splunk`等工具则用于集中式分析。分析技巧包括异常检测、时间关联和阈值监控。安全事件追踪结合登录失败日志、网络嗅探和IDS/IPS。日志链路追踪在分布式系统中尤为重要,帮助定位服务调用问题。有效的日志管理和分析能增强系统安全和故障排除能力。
47 7
|
缓存 监控 Ubuntu
Linux Command BCC 性能监视、网络动态跟踪工具
Linux Command BCC 性能监视、网络动态跟踪工具
|
Dragonfly 监控 Unix
Go整合gopsutils监控系统性能指标参数
Go整合gopsutils监控系统性能指标参数
|
前端开发 API C语言
eunomia-bpf 用户手册: 让 eBPF 程序的开发和部署尽可能简单
让 eBPF 程序的分发和使用像网页和 Web 服务一样自然(Make eBPF as a service): 支持在集群环境中直接通过一次请求进行分发和热更新,仅需数十 kB 的 payload, &lt;100ms 的更新时间,和少量的 CPU 内存占用即可完成 eBPF 程序的分发、部署和更新; 不需要执行额外的编译过程,就能得到 CO-RE 的运行效率;
824 0
eunomia-bpf 用户手册: 让 eBPF 程序的开发和部署尽可能简单
|
前端开发 网络协议 Linux
问题排查利器:Linux 原生跟踪工具 Ftrace 必知必会
问题排查利器:Linux 原生跟踪工具 Ftrace 必知必会
513 0