eBPF 用于高级 Linux 基础设施监控

eBPF for Advanced Linux Infrastructure Monitoring

自疫情爆发以来,我们大部分时间都在家中度过,至今已过去一年。对于开发人员、系统管理员以及整个 IT 团队而言,这是一段充满挑战的时期,他们开始努力应对系统和基础设施中涌入的数据的监控和故障排除任务,因为世界被迫转向线上。为了正确地完成工作,像 Linux 这样的免费开源技术变得越来越有吸引力,尤其是在负责维护不断增长和复杂环境的运维专业人员和系统管理员中。工程师们也越来越多地使用开源技术,这主要是因为它们提供的灵活性和开放性,而不是商业产品所附带的高成本定价和严格的功能锁定。

一种新兴技术——eBPF——已在多个项目中崭露头角,包括商业和开源产品。在进一步讨论围绕 eBPF 的社区及其在疫情期间的增长之前,重要的是要了解它是什么以及如何被利用。eBPF,或扩展的伯克利包过滤器,最初在 1992 年由劳伦斯伯克利实验室的研究人员在一篇论文中作为一种基于规则的机制引入,用于过滤和捕获网络数据包。过滤器将实现在基于寄存器的虚拟机(VM)内部运行,虚拟机本身将存在于 Linux 内核内部。经过几年的沉寂,BPF 扩展为 eBPF,具有完整的虚拟机,可以在 Linux 内核内部运行小型程序。由于这些程序在内核内部运行,因此可以将它们附加到特定的代码路径,并在遍历该路径时执行,这使得它们非常适合创建用于数据包过滤以及性能分析和监控的应用程序。

最初,创建 eBPF 程序并不容易,因为程序员需要了解一种极其底层的语言。然而,围绕这项技术的社区通过创建工具和库来简化和加速在内核内部开发和加载 eBPF 程序的过程,从而得到了显著发展。这对于创建大量工具至关重要,这些工具可以将系统和应用程序活动跟踪到非常精细的级别。下面的图片展示了这一点,显示了大量用于跟踪 Linux 堆栈各个部分的工具。

在今天的现实中,用户使用相对高级的语言(例如 C 语言)编写程序,并使用 Linux BCC 等工具将程序编译成可以加载到内核中的形式。非常有趣的是,虽然 eBPF 程序本身是用 C 语言的一种形式编写的,但在 Python 和 Golang 等其他语言中也有加载器,eBPF 程序实际上可以相当容易地集成到您的项目中,当然,前提是运行该程序的 Linux 内核支持 eBPF。

eBPF for Advanced Linux Infrastructure Monitoring Structure

新用户只需花费很少的时间即可进入 eBPF 生态系统,并识别出可以极大地提高他们启动高度精细的实时基础设施监控程序效率的工具。ebpf.io 提供了一篇很棒的入门文章,其中涵盖了 eBPF 堆栈使用的高级技术和工具。它还提到了现有的工具和开发工具链,以便用户可以继续并在自己的机器上进行测试。此外,此入门页面还为希望深入研究的工程师提供了大量其他资源的链接。在我自己的研究中,我发现了一个非常棒的 GitHub 存储库,它非常具有启发性:awesome-ebpf

凭借其对开发者社区的影响,市场上也涌现出许多非常创新的商业产品,尤其是在网络和安全领域。随着 Kubernetes 作为事实上的部署策略的普及,eBPF 已被证明是理解这些详细拓扑产生的通常复杂且晦涩的网络相关问题的强大盟友。Cilium 是一家在该领域开拓的公司,另一家是 Netdata,它提供开箱即用的 eBPF 驱动的基础设施监控。尽管对开源或商业产品有偏好,但相对年轻的 eBPF 社区正在发展壮大,并吸引了许多专业人士聚集在一起,分享和开发行业范围内的最佳实践。

这对 eBPF 来说是个好消息,表明越来越多的工程师和系统管理员开始接触它,了解它的价值,然后在他们的开源项目或组织的 инфраструктура 监控功能中使用它。eBPF 这种自下而上的采用方法是其持续创新和发展的关键。

这场“迷你革命”可能在疫情的喧嚣中被淹没,但可以肯定地说,一个开源项目再次走到前台,而 Linux 顺理成章地成为任何有开源想法的供应商的基石。此外,今天的云原生环境加剧了一个日益严重的问题——随着数据爆炸式增长,基础设施复杂性也在增加。为了应对这种复杂性,像 eBPF 这样的技术将被证明是有价值的盟友,它们提供的额外效率将在需求不断上升且需要控制成本的环境中发挥关键作用。

Odysseas 目前在 Netdata 领导开发者关系工作。此前,他曾在 balena.io 的产品团队工作,专注于边缘计算行业的竞争分析,同时还领导了整个产品堆栈 1% 的改进。Odysseas 在加入 balena 之前获得了希腊帕特拉斯大学电气工程专业的五年制文凭,在那里他领导了一个创业型非营利组织,并在麻省理工学院创新与创业训练营中获得了第一名。Odysseas 是一位狂热的读者,并在 odyslam.me/blog 上写博客。

加载 Disqus 评论