Translated message

A translation of this page exists in English.

什么是 sos 报告以及如何在 Red Hat Enterprise Linux 中创建它?

Solution Verified - Updated -

Environment

  • Red Hat Enterprise Linux (RHEL) 4.6+, 5, 6, 7, 8, 9

Issue

Resolution

内容表


sos 报告(sos report)是什么,它与 sosreport 有何不同?

RHEL 8+ 中的 sos report 等同于 RHEL7 及更早版本中的 sosreport 命令。因此,sos report 与 sosreport 本质上是相同的,只是在 sos 软件包中使用的不同命令语法。

  • 在 RHEL 7 及更早的版本中,安装的软件包名称是 sos,从系统中获取数据的命令是 sosreport
  • 从 RHEL 8+ 开始,命令名称被改为只需要 sos 及可选参数 report 来执行与旧的 sos 软件包中 sosreport 同样的数据收集活动。
  • 本文档中的约定是通常使用 sos report 的新语法,除非它特别引用了一个使用了旧的 sosreport 语法的命令示例。
  • sosreport 的命令语法适用于所有内核版本,但在 RHEL 8+ 内核中被弃用,并将导致一个 "Redirecting to sos report" 警告输出。

sos report 命令是一个从 Red Hat Enterprise Linux 系统收集配置详情、系统信息和诊断信息的工具。例如:运行的内核版本、载入的模块和服务配置文件。它还会运行外部程序来收集更多信息,并将输出存储在生成的存档中。

» 为什么我被要求提供 sos 报告?

在对 Red Hat Enterprise Linux 系统的服务请求进行初始分析时,红帽支持工程师通常会从分析 sos report 命令输出的数据开始。

该工具提供了一种标准化的方法来收集诊断信息,红帽支持工程师在分析支持问题单中报告的问题时需要参考这些信息。

使用 sos report 可以帮助避免要求您不断提供相关的数据。


如何生成 sos 报告?

sos 软件包被安装后,运行以下命令来运行 sos 报告。第一个命令确保安装了最新的软件包,以便执行最新的数据收集程序。

# yum update sos
# sosreport
注意 从 RHEL 8 开始,sosreport 命令已弃用,使用 sos report 替代。如果在 RHEL 8 或 9 系统中发出了 sosreport ,且执行了 "Redirecting to 'sos report'" ,则会输出一条具有此效果的消息。
注意 在 RHEL8+ 中,将上述命令名称改为 sos report,并在 sos 和 report 之间添加空间,以避免 "Redirecting to sos report" 相关的消息。
注意 sos report 命令需要 root 权限才能正确收集数据。当前还没有一种机制可以允许使用非 root 身份运行 sos report

在 Red Hat Enterprise Linux 6 中,命令通常会在几分钟内完成。旧版本可能需要更长的时间来完成。根据具体的本地配置以及在某些情况下指定的选项,命令可能需要更长时间才能完成。如果您对 sos report 命令的运行时间有疑问,请联络您的红帽支持代表。

完成后,sos report 将在 /tmp 下(对于 RHEL6 及更早版本)或 /var/tmp 下(对于 RHEL7 及更新版本)产生一个压缩文件。您需要向红帽的技术支持人员提供这个文件(通常在创建问题单时作为附件提交)。

» 运行 sos report 时导致出现 "no valid plugins were enabled" 信息

  • 通常,"no valid plugins" 信息会在没有 root 权限的情况下运行 sos report 命令时出现。sos report 命令需要 root 权限才能从系统中正确收集数据。它所运行的、用于收集信息的多个文件、命令和工具都需要 root 访问权限。例如,如果系统上配置了多路径,sos report 会在当前配置设置的 multipath 子系统中收集信息,这无法以普通用户身份执行。

    $ multipathd -k"show config"
    need to be root
  • 请以 root 用户身份再次运行,如果您仍然遇到问题,请创建一个支持问题单,以便我们可以进行调查。*

» 运行 sos report 时数据占满了我的可用磁盘空间

  • 归档的大小因系统配置以及启用的可选 sos report 功能而异。例如,--all-logs大大 增加存档的大小,因为它删除了命令输出和日志文件集合的大小限制功能。

  • 如果 /tmp//var/tmp 太小而无法保存 sos 报告存档,请使用 --tmp-dir 选项指定一个具有足够可用空间的替代位置。

