首页 > 其他分享 >OpenCloudOS 如何基于 eBPF 实现容器级别的TCP 连接监控?

OpenCloudOS 如何基于 eBPF 实现容器级别的TCP 连接监控?

时间:2023-05-18 19:32:48浏览次数:42  
标签:容器 基于 cgroup eBPF OpenCloudOS TCP 内核 监控

eBPF 技术的出现,使得内核的资源监控更加的便捷、高效,容器化监控也更加适用于云原生的场景。基于 eBPF 实现的可观测性,可以无需修改内核源码或者加载内核模块,安全高效的扩展内核功能。本文,将从网络的角度介绍如何基于 eBPF,实现容器级别的 TCP 连接监控。  

一、技术背景

OpenCloudOS 适用于大规模容器集群服务器场景,为了提高服务器的资源利用率,降低业务及客户的服务器成本,提出了离、在线业务混合部署的资源隔离方案。资源隔离 QoS(Quality of Service,服务质量)方案主要包括 CPU、I/O、内存和网络四大模块。

针对这四种服务器资源进行 QoS,能够将用户的在线、离线业务部署到同一台服务器上,在保证在线业务服务质量的同时,有效的提升了资源利用率,助力降本增效,契合健康可持续的发展理念。随着 OpenCloudOS 中大规模离、在线服务混合部署的应用,如何更好的实时监控、反馈服务状况成为了业务运维人员亟需解决的问题。 

基于 Linux 内核实现的可观测性,具备性能好、灵活性高等优点。然而,基于内核的实现通常是比较困难和繁琐的。在传统的实现方式中,开发人员需要修改内核源代码重新编译或者加载内核模块来实现性能的观测,可能会应对复杂难以调试的情况,使得性能观测变得异常棘手。

像基于 kprobe、tracepoint、perf events 等技术的 ftrace、perf 工具,通过在内核函数中打桩,把数据从内核态搬到用户态进行处理。诸如上述实现可观测性的方式带来的弊端也很明显,无保护的内核模块有极大的安全隐患,同时实现的成本较高,不能够应对多变的场景。

eBPF 技术的出现,使得内核的资源监控更加的便捷、高效,容器化监控也更加适用于云原生的场景。基于 eBPF 实现的可观测性,可以无需修改内核源码或者加载内核模块,安全高效的扩展内核功能,很好的解决了上述问题。本文,将从网络的角度介绍如何基于 eBPF,实现容器级别的 TCP 连接监控。  

二、eBPF 介绍

eBPF 是一种在 Linux 内核运行沙箱程序的技术,在无需修改内核源码或者加载内核模块的情况下安全高效地扩展内核功能,可以看作是在内核的一些 hook point 上执行用户代码的一个虚拟机。

用户编写的代码被 clang 编译成字节码后加载到 linux 内核,经过 verifier 引擎保证字节码的安全性,然后通过内嵌的 JIT 编译器将字节码转成本地机器码。eBPF 是由事件触发的,当事件到来时,则在内核空间执行用户态 BPF 程序,改变内核的处理流程。

eBPF 在引入内核后,逐渐演进成为一个通用执行引擎,可基于此开发性能分析工具,网络过滤器等。eBPF 程序架构强调安全性和稳定性,看上去像内核模块,但却并不需要重新编译内核。

在 eBPF 程序的运行过程中,并不会因为程序问题而造成系统崩溃。由于其安全、高效、可编程,以及在速度和性能方面的优势,eBPF 在内核观测、追踪监控、应用性能调优、流量控制、性能统计、安全等领域发挥了重要的作用。

三、eBPF 工具在实际应用中的问题

随着离、在线混部功能的大规模部署使用,实际应用中更多的业务是基于容器来进行资源的隔离与调度。基于整机的系统级别的网络监控、追踪工具无法实现容器级别的控制,并不适用于云原生的容器场景。

如何实现更加精细的 cgroup、进程级别的资源监控,帮助管理员更好的了解系统的资源使用情况,已经成为广泛关注的问题,因此监控工具的容器化实现尤为重要。  OpenCloudOS 将 cgroup 层级的子系统状态 ID 传输到用户空间,建立 cgroup 子系统路径和 ID 之间的联系。同时适配隐藏了 cgroup v1 和 v2 结构差异,使内核仅收集所需的子系统中特定 cgroup 的网络连接状况信息。基于此,分别实现了 BCC 和 libbpf 网络工具的容器化监控。 

四、网络监控工具示例

以下示例实验环境为: 

发行版:OC 8.6 

内核:TK4-5.4 

工具:BCC 网络监控工具

1. tcpconnect

基于 cgroup 监控 tcp 网络连接,显示源IP、目的IP、目的端口等状态信息。    

基于 cgroup 统计一段时间内的 tcp 连接数量。

2. tcpconnlat

基于 cgroup 监控 tcp 建立连接的时间,显示连接的状态信息。    

3. tcprtt

基于 cgroup 统计一段时间内 tcp rtt 的分布,显示连接的状态信息。    

4. tcptrace

基于过滤条件监控 tcp 网络连接,跟踪 skb 报文在内核中的生命周期,输出每个报文在协议栈中各个点的时间延迟、地址、所在 CPU、网口等信息。    

