eBPF ,让观测性走向神坛

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Hello folks,我是 Luga,今天我们来介绍一下“下一代”可观测性工具 - eBPF,作为一种强大的内核技术,eBPF 启用了全新类别的可观测性模型,除此之外, 其程序能够无缝地与各种内核关联,以收集有关正在发生的事件数据。

    Hello folks,我是 Luga,今天我们来介绍一下“下一代”可观测性工具 - eBPF,作为一种强大的内核技术,eBPF 启用了全新类别的可观测性模型,除此之外, 其程序能够无缝地与各种内核关联,以收集有关正在发生的事件数据。

    通常而言,可观性不仅仅是操作和应用程序监控,它还涉及根据整个系统的输出结果以推断环境状况。从技术发展历程来讲,真正的下一代可观性是能够具备向系统提出问题的能力,而不是仅仅是收集各种各样的监控数据并试图将其关联起来进行展示。

    在实际的业务场景中,通常与可观性相关联紧密的数据便是“指标”、“日志”和“链路追踪”。然而,这些数据源中的每一项都有不同的收集方法,除此,针对这些数据项进行采集可能需要多种不同的产品和代理。如果有一种方法可以以一种不引人注目、安全且跨系统一致的方式收集遥测数据以实现可观性,并且对当前系统性能和资源使用影响最小,那会怎么样?

    或许,eBPF 将是一个不错的选择!

    众所周知,作为新一代技术,eBPF 程序可以附加到各种内核组件中,以观测、收集有关正在发生的事件数据。假设,在没有 eBPF 的情况下,我们进行相同级别的数据采集通常需要加载额外的内核模块或修改内核本身,这可能需要数年才能完成。此外,这两项活动都会增加风险和资源性能开销。而基于 eBPF 技术,可用于在多个层级收集各种数据,包括进程 ID、时间戳、系统调用和资源使用情况。毕竟,eBPF 程序由验证过的程序保护,以确保它具有合适的权限,从而不会崩溃或对系统产生负面影响。

    在本篇博文中,笔者将试图解析基于 eBPF 的可观性是什么,以及 eBPF 可以增强网络可观性、Kubernetes 可观性、安全可观性以及性能可观性的一些方法。

eBPF 基础功能

    eBPF 是一种嵌入到 Linux 内核中的顶尖技术,可以在内核空间(例如 ring-0)中运行沙盒程序。它能够用于增强和扩展内核功能,无需加载任何额外的内核模块,也无需以安全可靠的方式重新编译内核。

    如果计算机内部有任何地方可以实现安全、网络、监控和分析功能——那便是操作系统内核。另一方面,内核是保守的,因为它们是所有工作系统的关键任务部分。这会减慢任何内核内部新功能的开发速度,更不用说新功能可能带来的安全隐患和风险了。

    eBPF 通过带来在内核中运行沙盒程序的能力来改变游戏规则,使得开发人员现在无需编写内核驱动程序和模块即可轻松扩展对应功能。eBPF 子系统通过使用 JIT(Just-in-Time)编译器和字节码验证引擎来保证安全性和稳定性。

    eBPF 带来了大量软件,包括软件定义网络 (SDN)、可观性项目和基于安全的软件。它还涵盖了许多领域和用例:提供高性能数据包处理、负载均衡、挂钩关键系统调用、调试正在运行的软件等等。基本上,eBPF 可以被称为 Linux 的超能力,它允许我们基于实际的环境诉求来释放无限的创造力以解决任何复杂程度的任务。

    eBPF 从硬件级别到应用程序级别基本上可以实现的功能,具体如下所示:

eBPF 观测架构

    众所周知,eBPF 是一种无需更改内核源代码或加载内核模块即可在 Linux 内核中运行沙盒程序的技术。通过使 Linux 内核可编程,基础设施软件可以利用现有层,使它们更加智能和功能丰富,而无需继续向系统添加额外的复杂层。

    eBPF 的通用型观测架构参考模型,如下所示:

    基于上述观测架构模型,我们可以看到,基于用户的不同场景,无论是网络、追踪、安全以及可观测性等,User space 程序基于特定的需求信息加载 BPF 字节码信息至 Kernel space,然后在 Kernel space 中执行一系列特定的事件,最终,将事件结果反馈至 User space。

网络观测性

    通常,在没有大量开销的情况下收集网络链路追踪是使用 eBPF 的一个巨大优势。一个经典的场景案例便是 Cilium 基于 eBPF 在不需要代理或使用大量系统资源的情况下深入追踪网络流量走向。

    基于 eBPF 技术,使得其能够访问 L3、L4 以及 L7 等不同层级的网络流量数据,基于此,我们可以观有关流量的详细分析。在这里,我们将会看到哪些网络数据被允许或拒绝,哪些网络策略或配置导致连接出现问题等。

    基于上述 2 种不同的容器网络模型场景,我们可以看到,基于传统的观测模型,如果没有 eBPF,上面的场景将需要挖掘 iptables 日志,或部署资源密集型的第三方代理和工具来跟踪流量走向,然后尝试将它们映射到策略和应用程序进程中,以实现某些特定的业务需求。

