Linux 危机工具

当性能问题导致系统中断时,你一定不想浪费宝贵的时间去安装诊断所需的工具。以下是我建议在 Linux 服务器上默认安装的 “危机工具 “列表(如果尚未安装),以及它们的(Ubuntu)软件包名称:

Package Provides Notes
procps ps(1), vmstat(8), uptime(1), top(1) basic stats
util-linux dmesg(1), lsblk(1), lscpu(1) system log, device info
sysstat iostat(1), mpstat(1), pidstat(1), sar(1) device stats
iproute2 ip(8), ss(8), nstat(8), tc(8) preferred net tools
numactl numastat(8) NUMA stats
tcpdump tcpdump(8) Network sniffer
linux-tools-common
linux-tools-$(uname -r)
perf(1), turbostat(8) profiler and PMU stats
bpfcc-tools (bcc) opensnoop(8), execsnoop(8), runqlat(8), softirqs(8),
hardirqs(8), ext4slower(8), ext4dist(8), biotop(8),
biosnoop(8), biolatency(8), tcptop(8), tcplife(8),
trace(8), argdist(8), funccount(8), profile(8), etc.
canned eBPF tools[1]
bpftrace bpftrace, basic versions of opensnoop(8),
execsnoop(8), runqlat(8), biosnoop(8), etc.
eBPF scripting[1]
trace-cmd trace-cmd(1) Ftrace CLI
nicstat nicstat(1) net device stats
ethtool ethtool(8) net device info
tiptop tiptop(1) PMU/PMC top
cpuid cpuid(1) CPU details
msr-tools rdmsr(8), wrmsr(8) CPU digging

一些较长的说明:[1] bcc 和 bpftrace 有很多重叠的工具:bcc 的工具功能更强(例如 CLI 选项),而 bpftrace 的工具可以即时编辑。但这并不是说其中一个比另一个更好或更快:它们发出的 BPF 字节码是一样的,运行起来也一样快。还要注意的是,bcc 正在从 Python 向 libbpf C(带 CO-RE 和 BTF)演进和迁移工具,但我们还没有重新制作软件包。未来,”bpfcc-tools “应该会被更小的 “libbpf-tools “包取代,后者只是工具二进制文件。

此列表只是最低要求。有些服务器有加速器,你还需要安装它们的分析工具:例如,在英特尔 GPU 服务器上,需要安装 intel-gpu-tools 软件包;在英伟达服务器上,需要安装 nvidia-smi。调试工具(如 gdb(1))也可以预先安装,以便在危机时立即使用。

像这样的基本分析工具不会经常更换,因此这份列表可能只需要每隔几年更新一次。如果你认为我遗漏了当今重要的软件包,请告诉我(例如在评论中)。

添加这些软件包的主要缺点是它们在磁盘上的大小。在云实例上,向基本服务器镜像添加 Mbytes 会增加实例部署时间,甚至是几分之一秒。幸运的是,我列出的软件包大多很小(而且 bcc 也会越来越小),因此花费的大小和时间都很少。我曾见过因体积问题而无法在默认情况下包含 debuginfo(总计约 1 Gbyte)的情况。

我能不能在需要时再安装吗?