5. tcplife

基于 cgroup 跟踪 tcp 连接的生命周期,显示连接的存活时间等统计信息。    

6. tcpdrop  

基于 cgroup 监控 tcp 网络连接,追踪内核丢弃的数据包,显示数据包地址、端口和调用栈等信息。

参考链接

BPF Documentation: 
https://www.infradead.org/~mchehab/kernel_docs/bpf/index.html 
BPF Portability and CO-RE:
https://facebookmicrosites.github.io/bpf/blog/2020/02/19/bpf-portability-and-co-re.html 
Andrii Nakryiko's Blog: 
https://nakryiko.com/

如果在使用 eBPF 工具中或 OpenCloudOS 中遇到技术问题,可扫描下方二维码,加入社区交流群,获取技术支持,交流使用体验。

标签:容器,基于,cgroup,eBPF,OpenCloudOS,TCP,内核,监控
From: https://blog.51cto.com/u_15931399/6306655

相关文章

  • OpenCloudOS 如何基于 eBPF 实现容器级别的TCP 连接监控?
    eBPF技术的出现,使得内核的资源监控更加的便捷、高效,容器化监控也更加适用于云原生的场景。基于eBPF实现的可观测性,可以无需修改内核源码或者加载内核模块,安全高效的扩展内核功能。本文,将从网络的角度介绍如何基于eBPF,实现容器级别的TCP连接监控。一、技术背景OpenCloudO......
  • RTSP over UDP与RTSP over TCP取流对比(转)
    addbyzhj: 我用FFmpeg从RTSP拉摄像头的流,日志级别设置-vtrace,可以看到这些消息。默认的,FFmpeg使用UDP传输媒体数据,如果想用TCP传输媒体数据,需要指定参数-rtsp_transporttcp,亲测。原文:https://blog.csdn.net/luyumiao1990/article/details/106093001作者:luyumiao1990网站:C......
  • Linux查看TCP连接状态
    Linux查看TCP连接状态命令natstat-natTCP状态解析LISTEN:侦听来自远方的TCP端口的连接请求ESTABLISHED:连接已建立CLOSED:没有任何连接状态三次握手:SYN-SENT:在发送连接请求后等待匹配的连接请求SYN-RECEIVED:在收到和发送一个连接请求后等待对方对连接请求的确认四次挥......
  • 西门子1200plc程序实例,TCP/IP及modbus通讯,版本V15,如有需要也可代写程序。
    西门子1200plc程序实例,TCP/IP及modbus通讯,版本V15,如有需要也可代写程序。功能如下:1,西门子1200控制4台步进电机;2,西门子1200与4台MS300变频器modbus485轮询读写参数;3,西门子1200与上位机TCP/IP通讯控制相机拍照,反馈数据;4,设备为多工位联动控制;5,威纶通人机界面多画面切换可以作为参考......
  • TCP三次握手和四次挥手的详细过程
     TCP连接建立时采用三次握手,释放时采用四次挥手,目的是进行连接的建立和释放。 三次握手的过程: 客户端发送SYN消息,表示客户端准备建立连接。服务器接收SYN消息,响应ACK消息(同时包含自己的SYN消息),表示服务器已接收客户端的SYN,也准备建立连接。客户端接收到服务器的SYN+A......
  • TCP长连接和短连接的优缺点
    TCP连接分为长连接和短连接两种,各有优缺点:长连接:优点:•减少了建立和关闭连接的开销,提高了通信效率。•客户端和服务器之间可以使用会话和Cookie来维持状态,方便会话管理。缺点:•长时间占用资源,浪费空闲时间段的带宽等资源。•网络设备容易产生大量未被......
  • hadoop distcp 参数详解
    distcp是一个用于数据复制的工具,它可以将数据从一个Hadoop集群复制到另一个Hadoop集群。Usage:hadoopdistcp[OPTIONS]<srcurl><desturl>OPTIONS:-p[rbugpcax]Preservestatus(rbugpcax)r:replicationnumber......
  • hadoop中distcp的mapreduce任务中的task0详解及优化
    task0详解distcp是Hadoop中一个用于数据复制的工具,可用于大规模数据复制场景。在distcp执行过程中,会运行多个MapReduce任务,其中第一个任务通常被称为"task0"或"maintask"。task0主要负责以下操作:**1.解析命令行参数并生成distcp配置。**2.预处理数据源列表,对......
  • TCP三次握手四次挥手
    1.三次握手三次握手(Three-wayHandshake)其实就是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。进行三次握手的主要作用就是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的可靠性传送做准备。实质上其实就是连接服务器指定端口,建立TCP连接,并......
  • 1、TCP/IP模型有哪几层?
    应用层应用层只需关注给用户提供的功能,当两个设备需要进行通讯的时候,只需要把要发送的数据发送给传输层即可。传输层传输层是为应用层提供网络支持的,传输层有两个传输协议:TCP和UDPTCP:大部分应用用的正是TCP协议,如HTTP。相对于UDP协议,TCP协议多了很多特性:流量控制、超时重传......