Kubernetes 观测性

    其实,除了最基础的网络层面,eBPF 在 Kubernetes Cluster 观测性层面也带来巨大优势。

    由于 Kubernetes 自身的分布式架构,其复杂性和 Kubernetes 指标的抽象性,监控和扩展 Kubernetes 集群传统上一直具有较大挑战性。Kubernetes 管理员对内核级别的资源消耗缺乏可见性,这使得缩放和微调变得相当困难。此时,基于 eBPF 可以通过跨 Kubernetes Cluster 在内核级别收集粒度数据来提高可观察性。

    诚然,随着容器技术的发展,云原生生态理念的普及,Kubernetes 提供了很多平台都无法具备的功能,但它也带来了额外的复杂性。将 eBPF 用于 Kubernetes 可观性是非常有必要的,因为无需(或开销)在整个集群中推送代理或 Sidecar 即可对遥测进行内在访问。eBPF 程序可以访问 Pod 级别的网络指标,并且不仅可以本地理解 IP 和端口,还可以理解服务身份和 API 调用,然后将数据暴露至 Grafana 等操作仪表板。相同的可观流量数据和身份意识让用户更进一步动态了解整个 Kubernetes Cluster 网络运行策略。

    事实上,在 eBPF 技术之前,能够实时了解应用层事件行为发生的情况,然后使用数据进行故障排除和主动策略管理并不容易,这在很大程度上是由于 iptables 等内置工具的局限性所导致。

    除此之外,eBPF 还可以通过资源利用增强 Kubernetes 的可观性,同样不会增加系统开销。通过 eBPF 技术,可以展现系统资源运行情况以便我们能够基于说收集的数据进行更深入的理解、分析,并指导和优化其他工具和流程,例如布局、大小调整以及一般应用程序和基础架构优化等。

    基于上述所述,eBPF 程序可以在整个 Kubernetes Cluster 中收集内核级别的粒度数据,使团队能够更轻松地扩展集群。eBPF 能够提供如下好处:

    1、服务级监控—监控特定容器实例级别中的流程更容易,使得团队能够追踪资源消耗模式。

    2、粒度— eBPF 程序提供比日志更详细的信息,提高了整体可见性。

    3、易于部署— eBPF 不需要像日志代理使用的 Sidecar 容器那样的特殊模式,基于操作系统层面工作,使得其消耗的资源更少,开销最小,效益最大化。

性能观测性

    针对资源的性能可观性讨论较少,但随着应用程序变得更加多样化并转向微服务和容器化云原生环境,eBPF 所提供的增强可观性功能变得尤为重要。虽然,许多性能优化用例仍处于早期开发阶段,但到目前为止性能可观性方面的进展是有希望的,并且显示了用例的流行程度。

    增强性能可观性所涉及的功能场景包括如下:

    1、映射 Pod 级网络吞吐量

    2、端到端网络吞吐量和延迟

    3、每个进程的 CPU 和内存利用率等能力。

    或许,在不远的将来,eBPF 将成为云原生领域中性能可观性的核心工具之一,因为我们继续寻找在“最佳瓶颈点”(Process/Container/Pod)优化系统和应用程序性能的方法,以及通过映射端到端的总体系统性能(节点/集群/跨集群/跨云等)。

安全观测性

    针对安全性观测,或许是 eBPF 天生所具备的优势。eBPF 能够为用户提供了对整个系统中通信流的内在、深入的可见性。基于 eBPF 的安全可观用例场景较为丰富,不但包括解锁极其精细的流程可见性,以及端到端流程和流观。即使在 Kubernetes 中运行的简单微服务应用程序中,了解短暂的无状态环境中的通信模式通常也需要基于代理的深度访问虚拟和物理网络。添加具有多种协议的 L4-L7 流量,我们便有了 eBPF 的理想候选者。借助 eBPF,TLS 流量遍历 Pod、Node 和云平台来跨层进行检测。

    类似的项目,例如 Hubble 便是基于 eBPF 来收集网络流量数据,例如行为的突然变化、特定进程的活动微爆发表明潜在的利用或攻击、服务到服务的通信模式等等。它们还允许用户扫描以查看网络事务,以了解涉及哪些 Pod、进程和系统调用。eBPF 使用户能够访问 5 元组信息,以便通过历史数据实时深入了解 UDP 和 TCP 事务状况。


