获取写入和读取系统调用是很好的第一步!
clone 和 execve 系统调用将为您提供有关进程创建的信息。
... syscall_entry_clone: { cpu_id = 2 }, { clone_flags = 0x1200011, newsp = 0x0, parent_tid = 0x0, child_tid = 0x7F4440D7EA10 }
... syscall_exit_clone: { cpu_id = 2 }, { ret = 1606323 }
... syscall_exit_clone: { cpu_id = 1 }, { ret = 0 }
... syscall_entry_execve: { cpu_id = 1 }, { filename = "/bin/bash", argv = 0x55FA993F7EB0, envp = 0x55FA993BAF20 }
execve 系统调用提供进程路径。
确实,最好为每个事件提供 pid、ppid 以简化分析。这可以使用lttng add-context 命令来完成。对于这种情况:
lttng add-context -k -t vpid
lttng add-context -k -t vppid
然后我们得到:
... syscall_entry_clone: { cpu_id = 0 }, { vpid = 1602589, vppid = 2996 }, { clone_flags = 0x1200011, newsp = 0x0, parent_tid = 0x0, child_tid = 0x7F4440D7EA10 }
... syscall_exit_clone: { cpu_id = 0 }, { vpid = 1602589, vppid = 2996 }, { ret = 1607998 }
... syscall_exit_clone: { cpu_id = 1 }, { vpid = 1607998, vppid = 1602589 }, { ret = 0 }
... syscall_entry_execve: { cpu_id = 1 }, { vpid = 1607998, vppid = 1602589 }, { filename = "/bin/bash", argv = 0x55FA993B8C00, envp = 0x55FA993BAF20 }
... syscall_exit_execve: { cpu_id = 1 }, { vpid = 1607998, vppid = 1602589 }, { ret = 0 }
我鼓励您使用lttng add-context --list 命令查看可用的上下文。
现在进入文件的读/写/打开/关闭,基本事件设置将是:
lttng enable-event -k --syscall write,pwrite64,writev,pwritev
lttng enable-event -k --syscall read,pread64,readv,preadv
lttng enable-event -k --syscall open,openat,name_to_handle_at,open_by_handle_at
lttng enable-event -k --syscall close
open 系列很重要,因为它给出了 fd 编号和文件路径之间关系的起点。 close 系统调用对于结束关系很重要。
至于“实时提要”,live mode 符合要求。但是,如果您可以耽搁一些时间,我建议您查看rotation feature。
从那里您应该拥有所需的所有信息。不幸的是,Trace Compass 似乎没有为此提供全面的分析。如果您能胜任这项任务,那么在 Babeltrace2 python plugin 或简单地使用 python TraceCollection API 中实现应该不会太难。
回顾一下:
lttng create my_session
lttng enable-event -k --syscall clone,exec
lttng enable-event -k --syscall write,pwrite64,writev,pwritev
lttng enable-event -k --syscall read,pread64,readv,preadv
lttng enable-event -k --syscall open,openat,name_to_handle_at,open_by_handle_at
lttng enable-event -k --syscall close
lttng add-context -k -t vpid
lttng add-context -k -t vppid