🐧 Linux 🔧 系统工具

sos report – Linux 系统诊断的瑞士军刀

📅 发布于 2026年3月21日 | ⏱️ 阅读时间约 8 分钟
适用场景:系统故障排查、性能分析、系统基线记录、安全审计、远程技术支持

🔍 工具简介

sos report(原命令为 sosreport)是Linux系统管理的必备利器,自2009年诞生以来,已成为各大Linux发行版(包括Oracle Linux、RHEL、CentOS等)的标准诊断工具。

这个用Python编写的开源工具,能够在不修改系统配置的前提下,自动收集系统配置、日志文件、内核信息、网络状态、硬件信息等数十种关键数据,被誉为系统诊断领域的"瑞士军刀"。

核心价值:一次命令,完整收集所有诊断数据,避免反复沟通,大幅提升故障排查效率。

📦 安装方法

发行版 安装命令
Oracle Linux 6 / 7 sudo yum install sos
Oracle Linux 8 / 9 sudo dnf install sos

⚙️ 最佳实践命令

为确保收集完整数据,推荐使用以下命令(根据系统版本选择):

Oracle Linux 6 / 7

sudo sosreport --batch --all-logs -k sar.all_sar=on

Oracle Linux 8

sudo sos report --batch --all-logs -k sar.all-sar=on

Oracle Linux 9

sudo sos report --batch --all-logs -e sar -k sar.all-sar=on

参数说明

  • --batch:非交互模式,跳过姓名和工单号输入
  • --all-logs:收集 /var/log 下所有日志文件(完整版本,非截断)
  • -k sar.all_sar=on:收集所有sar历史数据(默认仅最近14天)
  • -e sar:在OL9中启用sar插件(默认禁用)
重要提示:务必使用 --all-logs 参数,否则关键日志可能被截断,导致信息不完整。

🔎 查看可用插件

sudo sos report -l

可以通过 -e 插件名 启用特定插件,或通过 -n 插件名 禁用特定插件。

📂 输出文件结构

sos report 默认将输出文件生成在 /var/tmp(OL6为 /tmp),包含:

  • 压缩包(如 sosreport-hostname-20260321-xxxxx.tar.xz):诊断数据归档文件
  • 校验文件.sha256):用于验证文件完整性

解压后的目录结构示例

sosreport-hostname-20260321-xxxxx/
├── 符号链接(如cmdline, dmidecode, free, hostname等)
├── boot/          # 内核和引导相关文件
├── etc/           # 系统配置文件
├── proc/          # 内核运行时信息
├── sos_commands/  # 各插件收集的命令输出
├── var/log/       # 系统日志
└── installed-rpms # 已安装RPM包列表(含安装时间)

关键文件说明

  • installed-rpms:已安装软件包列表,包含安装时间,便于追踪变更
  • var/log/messages:系统主日志文件
  • sos_commands/:各插件收集的命令输出,包括网络、存储、系统服务等

🎯 最佳实践

1. 时机选择

  • 故障发生后立即运行:系统崩溃后重启时,第一时间收集数据
  • 变更前记录基线:系统升级、配置调整前,先运行sos report保存快照
  • 定期收集:用于性能趋势分析,建议每周或每月收集一次

2. 启用 sar 历史数据

确保已安装并启用 sysstat,以收集完整的历史性能数据:

# 安装 sysstat
sudo dnf install sysstat

# 启用并启动 sysstat
sudo systemctl enable --now sysstat
收益:sar 提供CPU、内存、磁盘IO、网络等历史性能数据,是故障复盘的关键依据。

3. 故障排查示例

通过 sos report 快速定位问题,例如网卡链路中断:

# 1. 检查日志中的链路中断
grep -i "link down" var/log/messages

# 2. 确认硬件信息
grep "PCI地址" lspci

# 3. 验证多路径状态
grep multipathd var/log/messages

4. 数据脱敏(Obfuscation)

如需隐藏敏感信息(主机名、IP、用户名等),可进行脱敏处理:

Oracle Linux 7(事后脱敏)

# 安装 soscleaner
sudo yum install soscleaner

# 脱敏处理
sudo soscleaner sosreport-xxx.tar.xz

Oracle Linux 8 / 9

# 事后脱敏
sudo sos clean --batch --keywords 敏感词 sosreport-xxx.tar.xz

# 收集时脱敏
sudo sos report --clean --batch --keywords 敏感词 ...
注意事项:脱敏后需自行维护原始值与脱敏值的映射关系,否则可能增加排查难度。建议仅在必要时使用。

5. 配置文件预设

通过 /etc/sos/sos.conf 预设参数,避免重复输入命令:

[global]
batch = yes

[report]
enable-plugins = sar
all-logs = yes

[clean]
keywords = 敏感词

[plugin_options]
sar.all_sar=on
收益:团队统一配置,减少人为失误,提升标准化水平。

⚠️ 注意事项

  • 保持工具更新:定期通过包管理器更新sos到最新版本,以获得最新插件和修复
  • 空间检查:运行前确保 /var/tmp 有足够空间(通常需要几百MB到几GB)
  • 权限要求:必须以 root 用户运行,否则无法收集系统级信息
  • 时间影响:收集过程可能需要几分钟到几十分钟,建议在业务低峰期运行

📊 实战案例

案例1:服务器突然宕机

场景:生产服务器莫名重启,需要排查原因

步骤:

  1. 重启后立即运行 sos report --batch --all-logs -k sar.all_sar=on
  2. 检查 var/log/messages 中的内核崩溃日志
  3. 查看 sos_commands/kernel 中的内核参数和模块信息
  4. 对比 sar 数据,分析宕机前的资源使用情况

案例2:性能突降排查

场景:应用响应时间突然变慢

步骤:

  1. 运行 sos report 收集当前状态
  2. 查看 sar 数据,对比性能变化前后的CPU、内存、磁盘IO、网络
  3. 检查 sos_commands/networking 中的网络连接和路由信息
  4. 分析 sos_commands/process 中的进程状态

🚀 进阶技巧

自定义插件

如果标准插件无法满足需求,可以编写自定义插件:

# 自定义插件目录
/etc/sos/sos.d/

# 插件模板
class CustomPlugin(Plugin):
    name = "custom"
    profiles = ("system",)

    def setup(self):
        self.add_copy_spec("/path/to/custom/config")
        self.add_cmd_output("custom_command")
        return True

批量收集

通过Ansible或Shell脚本,批量在多台服务器上运行sos report:

#!/bin/bash
for host in $(cat hosts.txt); do
    ssh root@$host "sos report --batch --all-logs -k sar.all_sar=on"
    scp root@$host:/var/tmp/sosreport-*.tar.xz /data/sos-reports/
done

📚 相关资源

💡 总结

sos report 是Linux系统管理员的必备工具,能够在最短时间内收集最全面的诊断数据,减少故障排查时的反复沟通成本。

核心建议:

  1. 熟练掌握标准命令参数(--batch --all-logs -k sar.all_sar=on
  2. 配置 /etc/sos/sos.conf 预设参数
  3. 启用 sysstat 收集历史性能数据
  4. 定期收集用于基线对比和趋势分析
一劳永逸:将 sos report 纳入故障处理流程和运维规范,建立标准化的诊断数据收集机制。