🚀 process default/privileged-pod /usr/local/bin/crictl exec -it e1accc0422efb7f21b5063c4b3eaf530b28eb9ede373f94e86bf13a58bf02550 /bin/bash
🔧 tcp_connect default/privileged-pod /usr/local/bin/crictl 127.0.0.1:64205 -> 127.0.0.1:43213
🚀 process kind-control-plane /usr/bin/python 
🚀 process kind-control-plane /usr/bin/curl https://raw.githubusercontent.com/realpython/python-scripts/master/scripts/18_zipper.py
🔧 tcp_connect kind-control-plane /usr/bin/curl 10.244.0.5:61673 -> 185.199.110.133:443
⁉️ syscall kind-control-plane /usr/bin/curl tcp_close
💥 exit    kind-control-plane /usr/bin/curl https://raw.githubusercontent.com/realpython/python-scripts/master/scripts/18_zipper.py 0
💥 exit    kind-control-plane /usr/bin/python  0

    其实,从本质上来讲,安全性和网络可观性是相互相辅相成的,用户可以利用 eBPF 和 API 驱动的基础架构的功能来创建可编程控件,并可以创建可以在实时环境中观甚至采取行动的策略。

    eBPF 为用户空间和内核提供统一的跟踪接口,不需要额外的代码检测。首先,因为追踪发生在内核中,即使在基于代理或 Sidecar 追踪失败的情况下,eBPF 踪也会继续。其次,eBPF 不会停止正在运行的进程来观其状态,这极大地有助于保持应用程序运行时性能。eBPF 跟踪在任何系统的内核中实时发生,从而减少性能损失并降低正在运行的进程和应用程序的风险。

    使用 eBPF 进行跟踪的第三个好处是 eBPF 可以踪系统中的所有内容,而不是局限于特定的层或进程。为了能够基于 eBPF 进行应用程序进程观测,在实际的业务场景中,我们往往无需将代码注入到所构建的应用程序中。

    eBPF 是一个令人印象深刻的可观性工具,与更传统的可观性解决方案相比,它可以提供更深入的洞察力。从整个系统收集遥测数据的安全、非侵入性方式的优势是过去没有许多产品、应用程序级代理和非常复杂的操作所无法获得的。无需深入了解 eBPF 编程即可获得使用 eBPF 的优势。eBPF 正在发展成为可观性的标准基础,将数据输入 Grafana 等工具,以及 Kubernetes 和其他系统中的技术,例如许多顶级云公司的技术。eBPF 不是最终目标,而是使用户能够达到深度最终目标的工具和方法。

       Adiós !

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
Cloud Native 安全 Linux
基于eBPF的云原生可观测性开源项目Kindling之eBPF基础设施库技术选型
eBPF技术正以令人难以置信的速度发展,作为一项新兴技术,它具备改变容器网络、安全、可观测性生态的潜力。本文主要探讨Kindling的eBPF基础设施库的选型考量。
1004 0
基于eBPF的云原生可观测性开源项目Kindling之eBPF基础设施库技术选型
|
4月前
|
Kubernetes 监控 Cloud Native
eBPF技术大揭秘:一张全景图彻底改变Kubernetes问题排查,助你成为云原生时代的超级英雄!
【8月更文挑战第8天】在云原生时代,Kubernetes作为容器编排的标准,其问题排查变得日益复杂。eBPF技术无需改动内核即可编写高效、安全的内核程序,实现系统细粒度观测与控制。近期发布的基于eBPF的Kubernetes问题排查全景图,展示了如何利用eBPF监控资源使用、网络性能及调度策略等,例如通过eBPF程序监控CPU使用率。此全景图有助于快速定位如高CPU使用率等问题所在Pod,进而优化配置或调整调度。
123 8
|
3月前
|
Linux 编译器 API
eBPF技术学习
eBPF技术学习
|
4月前
|
存储 数据采集 Prometheus
Prometheus 监控系统常见技术问题大曝光!解决之道让你意想不到!
【8月更文挑战第5天】Prometheus是一款强大的监控工具,但在应用中常遇技术难题。案例一中,因配置错误导致CPU使用率数据不准,调整`metrics_path`可解决。案例二涉及告警规则不触发,修正表达式即可。案例三关于数据存储溢出,设置保留策略如`30d`能缓解。案例四是监控指标丢失,增强网络稳定性和添加重试机制有助于恢复。面对这些问题,细致排查与合理配置是关键。
401 0
|
运维 Kubernetes 监控
基于 eBPF 构建下一代智能可观测系统
基于 eBPF 构建下一代智能可观测系统
1694 13
|
弹性计算 运维 监控
【送书】实现可观测性平台的技术要点是什么?
【送书】实现可观测性平台的技术要点是什么?
【送书】实现可观测性平台的技术要点是什么?
|
Rust 监控 Kubernetes
一文读懂基于 eBPF 自动化可观测平台 - DeepFlow
Hello folks,我是 Luga,今天我们来聊一下云原生生态核心技术——基于 eBPF 全链路自动化可观测性。当我们真正融入到云原生生态场景中时,我们将会深切地体会到:“全链路可观测性”的价值所在~
2339 1
一文读懂基于 eBPF 自动化可观测平台 - DeepFlow
|
监控 Kubernetes 网络协议
DoorDash 基于 eBPF 的监控实践
DoorDash 基于 eBPF 的监控实践
212 0