基于eBPF的容器网络TCP连接时延监测方法和装置

文档序号:36005608发布日期:2023-11-16 20:54阅读:53来源:国知局
基于eBPF的容器网络TCP连接时延监测方法和装置

本发明涉及云原生可观测性领域,尤其涉及一种基于ebpf的容器网络tcp连接时延监测方法和装置。


背景技术:

1、随着云原生应用的快速发展,越来越多的企业选择将单体应用升级为云原生应用。云原生可以提供对于容量和算力的弹性伸缩、对于服务的隔离和一键部署等多方面能力,使得业务人员只需要关注业务逻辑,而不必关心底层的基础架构设施的实现。云原生在给应用开发和部署带来高效和稳定的同时,也给可观测性领域带来了新的挑战。云原生环境以容器和k8s技术作为底层支撑,而容器技术本身是一项虚拟化技术,它屏蔽掉了许多物理细节,同时,k8s是一项容器编排技术,也引入了许多虚拟化技术,如通过虚拟覆盖网络进行容器间通信等,给传统的可观测性技术带来新的难题。这些虚拟化技术使得传统的可观测性技术难以准确且高效地对于容器间网络进行故障监测分析。因此,基于ebpf技术对于内核协议栈相关点位进行监测和分析,可以实现对于tcp(transmission controlprotocol,传输控制协议)网络细粒度数据的获取,同时直接在内核中完成对于rtt指标(round-trip time,往返时延)的分析和计算,可以省去原始数据包到用户态的拷贝,以优异的性能表现完成对于容器间tcp握手rtt指标的准确计算。容器间tcp握手rtt指标有助于发现网络问题和时瓶颈,进而进行针对性的问题排查和解决。


技术实现思路

1、本发明的目的在于针对现有技术中的侵入性监控技术粒度粗、资源占用高的问题,提供一种基于ebpf的容器网络tcp连接时延监测方法和装置。本发明能够更精准、更高效、更轻量地计算出tcp、rtt时延指标。

2、本发明的目的是通过以下技术方案来实现的:本发明实施例第一方面提供了一种基于ebpf的容器网络tcp连接时延监测方法,包括以下步骤:

3、(1)获取本机的网卡元数据信息,所述网卡元数据信息包括各种虚拟网卡和网卡索引号的映射关系;

4、(2)根据本机的网卡元数据信息在内核中监控linux内核协议栈的关键事件,并解析相关数据包,该相关数据包具体包括接收数据包和发送数据包,获取容器网卡数据包信息;

5、(3)根据获取的容器网卡数据包信息在内核中通过ebpf map建立五元组到tcp握手rtt二元组的映射,该映射为键值对,其中的键为五元组,键值为二元组(synrtt,ackrtt);对于每一个通过容器的数据包,通过解析其tcp数据包头的flag字段判断是否是握手包,同时获取当前的时间戳信息;

6、(4)根据步骤(3)确定的握手包以及获取的当前的时间戳信息进行pod间tcp三次握手时的握手往返时延指标的计算;

7、(5)通过ebpf的环形缓冲区将步骤(4)计算得到的rtt指标发送到用户态中;

8、(6)在用户态对获取到的rtt指标进行分析、关联和处理,以将二元组中不经过网络传输的数据置为无效;

9、(7)将通过步骤(6)中的用户态处理后的事件数据进行汇总展示。

10、进一步地,所述步骤(1)包括以下子步骤:

11、(1.1)根据虚拟网卡名获取对应的网卡索引号;

12、(1.2)建立网卡索引号和网卡类型的映射关系,所述网卡类型包括容器网卡和非容器网卡。

13、进一步地,所述步骤(2)包括以下子步骤:

14、(2.1)对于内核的接收数据包的接收过程,通过tracepoint类型的ebpf程序,监听netif_receive_skb事件,并对传入的内核套接字进行解析,以获取接收过程中的容器网卡数据包信息;

15、(2.2)对于内核的发送数据包的发送过程,通过kprobe类型的ebpf程序,监听dev_hard_start_xmit事件,并对传入的内核套接字进行解析,以获取发送过程中的容器网卡数据包信息。

16、进一步地,所述容器网卡数据包信息包括容器网卡上数据包的五元组、数据包捕获时间戳和tcp数据包的flag字段;

17、所述容器网卡上数据包的五元组包括源ip、目的ip、源端口、目的端口和网卡索引号。

18、进一步地,所述tcp数据包头的flag字段包括同步报文标志syn和确认报文标志ack;

19、所述通过解析其tcp数据包头的flag字段判断是否是握手包,具体包括:

20、若syn=1,ack=0,则说明是第一次握手包;

21、若syn=1,ack=1,则说明是第二次握手包;

22、若第二次握手后的第一个syn=0,ack=1的数据包即为第三次握手包。

23、进一步地,所述步骤(4)包括以下子步骤:

24、(4.1)当在容器网卡解析到第一次握手包的数据时,以当前数据包的五元组作为键,以二元组(当前时间戳,0)作为键值,存储到ebpf map中;

25、(4.2)当在容器网卡解析到第二次握手包的数据时,以当前数据包的五元组作为键,以二元组(synrtt,当前时间戳)作为键值,更新到ebpf map中;其中synrtt的具体计算方式为:synrtt=当前时间戳-ebpf map中已存在的当前时间戳;

26、(4.3)当在容器网卡解析到第三次握手包的数据时,以当前数据包的五元组作为键,以二元组(synrtt,ackrtt)作为键值,更新到ebpf map中;其中ackrtt的具体计算方式为:ackrtt=当前时间戳-ebpf map中已存在的当前时间戳。

27、进一步地,所述步骤(5)包括以下子步骤:

28、(5.1)在内核空间创建一个bpf_map_type_perf_event类型的ebpf map,其键和键值分别表示cpu核的编号以及在该核上性能监控单元初始化的性能监控计数器的pmu_fd值;在内核中通过bpf_perf_event_output函数将步骤(4)计算得到的往返时延指标写入至环形缓冲区;

29、(5.2)在用户空间为每一个cpu创建pmc,并将对应的pmu_fd值写入步骤(5.1)创建的ebpf map中;用户态通过mmap机制实现环形缓冲区的内存映射,读取来自内核空间发送的往返时延指标。

30、进一步地,所述步骤(7)具体为:将通过步骤(6)中的用户态处理后的事件数据以metrics指标的形式传输到prometheus平台中,并通过grafana进行可视化展示。

31、本发明实施例第二方面提供了一种基于ebpf的容器网络tcp连接时延监测装置,包括一个或多个处理器和存储器,所述存储器与所述处理器耦接;其中,所述存储器用于存储程序数据,所述处理器用于执行所述程序数据以实现上述的基于ebpf的容器网络tcp连接时延监测方法。

32、本发明实施例第三方面提供了一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时,用于实现上述的基于ebpf的容器网络tcp连接时延监测方法。

33、本发明的有益效果是,本发明在带来极低的性能开销的情况下,能够准确计算出复杂容器网络中容器间通信时的tcp握手包时延,从而帮助发现和定位容器网络故障和瓶颈。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1