在生产环境出现危机期间尝试安装软件可能会出现许多问题。下面我将通过一个虚构的例子,结合我在实践中总结出的一些经验:

  • 下午 4:00:警报!你公司的网站瘫痪了。不,有人说还在运行。还在吗?正常,但速度太慢,无法使用。
  • 下午 4:01:您查看监控仪表板,发现一组后端服务器出现异常。是磁盘 I/O 高吗?是什么原因造成的?
  • 下午 4:02:您通过 SSH 连接到一台服务器以深入研究,但 SSH 登录需要很长时间。
  • 下午 4:03:出现登录提示,输入 “iostat -xz 1 “开始查看基本磁盘统计数据。停顿了很久,最后提示 “未找到命令’iostat’…请尝试:sudo apt install sysstat”。唉。鉴于系统运行速度很慢,安装这个软件包可能需要几分钟。运行安装命令。
  • 下午 4:07:软件包安装失败,因为无法解析软件源。/etc/apt 配置出了问题。由于服务器所有者现在正在 SRE 聊天室帮助处理故障,您问道:”你们是如何安装系统软件包的?他们回答:”我们从不安装。我们只更新应用程序。唉。你找到另一台服务器,将其正常运行的 /etc/apt 配置复制过来。
  • 下午 4:10:你需要先用固定配置运行 “apt-get update”,但速度慢得要命。
  • 下午 4:12:……真的要花这么长时间吗?
  • 下午 4:13: apt 返回 “失败:连接超时”。也许这个系统的性能问题太慢了?还是无法连接到 repos?你开始进行网络调试,并询问服务器团队:”你们用防火墙吗?”他们说不知道,要问网络安全团队。
  • 下午 4:17:网络安全团队回复:是的,他们已经阻止了任何意外流量,包括 HTTP/HTTPS/FTP 的出站 apt 请求。嘎嘎。”你能马上编辑规则吗?”没那么容易”那完全关闭防火墙呢?””紧急情况下,当然可以”
  • 下午 4:20:防火墙被禁用。你再次运行 apt-get update。虽然很慢,但还是成功了!然后运行 apt-get install,结果……权限错误。什么?我是 root,这根本没道理。你在 SRE 聊天室分享了你的错误,有人指出了你的错误:平台安全团队不是让系统不可变了吗?
  • 下午 4:24:平台安全团队现在在 SRE 聊天室解释说,文件系统的某些部分可以写入,但其他部分,尤其是可执行二进制文件,则被阻止。嘎嘎!”我们怎么才能禁用这个功能?”不行,这就是问题所在。你必须创建新的服务器镜像,并禁用它。”
  • 下午 4:27:此时,SRE 团队已宣布发生重大故障,并通知了执行团队,他们要求定期更新状态,并告知何时修复。状态:还没做什么。
  • 下午 4:30:你开始运行 “cat /proc/diskstats”,作为最基本的 iostat(1),但必须花时间阅读 Linux 源代码(admin-guide/iostats.rst)才能理解它。它只是确认磁盘是否繁忙,而你从监控仪表板上已经知道了这一点。你确实需要磁盘和文件系统跟踪工具,如 biosnoop(8),但你也无法安装它们。除非你也能黑进最基本的跟踪工具……你可以 “cd /sys/kernel/debug/tracing”,然后开始查找 FTrace 文档。
  • 下午 4:55:新的服务器镜像终于启动,所有文件系统均可写入。你登录后,”apt-get install sysstat”。你还没来得及运行 iostat,聊天室里就传来了消息:”网站已恢复!谢谢!你们做了什么?”我们重新启动了服务器,但还没有修复任何问题。你有一种感觉,今晚你睡着后 10 分钟,断电就会再次出现。
  • 凌晨 12:50:Ping!我就知道会这样。你从床上爬起来,打开工作用的笔记本电脑。网站瘫痪了–被黑客攻击了–有人禁用了防火墙和文件系统安全。

幸运的是,我没有经历过凌晨 12:50 的事件,但其他事件都是基于真实世界的经验。在我之前的工作中,这个顺序经常会发生变化:”流量团队 “可能会在 15 分钟左右启动云区域故障转移,因此我最终会安装 iostat,但随后这些系统就会闲置。

默认安装

上述情况说明了为什么理想情况下需要预先安装危机处理工具,以便在停机期间迅速开始调试生产问题。有些公司已经这样做了,他们的操作系统团队会创建包含所有内容的自定义服务器镜像。但有许多仍在运行默认 Linux 版本的网站在这方面学得很辛苦。我建议 Linux 发行版将这些危机处理工具添加到它们的企业 Linux 变体中,这样,无论公司大小,都能在发生性能中断时立即投入运行。

本文文字及图片出自 Linux Crisis Tools

你也许感兴趣的:

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注