使用trace-cmd获取远程机器的追踪

trace-cmd中具有跨网络进行远程机器的ftrace操作、接收数据的功能。在接收数据的本地机器上运行trace-cmd listen命令,在远程机器上运行trace-cmd record,将追踪信息传送到本地机器的trace-cmd。

在通过trace-cmd记录的文件中,同时还记录了追踪器运行的机器的字节顺序(endian)等,即使是不同架构的机器之间也可以从远程进行追踪。从而也可以以嵌入式机器这样本地存储较小的机器将追踪信息提取到开发机器上进行分析。

要获取远程机器的追踪,首先在保存追踪数据的机器上以等待远程连接的模式启动trace-cmd。这时必须要设置等待端口号。此外,如果添加-D选项,还可以在后台作为守护进程运行。例如,在下例中是在11223号端口等待追踪会话(session)。


[host]#trace-cmd listen-p 11223


然后,在实际想获取追踪的机器上,向trace-cmd record的-N选项指定“主机名称:端口编号”并执行。例如,在下例中是连接到host的11223号端口,传送执行ls命令期间的函数追踪结果。


[client]#trace-cmd record-N host:11223-p function ls


这样就会在host的界面上出现下列显示结果。


connected!

Connected with client:33186

cpus=4

pagesize=4096

version=6

offset=31b000

offset=36d000

offset=3ce000

offset=483000

connected!


在主机的本地目录下就会生成trace.客户端名:端口.dat数据文件。要分析这个数据文件,需要如下例所示在trace-cmd report的-i选项中指定数据文件。


[host]#trace-cmd report-i trace.client:33186.dat

version=6

cpus=4

<……>-5453[000]7366.159374:function:down_read<—m_start

<……>-5454[003]7366.159374:function:__fsnotify_parent<—

vfs_write

<……>-5453[000]7366.159375:function:_cond_resched<—

down_read

<……>-5454[003]7366.159375:function:fsnotify<—vfs_write

<……>-5454[003]7366.159375:function:__srcu_read_lock<—

fsnotify

<……>-5453[000]7366.159375:function:seqlist_start<—m

start

……


追踪的客户端的磁盘上未写入任何数据文件,因此可以用来在安装机器等保存追踪数据的空间较小的机器上获取追踪。但是由于是经由一般的TCP通信进行数据传输的,如果是在安全性有问题的环境中,还需要使用VPN或SSH端口映射(Prot Forward)等。