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 report

  • sos 可以通过 --upload 选项直接向红帽上传一个数据归档,例如 sos report --upload

其他上传方法包括:

  • 要将 sos report 或其他文件附加到现有的支持问题单中,您可以使用 redhat-support-tool 命令行选项、Red Hat Portal 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

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

» 为什么 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-.noarch.rpm xz-.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 选项会提示用户输入其客户门户网站(Customer Portal)凭证:

# 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,并使用交互式提示。
    4.6.1-1 之前的 sos 版本可以使用以下选项:
  2. 使用 --upload-user--upload-pass 以在无需系统提示的情况下提供凭证信息。当在运行 sos report 时使用了 --batch 选项时,这个方法非常有用。但请注意,这会导致收集到的进程信息集合中可能会包括明文形式的密码,如 ps
  3. 使用 SOSUPLOADUSER 和/或 SOSUPLOADPASSWORD 环境变量。如果设置这这个环境变量,--upload 功能将不会要求用户输入凭证信息,这些环境变量的值也不会出现在存档中的任何集合中。

从 sos 版本 4.6.1-1 开始,将使用新的 Web 身份验证系统,用户必须通过一个 URL 进行身份验证并接收到一个用于授权上传的令牌。因此,选项 --upload-user--upload-pass 以及对等的环境变量已被弃用,sos 会忽略它们。

如果网络或防火墙被配置为不允许访问 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'
    
    
    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
    

Root Cause

Diagnostic Steps

  • 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