» 如何向红帽提供 sos 报告

其他上传方法包括:

  • 要将 sos 报告 或任何其他文件发布到现有支持问题单中,您可以使用 redhat-support-tool 命令行选项、红帽门户网站 UI 或几个使用 FTP 的不同方法。
  • 如果收集的 sos report 文件太大,则可能会将其上传到 Red Hat Secure FTP
    • 如果您使用了 ftp 选项,请更新相关的支持问题单来包括正确的文件名。这是支持工程师唯一可以检索到它的方法。

» 我还没有问题单号,我需要有问题单号才可以运行 sos report 吗?

  • 问题单号是可选的,如果提供了问题单号,它将成为存档文件名的一部分。省略问题单号不会影响 sos report 命令的运行。

  • 此外,可以使用 --batch 选项以批处理模式运行命令,以避免以交互方式输入用户和帐户信息。


如何控制 sos report 命令的运行方式?

sos report 命令具有一个插件结构,允许用户通过在命令行指定插件选项来启用和禁用特定的插件。运行以下命令可以列出可用的插件及其选项:

# sosreport -l

» 如何禁用或启用特定的插件?

用户可以分别使用 -e/--enable-plugins-n/--skip-plugins 选项来有选择地启用或禁用插件。这些选项可以是以逗号分隔的插件名称列表形式,也可以多次单独指定。例如,要禁用 amdkvm 插件,请使用:

# sosreport -n kvm,amd

» 如何使用插件选项?

独立插件可以通过 -k 选项指定其额外的选项。这些选项的列出方式与列出可用插件的方式相同 (sosreport -l)。这个选项的格式是 plugin_name.option_name=value。例如,要启用容器日志的集合:

# sosreport -k podman.logs=on

选项将指定它们是否通过布尔值切换,还是使用字符串或整数。对于用于切换的布尔值,用户可以使用 True, on, 或 yesFalse, off, 或 no

» 为什么 sos report 有时跳过收集某些命令的输出?

在 sos report 的执行过程中,可能会向控制台输出类似以下的信息:

[plugin:networking] skipped command 'nft list ruleset': required kernel modules or services not present (kmods=[nf_tables] services=[]).

sos report 旨在不以任何方式对运行它的系统进行改变。某些插件调用的一些命令可能会自动触发对系统的改变(例如在上例中载入内核模块),因此默认被禁止。如果您的环境可以接受这些更改,并且您希望使用 sos report 收集相关的数据,请按以下方式运行 sos report

# sos report --allow-system-changes

» *在系统上运行 sos report 使用太多 CPU 时间或内存»* (sos 版本 3.6 或更高版本支持)

默认情况下,sos report 会最多并行运行 4 个插件,以减少总运行时。根据运行的具体插件,这可以会在特定系统上导致内存争用或高 CPU 使用量的情况(特别是,当每个插件都收集日志输出时)。要减少同时收集的数量,请使用 --threads 选项。例如,一次只运行一个插件,请使用:

# sosreport --threads=1

安装 sos 软件包

在安装了 sos 软件包后才能运行 sos report 命令。您可以使用以下命令检查是否安装了 sos 软件包,以及安装是否存在问题:

# rpm -qa | grep sos
sos-3.2-35.el7_2.3.noarch << sos package is installed
# rpm -V sos << run verification on installed package

» Red Hat Enterprise Linux 5 及更高版本

如果系统使用 RHSM 进行了注册,使用 yum 命令:

# yum install sos

如果系统没有通过 RHSM 注册,可以从 RHN 网站下载 sos 软件包,或者在安装 CD 或者 DVD 中找到它。rpm 命令可用于在任何 Red Hat Enterprise Linux 版本上安装软件包:

# rpm -Uvh sos-<version>.noarch.rpm

