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

news2024/9/20 5:36:07

导语: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 网络工具的容器化监控。

 资料直通车:Linux内核源码技术学习路线+视频教程内核源码

学习直通车:Linux内核源码内存调优文件系统进程管理设备驱动/网络协议栈

四、网络监控工具示例

以下示例实验环境为:

发行版: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/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/584262.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

11.1.0 Web 打印新支持 UGC 布局模板

作者:yx 目录 前言 一、在iDesktopX制作布局并输出布局模板 二、将布局模板拷贝到iServer 三、构建Web打印内容 四、结果展示 前言 之前有小伙伴希望 iServer 的 Web 打印布局可以采用 iDesktop/iDesktopX 输出的布局模板,针对该需求11.1.0版本做了…

基于标准库函数的STM32的freertos的移植(二)——freertos工程源码移植

1.新建Project_Stm32f407的文件夹,如下图所示: 图1 新建Project_Stm32f407的文件夹 2.在Project_Stm32f407的目录下新建7个子目录(分别新建cmsis、include、source、fwlib、user、mdk和freertos等7个文件夹)。 图2 新建7个文件目录…

Unity 一键修改场景中的字体,修改部分字体

强大的Unity编辑器扩展 介绍: 测试编辑器扩展时顺便做了个小工具,挺有意思 选中场景中的物体后就可以一键修改这个物体下所有字体 如果什么都不选,就是修改这个场景中的全部字体 修改完字体后记得保存场景! 代码&#xff0…

《微服务实战》 第二十五章 Java多线程安全与锁

前言 本章节介绍Java多线程安全与锁 1、Java多线程安全与锁 1.1、多线程安全问题 当多个线程同时操作同一个数据时,可能会出现数据不一样的情况,这就是线程安全问题。线程安全机制用于保证多个线程访问数据时的一致性. 1.2、线程安全问题三方面 原…

际华集团电子化采购平台建设之路及功能亮点

际华集团股份有限公司(以下简称“际华集团”)于2009年6月26日设立,并于2010年8月16日在上海证券交易所挂牌上市,旗下50余户全资及控股子公司,分布在全国23个省、直辖市、自治区以及欧洲、香港,资产规模超30…

让初学者读懂代码的入门书

经常有同学问,零基础想要学编程,应该先从哪门编程语言学起。 如果你学习编程是想要从事互联网技术岗位,那么对比众多的编程语言,Java作为目前使用率最高且应用领域最多的编程语言之一,从应用领域、生态及业内使用率上…

【016】C++预处理详解(内存分区、变量的存储、头文件、宏等)

C内存分区和变量存储 引言一、内存分区二、变量的存储2.1、普通局部变量2.2、普通全局变量2.3、静态局部变量2.4、静态全局变量 三、全局函数和静态函数3.1、全局函数3.2、静态函数(static修饰的函数) 四、头文件包含五、#define宏5.1、不带参数的宏5.2、…

chatgpt赋能python:Python中的不确定尾数问题

Python中的不确定尾数问题 Python作为一种高级编程语言,被广泛应用于数据科学、机器学习、Web开发等众多领域。然而,Python在处理浮点数时会出现一些不确定尾数的问题,给程序员和数据分析员带来不少麻烦。本篇文章将介绍Python中不确定尾数的…

抖音seo开源源码,抖音优化系统定制方案

抖音作为目前最火热的短视频平台之一,其在移动互联网领域的影响越来越大。然而,一款成功的产品未必仅仅靠着其自身的功能和品质就能获得市场的认可,还需要通过优化SEO来实现更好的曝光率。下面,本文将介绍如何优化抖音SEO源码开发…

16个好用到爆的Python实用技巧!

Python 是一门用途广泛的编程语言,它具有大量的库和框架。有一些鲜为人知的 Python 编码技巧和库可以让你作为开发人员的工作更为轻松,编写代码更高效。 本文将探讨一些鲜为人知的 Python 技巧,这些技巧非常有用,但并不广为人知。…

领域驱动模型VO,BO,PO,DO,DTO概念介绍和区别

先来一张图,有一个直观地感受: 概念介绍 VO(View Object)视图对象 用于展示层(和控制层Controller共同属于表现层),它的作用是把某个指定页面(或组件)的所有数据封装起来…

机器学习算法

机器学习擅长的任务: ● 回归(regression) ● 分类(classification) ● 聚类(clustering) 1.回归(regression) 回归是处理连续数据时使用的方法,如时间序列数据。 …

vue使用obs华为云上传图片或者视频

可惜只支持web和h5 api链接 引入,位置自己放,我放了两个其实一个就可以 import ObsClient from "./../common/esdk-obs-browserjs-without-polyfill.3.23.5.min.js";使用 Bucket桶名;Key可以理解为参数;SourceFile文…

香豆素荧光标记652966-03-5,ATTO425 acid,ATTO 425 羧酸,进行简析说明

中文名称:ATTO 425 羧酸 英文名称:ATTO425 COOH,ATTO-425 carboxylic acid 规格标准:10mg,25mg,50mg CAS:652966-03-5 分子式:C22H27NO6 分子量:401.46结构式&#xff1a…

90.qt qml-Table表格组件(支持表头表尾固定/自定义颜色/自定义操作按钮/插入排序)

众所周知,qml table在目前版本还很废,qt5的table完全就没法用,在之前章节就写过: 88.qt qml-TableView学习(一)_诺谦的博客-CSDN博客 所以本章便参考VUE-Element的Table外观组件实现一个可排序可操作的Table组件. 1.组件介绍 GIF如下所示: 排序支持数字和字符串排序。 …

Mysql5.7.41windows安装

Mysql5.7.41windows安装 Mysql5.7.41windows安装Mysql5.7.41官方下载mysql安装 配置PATH路径,任意位置打开cmd都可以连接Mysql环境验证,并登录友情链接 Mysql5.7.41windows安装 本文主要完成windows从下载到安装的安装文档撰写。 Mysql5.7.41官方下载 …

html实现会拐弯的时间线,jquery实现会拐弯的时间线,css实现会拐弯的时间线

前言 jquery html css实现一个会拐弯的时间线 基于此网址整改,参考:https://www.jq22.com/webqd5873 效果 实现 基于jQuery,需要引入jQuery.js,没有必要使用太高版本,够用就行 jquery下载:https://www…

SadTalker 学习笔记

SadTalker: Learning Realistic 3D Motion Coefficients for Stylized Audio-Driven Single Image Talking Face Animation 摘要 Generating talking head videos through a face image and a piece ofspeech audio still contains many challenges. i.e., unnatural head mo…

前端页面调用EXE应用程序

文章目录 1️⃣ 操作步骤1.1 操作注册表1.1.1 创建 xcLeigh.reg 注册表文件1.1.2 安装 xcLeigh.reg 注册表文件1.1.3 放入EXE文件 1.2 界面代码1.3 运行效果 优质资源分享 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details…

大专毕业,从6个月开发转入测试岗位的一些感悟 —— 写在测试岗位3年之际

时光飞逝,我从前端开发岗位转入测试岗位已经三年了,这期间从迷茫到熟悉,到强化,到熟练,到总结,感受还是很深的! 三年前的某一个晚上,我正准备下班回家,我们的项目经理把…