Red Hat Training

A Red Hat training course is available for RHEL 8

第 35 章 交叉检测 SystemTap

交叉检测 SystemTap 正在从一个系统上使用的 SystemTap 脚本创建 SystemTap 检测模块,脚本可在未完全部署 SystemTap 的另一个系统上使用。

35.1. SystemTap 交叉检测

运行 SystemTap 脚本时,从该脚本中构建一个内核模块。然后,SystemTap 将模块加载到内核中。

通常,SystemTap 脚本只能在部署 SystemTap 的系统上运行。要在十个系统上运行 SystemTap,需要在所有这些系统上部署 SystemTap。在某些情况下,这可能无法实现,也不需要。例如,企业策略可能会阻止您在特定计算机上安装提供编译器或调试信息的软件包,这将阻止 SystemTap 部署。

要临时解决这个问题,请使用交叉检测。交叉检测是从一个系统上要使用的 SystemTap 脚本生成 SystemTap 检测模块的过程。这个过程提供以下优点:

  • 可以将各种计算机的内核信息包安装到单一主机计算机上。
小心

内核打包错误可能会阻止此操作。在这种情况下,主机系统 和目标系统的 kernel-debuginfokernel-devel 软件包必须匹配。如果发生了这种情况,请向 https://bugzilla.redhat.com/ 报告这个错误。

  • 每一目标计算机只需要安装一个软件包即可使用生成的 SystemTap 检测模块: systemtap-runtime
重要

主机系统必须架构相同 ,并且运行与目标系统相同的 Linux 发行版,以便构建的检测模块正常工作

术语
检测模块
从 SystemTap 脚本构建的内核模块;SystemTap 模块构建在主机系统上 ,并将加载到目标系统的目标内核中
主机系统
编译检测模块的系统(来自 SystemTap 脚本),以加载到目标系统上
目标系统
正在构建检测模块的系统 (从 SystemTap 脚本)。
目标内核
目标系统的内核这是加载并运行检测模块的内核

35.2. 初始化 SystemTap 的交叉检测

初始化对 SystemTap 的交叉检测,从一个系统上的 SystemTap 脚本构建 SystemTap 检测模块,并在未完全部署 SystemTap 的另一系统上使用这些模块。

先决条件

小心

内核打包程序错误可能会阻止在一个系统中安装多个 kernel-debuginfokernel-devel 软件包。在这种情况下,主机系统 和目标系统的次要版本必须匹配。如果发生了这种情况,请向 https://bugzilla.redhat.com/ 报告这个错误。

流程

  1. 确定在每个目标系统中运行的内核

    $ uname -r

    对每个目标系统重复此步骤

  2. 在主机系统上,使用安装 Systemtap 的方法为每个目标系统安装 目标 内核和相关软件包
  3. 在主机系统中构建检测模块,将此模块复制到 目标系统中并在目标系统上运行此模块

    1. 使用远程实现:

      # stap --remote target_system script

      此命令在目标系统上远程实施指定的脚本您必须确保可以从主机系统到 目标系统进行 SSH 连接,才能成功。

    2. 手动:

      1. 在主机系统中构建检测模块

        # stap -r kernel_version script -m module_name -p 4

        在这里,kernel_version 是指在第 1 步中确定的目标内核版本脚本引用要转换为检测 模块的脚本,而 module_name 是检测模块的所需名称-p4 选项告诉 SystemTap 不加载并运行编译的模块。

      2. 编译检测模块后,将其复制到目标系统中并使用以下命令载入它:

        # staprun module_name.ko