在这篇文章中,我们将介绍如下:一个用于现代Linux系统的Apache2.0许可的资源监视器。下面可以让您重放以前记录的数据。后台内核的主要职责之一是调度对资源的访问。有时这可能意味着分配物理内存,以便多个进程可以共享同一台主机。其他时候它可能意味着确保CPU时间的公平分配。在这些场景中,内核提供机制并将策略留给“其他人”。如今,“其他”通常是像systemd或dockerd这样的运行时。运行时从调度程序或最终用户那里获取输入(比如要运行什么以及如何运行它)并转动正确的旋钮并拉动核心上的正确杠杆以使工作负载正常运行。在一个完美的世界里,故事会到此结束。然而,现实情况是,资源管理是一种复杂且相当不透明的技术混合体,计算技术已经发展了数十年。对于其中一些技术的所有陷阱和死胡同,最终结果是容器工作得更好。虽然用户通常不需要关心这些细节,但对于基础设施运营商来说,了解他们的技术架构至关重要。可见性和可调试性对于检测和调查错误配置、问题和系统故障至关重要。使事情变得更加复杂的是,资源中断通常难以重现。通常需要等待数周才能让问题重新出现,以便调查其根本原因。扩展进一步加剧了这个问题:我们无法在每台主机上运行自定义脚本并希望在错误再次出现时记录关键状态的片段。因此,需要更复杂的工具。这出现在下面。动机从历史上看,Facebook一直是atop的忠实用户。atop是Linux的性能监视器,它报告所有进程的活动以及各种系统级活动。与htop等工具相比,atop最引人注目的功能之一是能够将历史数据记录为守护进程。这听起来像是一个简单的功能,但实际上这使得调试无数生产问题成为可能。如果数据保留时间足够长,则可以及时返回以查看主机在问题或故障发生之前、期间和之后的状态。不幸的是,随着时间的推移,人们发现atop存在某些缺陷。首先,控制组cgroups已经成为Linux机器上控制和监视资源的实际方式。atop仍然缺乏对这个基本构建块的支持。其次,atop使用自定义增量压缩方法将数据存储在磁盘上。这在正常情况下工作正常,但在资源压力很大的情况下,主机可能会丢失数据点。由于使用增量压缩,在数据最重要的时间段内可能会丢失大面积数据。第三,用户体验具有陡峭的学习曲线。我们经常听到有经验的atop用户说他们喜欢密集的布局和众多的按键绑定。然而,这也是一把双刃剑。当刚接触该领域的人想要调试生产问题时,他们现在同时处理两个问题:手头的问题和如何使用atop。以下内容由Facebook的资源控制团队设计和开发,并得到atop生产环境用户的支持。顾名思义,资源控制团队负责大规模的资源管理。该团队由内核开发人员、容器运行时开发人员和硬件人员组成。认识到下一代系统监视器的机会,我们在设计下方时牢记以下几点:易用性:下方必须为新用户提供直观的体验,并为日常用户提供强大的功能。*有意义的统计数据:下面显示了准确有用的统计数据。即使可以,我们也会尽量避免收集和转储统计数据。灵活性:当默认设置不合适时,我们允许用户自定义他们的体验。示例包括可配置的键绑定、可配置的默认视图和脚本界面(默认为最终用户界面)。安装包:#dnfinstall-ybelow开启录音守护进程:#systemctlenable--nowbelow下面快速介绍最常用的模式是replay模式。顾名思义,回放模式会回放以前记录的数据。假设你已经启动了录音守护进程,通过运行以下命令启动一个会话:$belowreplay--time"5minutesago"你会看到控制组视图:如果你不知道该做什么,或者忘记了一个密钥,按?进入帮助菜单。屏幕顶部是状态栏。状态栏显示有关当前样本的信息。您可以分别按t和T向前和向后移动样本。中间部分是系统概述。系统概览包含有关整个系统的统计信息,这些信息通常很有用。第三部分和底部部分是多用途视图。上图显示了控制组视图。此外,还有进程和系统视图,分别通过按p和s访问。按↑和↓在列表选择中移动。按Enter折叠和展开控制组。假设您找到一个感兴趣的控制组,并且您想要查看其中正在运行哪些进程。要放大进度视图,请选择控制组并按z:再次按z返回控制组视图。这个视图有时会有点长。如果您对要查找的内容有一个模糊的想法,您可以通过按/并输入过滤器来过滤控制组名称。此时,您可能已经注意到我们尚未探索的标记系统。要前后循环选项卡,请分别按Tab和Shift+Tab。我们把这个问题留给读者作为练习。其他功能在引擎盖下,下面有一个健壮的设计和架构。Facebook不断升级到更新的内核,因此我们从不假设数据源可用。这种默认假设可以在内核和以下版本之间实现完全的向前和向后兼容性。此外,每个数据点都使用zstd压缩并完整存储。这修复了我们在大规模atop中看到的增量压缩问题。根据我们的测试,我们的每个样本压缩可以达到平均5倍的压缩率。下面还使用[eBPF][8]来收集有关临时进程(生命周期短于数据收集间隔的进程)的信息。相比之下,atop使用BSD进程记帐实现此功能,这是一种众所周知的缓慢且容易发生优先级切换的内核接口。对于用户,下面还支持实时模式和转储接口。实时模式将录制守护进程和TUI会话合并为一个进程。这对于浏览系统状态很方便,而无需提交长时间运行的守护进程或磁盘空间来存储数据。转储接口是所有以下数据存储的可编写脚本的接口。转储功能强大且灵活,提供CSV、JSON和人类可读格式的详细数据。下面的总结是一个Apache2.0许可的开源项目,我们(下面的开发人员)相信它比资源监控领域的现有工具具有令人信服的优势。我们已经付出很多努力来准备下面的开源使用,所以我们希望读者和社区有机会尝试下面的内容,并报告错误和功能请求。
