sos report – Linux 系统诊断的瑞士军刀
适用场景:系统故障排查、性能分析、系统基线记录、安全审计、远程技术支持
🔍 工具简介
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:服务器突然宕机
场景:生产服务器莫名重启,需要排查原因
步骤:
- 重启后立即运行
sos report --batch --all-logs -k sar.all_sar=on - 检查
var/log/messages中的内核崩溃日志 - 查看
sos_commands/kernel中的内核参数和模块信息 - 对比 sar 数据,分析宕机前的资源使用情况
案例2:性能突降排查
场景:应用响应时间突然变慢
步骤:
- 运行 sos report 收集当前状态
- 查看 sar 数据,对比性能变化前后的CPU、内存、磁盘IO、网络
- 检查
sos_commands/networking中的网络连接和路由信息 - 分析
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系统管理员的必备工具,能够在最短时间内收集最全面的诊断数据,减少故障排查时的反复沟通成本。
核心建议:
- 熟练掌握标准命令参数(
--batch --all-logs -k sar.all_sar=on) - 配置
/etc/sos/sos.conf预设参数 - 启用 sysstat 收集历史性能数据
- 定期收集用于基线对比和趋势分析
一劳永逸:将 sos report 纳入故障处理流程和运维规范,建立标准化的诊断数据收集机制。