(注:上面的 rpm 命令可能表明有失败的依赖项。  如果是,那么请在同一命令行中包含缺少的 RPM 文件。  例如,如果需要 xz RPM,那么运行:rpm -Uvh sos-<version>.noarch.rpm xz-<version>.x86_64.rpm

sos 软件包更新

sos report 命令会持续更新以包括对重要的程序错误修复的数据收集,确保支持工程师获得所需的信息。没有使用最新的 sos report 命令可能会延缓支持工程师对问题的检查进度,并且通常需要向用户要求提供其他辅助信息,或要求用户重新运行 sos report 命令。确保安装了最新的 sos 软件包可防止这些问题

# yum update sos

» Red Hat Enterprise Linux 4 Update 6 及更新的 4.x 内核

如果系统使用 Red Hat Subscription Manager (RHSM) 注册,可以使用 up2date 命令安装 sos

# up2date sos

如何自动将 sos 报告上传到红帽支持?

sos-3.9 及之后的版本开始,sos 支持 --upload 选项,以在生成存档后自动上传存档。请注意,存档的本地副本仍然存在。这个选项需要使用 python3-requests 软件包,该软件包被定义为 sos rpm 的弱依赖项。对于被配置为无需解决弱依赖项,或没有启用 AppStream 存储库的系统,需要手动安装此软件包。

当在 Red Hat Enterprise Linux 系统中运行时,使用 --upload 选项会提示用户输入其客户门户网站凭证:

# sos report --upload

sosreport (version 4.2)

[...]

Please enter the case id that you are generating this report for []: 123456
Enter your Red Hat Customer Portal username (empty to use public dropbox): your-username
Please provide the upload password for your-username:

[...]

Your sosreport has been generated and saved in:
/var/tmp/sosreport-myhost-123456-2022-08-11-sgczqyo.tar.xz

Attempting upload to Red Hat Customer Portal
Uploaded archive successfully

通过提供一个问题单号和登录凭证登陆凭证用于访问指定的问题单,sos 会在运行完成后将生成的存档直接上传到相应的问题单中。如果其中的任一信息没有提供或不正确(例如,提供的凭证单号和凭证不匹配),则 sos 会将存档上传到红帽的安全 FTP 服务器:

# sos report --upload

sosreport (version 4.2)

[...]

Please enter the case id that you are generating this report for []: 123456
Enter your Red Hat Customer Portal username (empty to use public dropbox): incorrect-user
Please provide the upload password for your-username:

[...]

Your sosreport has been generated and saved in:
/var/tmp/sosreport-myhost-123456-2022-08-11-hyrtzji.tar.xz

Attempting upload to Red Hat Customer Portal
Upload to Red Hat Customer Portal failed. Trying sftp://sftp.access.redhat.com
Attempting upload to Red Hat Secure FTP
Unable to retrieve Red Hat auth token using provided credentials. Will try anonymous.
User 'xAnrDdnP'used for anonymous upload. Please inform your support engineer so they may retrieve the data.
Uploaded archive successfully

备注:在以上支持问题单中,匿名用户是一个不能重复使用的临时用户,必须 提供给红帽支持工程师,以便支持工程师能够检索并检查存档。

以下是提供 --upload 凭证的方法:

  1. 如上所示,使用 --upload,并使用交互式提示
  2. 使用 --upload-user--upload-pass 在没有提示的情况下提供凭证。当使用 --batch 来避免以交互的方式运行 sos report 时,这个可能会有用。但请注意,这会导致收集到的进程信息集合中可能会包括明文形式的密码,如 ps
  3. 使用 SOSUPLOADUSER 和/或 SOSUPLOADPASSWORD 环境变量。如果设置了这个环境变量,--upload 功能将不会要求用户输入凭证信息,这些环境变量的值也不会出现在存档中的任何集合中。

如果网络或防火墙被配置为不允许访问 api.access.redhat.com (用于直接上传到问题单) 或 sftp.access.redhat.com (用于 SFTP (fallback) 上传),则上传将失败。

如何在旧的 RHEL 版本中运行较新的 sos 版本?

如果您的 RHEL 系统是一个锁定的版本(如 EUS),则最新的 sos 软件包可能无法在旧的仓库中提供。另外,因为各种不同的原因,对 sos 的最近更新可能并不总会被后向移植到旧的 RHEL 版本中。但是,用户可以使用 support-tools 容器镜像,在任何 RHEL 版本中使用最新的 sos 软件包。

这个容器镜像会被持续维护和更新以包括最新的 sos 软件包,它可以通过egistry.redhat.io 容器镜像 registry 获得。

为了使用由 support-tools 容器提供的 sos 来收集主机一级的信息,需要使用特点的方式来部署镜像。简单地在一个不同的容器中安装 sos 软件包将会导致收集容器内部的信息,这通常没有什么实际用处。要从容器镜像内收集主机一级的数据集合,需要使用 RUN 标签来实现,按照以下方法使用这个标签部署镜像:

# podman container runlabel RUN registry.redhat.io/rhel8/support-tools

--- You will now be attached to a root shell inside the container ---

# sos report

sos report 完成后,它将显示存档的位置为 /host/var/tmp/。在使用上述 podman 命令部署时,容器会将主机的 / 文件系统挂载到 /host - 因此即使容器退出,tarball 仍会存在于主机的 /var/tmp (正常位置)中。


在 sos report 挂起时该如何处理

首先,验证 /tmp (RHEL 6)或 /var/tmp (RHEL7 及更高版本)中是否有足够的可用空间,如果没有,请使用 之前详述的 --tmp-dir 选项。

如果 sos report 在特定的插件上挂起/停滞(当前运行的插件会在执行过程中显示),请尝试使用之前详述的 -n/--skip-plugins 选项运行具有禁用了问题插件的 sos report

请注意,每个插件都有一个默认的 5 分钟超时时间(可通过 timeout 插件选项进行控制)请等待达到这个超时时间,sos report 会在达到超时时间时自动终止该插件的执行。如果在达到超时时间时没有终止插件,请使用上面提到的选项。

如果因为任何原因 sos report 无法完成,请参阅sos report 进程挂起时,如何从 Red Hat Enterprise Linux 系统收集数据?

我无法运行 sos report,希望收集要提供的最少数据

请参阅 sos 报告失败。我应该提供什么数据? 使用一个替代的裸机数据收集脚本。

为 Red Hat Enterprise Linux 支持问题单收集 sos 报告数据的额外的、替代的步骤文章中包括了因特定原因导致 sos report 失败时可以进行的操作信息

一个特定的 sos report 插件会在后台运行什么命令

您可以通过以下方法,使用 sos report 命令来了解一个特定插件在执行时会进行什么操作。

  • 检查提供 sos report 命令的 sos 软件包的源代码。
    有关源代码的具体版本,请参阅 客户门户网站中的下载部分

  • 检查 sos 报告中的 sos.log 文件。例如,对于插件 scsi,其内容类似如下

    -- directories and files collected --

    2020-07-30 11:04:53,632 INFO: [plugin:scsi] collecting path '/sys/bus/scsi'
    2020-07-30 11:04:53,656 INFO: [plugin:scsi] collecting path '/sys/class/scsi_disk'
    2020-07-30 11:04:53,663 INFO: [plugin:scsi] collecting path '/proc/scsi'
    2020-07-30 11:04:53,666 INFO: [plugin:scsi] collecting path '/sys/class/scsi_generic'
    2020-07-30 11:04:53,675 INFO: [plugin:scsi] collecting path '/sys/class/scsi_host'
    2020-07-30 11:04:53,677 INFO: [plugin:scsi] collecting path '/sys/class/scsi_device'

    -- these were the commands executed in the background --

    2020-07-30 11:04:53,686 INFO: [plugin:scsi] collecting output of 'lsscsi -i'
    2020-07-30 11:04:53,710 INFO: [plugin:scsi] collecting output of 'sg_map -x'
    2020-07-30 11:04:53,765 INFO: [plugin:scsi] collecting output of 'udevadm info -a /sys/class/scsi_host/host3'
    2020-07-30 11:04:53,789 INFO: [plugin:scsi] collecting output of 'udevadm info -a /sys/class/scsi_host/host1'
  • 只使用特定插件生成 sos report 报告 ,并检查收集的档案中的文件和目录,以及命令的输出。
    要使用特定插件生成 sos 报告,请执行以下操作

    # sosreport -o plugin-name
  • 要查看插件列表,请执行以下操作

    # sosreport -l
  • Component
  • sos

This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.

Comments