- 将SystemTap作为服务启动
- cp syscalltop.stp/etc/systemtap/script.d/
- echo syscalltop_OPT=\"-o/var/log/tracelog-%F-%T.log-S 256,2\">/etc/systemtap/conf.d/syscalltap.conf
- service systemtap start
- service systemtap status
- service systemtap start syscalltop
- service systemtap stop
- chkconfg systemtap on
- service systemtap compile-r 2.6.38
- cp syscalltop.stp/etc/systemtap/script.d/
- echo syscalltop_OPT=\"-o/var/log/tracelog-%F-%T.log-S 256,2\">/etc/
- service systemtap compile-r 2.6.38
- ls/var/cache/systemtap/2.6.38/
- tar czPf cache-syscalltop-2.6.38.tar.gz\
- scp cache-syscalltop-2.6.38.tar.gz stap-client:~/
- tar xzf cache-syscalltop-2.6.38.tar.gz-C/
- service systemtap start
- service systemtap status
将SystemTap作为服务启动
将SystemTap添加到initscript中,就可以作为服务启动。这样除了可以集中操作用户生成的脚本以外,还可以根据内核版本的升级重新编写脚本。这个结构可以同时控制多个脚本。例如,系统设计时准备了很多不同作用的脚本,管理人员可以根据各个服务器的运用情况仅启用有效的脚本,或者复制到各服务器中。
SystemTap服务的设置
要使用文件SystemTap服务,首先需要安装systemtap-initscript工具包。Debian系列的发布版中也可能没有工具包,因此需要注意。
首先将SystemTap脚本复制到指定的目录(/etc/systemtap/script.d/)。这样就可以在内存飞行记录器模式下运行。要扩大脚本执行时的缓冲区大小,或者要在文件飞行记录器模式下运行时,必须对配置文件进行一些修改。如表8-18和表8-19所示,配置文件中有全局配置文件、脚本或脚本组用配置文件。前者生成的名称为/etc/systemtap/config,后者针对每个脚本生成/etc/systemtap/conf.d/*.config。
下例显示了按照与上一节中文件飞行记录器模式的例子相同的设置登录syscalltop.stp的方法。
cp syscalltop.stp/etc/systemtap/script.d/
echo syscalltop_OPT=\"-o/var/log/tracelog-%F-%T.log-S 256,2\">/etc/systemtap/conf.d/syscalltap.conf
在文件飞行记录器模式下运行时,必须如上例所示使用绝对路径指定文件的输出位置。
脚本的启动与结束
systemtap-initscript包含/etc/init.d/systemtap。这个shell脚本与/etc/init.d中的其他脚本同样可以直接使用或通过service命令使用。
service systemtap start
Compiling systemtap scripts:syscalltop[OK]
service systemtap status
syscalltop(4956)is running……
此外,还可以像下面这样以脚本为单位进行操作。
service systemtap start syscalltop
要结束服务,需要像其他服务一样添加stop选项执行脚本。
service systemtap stop
另外,还可以使用chkconfig等,在启动时自动执行脚本。
chkconfg systemtap on
SystemTap服务的初次运行需要花费一些时间。这是因为在初次运行时要编译脚本。但是,从下一次执行时开始就会跳过脚本的编译,执行速度就得到提高。也可以事先进行编译。例如,安装新脚本或者更新内核时,如果事先编译脚本,就可以避免重新启动后服务的启动时间变慢。例如,下面就是对内核2.6.38进行脚本编译的示例。
service systemtap compile-r 2.6.38
分配已编译的脚本模块
大规模的集群系统或为了负载均衡需运用多个服务器时,有时会对所有服务器进行相同的追踪。将脚本复制到systemtap-initscript的目录下,就可以在各个服务器上编译并执行脚本,但是要编译SystemTap的脚本,就必须要有内核驱动程序的编译环境、内核的调试信息等。这些的负载和磁盘容量也不能忽视,因此如果要创建相同的东西,最好尽量集中进行。
使用systemtap-initscript的CACHEONLY选项,就可以满足这些要求。在各客户端上安装systemtap-initscript,并在/ect/systemtap/config中添加下列两行。
AUTOCOMPILE=no
ALLOW_CACHEONLY=yes
在客户端上不进行隐式的编译,且存在已编译的脚本的缓存时就会执行。
在服务器上,将想要分配的脚本安装在/etc/systemtap/script.d/下,在为各个脚本编写配置文件后,使用/ect/init.d/systemtap compile进行编译。
cp syscalltop.stp/etc/systemtap/script.d/
echo syscalltop_OPT=\"-o/var/log/tracelog-%F-%T.log-S 256,2\">/etc/
systemtap/conf.d/syscalltap.conf
service systemtap compile-r 2.6.38
Compiling systemtap scripts:Compiling syscalltop……done
[OK]
ls/var/cache/systemtap/2.6.38/
syscalltop.ko syscalltop.opts
编译成功后,在/var/cache/systemtap/<内核版本>/下,生成了已编译的脚本模块和运行该脚本模块所需的选项文件。通过网络将这些文件分配到客户端。
tar czPf cache-syscalltop-2.6.38.tar.gz\
/var/cache/systemtap/2.6.38/syscalltop.*/etc/systemtap/conf.d/syscalltop.conf
scp cache-syscalltop-2.6.38.tar.gz stap-client:~/
在客户端上,将通过下列方式将传递的文件解压缩到与已编译的服务器相同的位置,并安装完成。
tar xzf cache-syscalltop-2.6.38.tar.gz-C/
安装后可以按照下列方式运行并测试。
service systemtap start
Starting systemtap:Warning:no script file(/etc/systemtap/script.d/syscalltop.stp).Use compiled cache.
Starting syscalltop……done
[OK]
service systemtap status
syscalltop(1654)is running……
这样可以看出,可以使用已编写的缓存在客户端上执行追踪。如果将分配已编译脚本的工具包作为RPM包或deb包,保持其与内核的依存关系,使用数据包管理工具,管理起来就更加轻松。