云舟观测:基于eBPF监控主机的TCP网络连接

1

02514026a2d687813bd9142e1c52a3fe.gif

背景

机器网络监控信息在日常问题排查中扮演着至关重要的角色,是不可或缺的工具。通过对网络流量的深入分析,我们不仅能有效评估网络性能,还能迅速识别异常行为,例如流量突然激增、未知的数据传输等,这些对于保障网络安全与稳定至关重要。同时,网络信息中的应用通信记录为我们追溯问题发生的过程和原因提供了宝贵线索,有助于快速定位并解决问题。

传统的网络监控主要关注机器的整体流量带宽,而对于上层应用服务的流量监控,则通常需要手动打点采集数据。然而,插桩打点往往涉及代码改动及应用服务升级,给线上服务的实施带来很大困难。相比之下,零侵扰的eBPF技术则显著优化了这一流程。

eBPF通过在内核态直接挂载函数的hook点,实现了对函数入口和出口处的高效监控。它允许我们进行自定义的、复杂的逻辑计算,而无需在应用服务中插入额外的探针。最终,这些处理结果会被输出到用户态,供业务逻辑进一步处理。这一技术优势不仅简化了网络监控的实施过程,还大大提高了监控的准确性和效率。

云舟观测使用eBPF进行定制化开发,从而在应用服务无感知的情况下,采集机器上各端口的流量情况,再将网络明细数据汇集到服务域名上,以此提供应用服务之间的流量监控。使应用服务能够即时掌握网络动态的同时,还能明显地提升问题分析、追踪及定位的速度。

2

9d6cb04c5c40ae9f51f0fac7ca51252d.gif

实现说明

云舟观测利用eBPF高效采集数据,随后对数据进行按时间的汇总计算,以得出TCP网络连接的流量统计等关键指标,汇总后的结果会被上报并写入到存储中,后续进行深入的查询、分析和可视化,以便进行网络性能优化和故障分析。

2.1.  eBPF数据采集接口

Tcp连接(tcp_connect):监听tcp连接的状态、创建连接耗时,以及单位时间内连接的次数等。通过连接数的变化,可以及时发现网络拥堵、资源过载或潜在的性能瓶颈;而连接延时可以深入了解网络传输的效率和质量。延时过长可能表明网络路径存在问题,如延迟高的路由器、带宽不足或网络拓扑不合理等。根据TCP连接数和延时的变化趋势,可以预测未来的网络流量需求,并据此优化资源分配。例如,可以根据连接数的峰值和平均值调整服务器数量、带宽资源或存储资源等,以确保业务的高效运行和可扩展性。同时还可以检测网络攻击行为。

1c6ba1c0488908224605f8787829bc95.jpeg

Tcp发送、接收(tcp_sendmsg、tcp_cleanup_rbuf):通过监控TCP数据包的大小,可以评估网络的带宽利用率。如果数据包过大,可能导致网络拥塞和丢包;而数据包过小,则可能降低带宽利用率。通过监控数据包数量,可以动态调整发送速率,避免网络拥塞。同时,通过时间范围内的数据发送、接收量以及次数,来检测服务是否有异常的流入或流出流量;及时发现潜在的偷跑流量,确保运行服务的正确性和完整性。

bf05f2fd05ad5f4e02ee7d535c41e493.jpeg

Tcp关闭(tcp_close):通过分析连接关闭事件,可以检测异常的连接关闭行为,如大量连接的快速关闭、异常的连接关闭频率等。这有助于发现潜在的安全威胁,如拒绝服务攻击、恶意行为等,并及时采取相应的安全措施。通过监听TCP连接关闭,可以帮助应用程序进行性能优化。当有连接关闭时,可以捕获连接的应用程序标识符和相关的事件信息,如连接的传输数据量、连接的持续时间等。这些信息可以帮助分析应用程序的性能瓶颈、数据传输效率等,并进行相应的优化,提升应用程序的性能和用户体验。

f506be7f63762bc4ac1543768c59637e.jpeg

Tcp重传(tcp_retransmit):通过监控TCP重传的数量,我们可以有效识别网络抖动现象。此外,还能反映应用服务之间的网络传输质量。若重传数量较高,可能意味着网络传输质量不佳,存在数据包丢失、延迟或网络拥塞等问题。这些问题可能影响应用服务的性能和用户体验,因此,通过监控TCP重传数量,我们可以及时发现并解决潜在的网络问题,确保应用服务的稳定运行。

8291734d0e59c8570d81d05f5e5878e1.jpeg

Dns数据采集(udp_sendmsg):域名数据解析,大多需要通过udp发送到dns服务上来解析,因此,通过监控udp_sendmsg来获取dns数据,对采集的ip信息,归一到域名,以此来表述“一台机器”上的网络信息。

971bf4a137076e406f02e325a9dcf8a1.jpeg


其他:除上述接口外,还依赖其他如state process等接口,来监听tcp状态监控变化,以及发送方向的定位;例如在服务请求中,请求发起方还会接收到response,通过监听本机创建链接的端口,来判断是否为随机端口,依此来确定数据方向等。

2.2. 数据汇总处理

由于实时采集的数据较多,无法直观得表示时间内的一定值,因此对采集的数据按时间周期(默认一分钟)进行汇总。主要为时间范围内的次数,以及大小进行求和和平均。如将相同ip加端口的tcp connect数据,对连接次数、耗时等求和,在计算时间范围内的平均值。数据包发送、接收的总次数,以及所有数据包的大小等等。汇总计算后的数据,写入日志存储,即为网络监控的明细数据,用于界面的查询展示。

3

fbe41f2a912c65a1d8f54acdde3811e3.gif

使用限制

由于eBPF采集与系统内核紧密相连,不同内核版本的函数接口,及数据结构有所差异,因此开发环境与实际运行环境,内核不同时会出现差异化表现;而开发环境需要大量的第三方依赖,在运行环境上安装依赖不可行;此外,eBPF作为较新的技术,在低版本内核可能不支持。

考虑对各版本尽可能的支持,解决跨环境运行的问题,我们通过BTF来支持CO-RE,考虑全量的BTF较大,我们只生成ELF文件所依赖的BTF,在启动时采集程序自动引入(使用无感知)。因此,安装应用的机器,需要确保自己的内核支持eBPF及BTF。具体支持的内核版本,可以在云舟观测文档中查询。

4

43326e3f50d01ac95b58a042d904669c.gif

使用说明

4.1 安装采集应用

在云舟观测应用市场中,搜索“TCP网络连接监控”观测应用,点击安装,选择要监控的主机。

f78a122600bfc747bae0784ac0bef6ba.jpeg

4.2 查看观测视图

通过对网络数据的分层汇总,主要展示为三个页面:

(1) 当前主机到其他服务端域名之间的TCP汇总数据

ee8110f7426a711b108c71282c13761f.jpeg


(2)点击某一服务端域名,跳转至当前主机到该域名下所有IP的TCP汇总数据

00a702ee664679fbec12bd519fe57aad.jpeg


(3) 点击某一服务端IP,跳转至当前主机到该IP下进程级别的TCP明细数据 

aad701133db5b4e17a4b6aa2fca065f1.jpeg


5

a18ba5e2a8bf808fa010a27b7c20949b.gif

关注云舟观测

云舟观测是由360智汇云推出的一款一站式数据采集与监控观测产品,可以对基础设施、应用性能,以及云原生下业务指标和日志进行全面的监控和观测,构建全链路的可观测性服务,帮助用户及时发现和解决系统及应用性能问题,提高系统的稳定性和可靠性。 

云舟观测产品使用地址:https://zyun.360.cn/guance/

更多技术和产品文章,请关注👆

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

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

相关文章

【IC每日一题】

IC每日一题 1:锁存器(latch)、触发器(flip-flop)、寄存器的概念及区别1.1 概念1.2 锁存器的危害1.3 如何避免产生锁存器 2 手撕题:边沿检测2.1 边沿检测(上升沿、下降沿、双边沿)2.1.1 波形图2.1.2 算法步骤2.1.3 代码 2.2 序列模三检测器2.2.1 描述2.2.…

使用 Docker Compose 将数据版 LobeChat 服务端部署

LobeChat 是一个基于 TypeScript 的开源聊天机器人项目,支持本地部署和接入多个大语言模型。本文介绍如何使用 Docker Compose 将 LobeChat 服务端及其数据库部署到生产环境,让您拥有一个私有化的、可定制的 AI 聊天助手。 一、部署前准备 服务器&…

DICOM标准:DICOM服务类详解,了解存储服务类、查询/检索服务类(Q/R Service Class)和工作流管理服务类等原理

目录 一、概述 二、存储服务类(Storage Service Class) 存储操作(C-STORE) 确认操作(C-STORE-RSP) 三、查询/检索服务类(Query/Retrieve Service Class) 查询操作(C…

八,Linux基础环境搭建(CentOS7)- 安装Mysql和Hive

Linux基础环境搭建(CentOS7)- 安装Mysql和Hive 大家注意以下的环境搭建版本号,如果版本不匹配有可能出现问题! 一、Mysql下载及安装 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Orac…

Virtuoso使用layout绘制版图、使用Calibre验证DRC和LVS

1 绘制版图 1.1 进入Layout XL 绘制好Schmatic后,在原理图界面点击Launch,点击Layout XL进入版图绘制界面。 1.2 导入元件 1、在Layout XL界面左下角找到Generate All from Source。 2、在Generate Layout界面,选中“Instance”&#…

Spring事务的实现方式

前言 Spring的spring-tx模块提供了对事务管理支持,使用Spring事务可以让我们从复杂的事务处理中得到解脱,无需去处理获得连接、关闭连接、事务提交和回滚等这些操作。Spring事务管理是Spring框架提供的一个核心功能,它允许开发者以声明式或编…

线性代数(1)——线性方程组的几何意义

线性代数的基本问题是求解个未知数的个线性方程; 例如:(方程1)。 在线性代数的第一讲中,我们从Row Picture、Column Picture、Matrix Picture三个角度来看这个问题。 上面的系统是二维的。通过添加第三个变量&#…

没有对象来和我手撕红黑树吧

1. 红黑树的介绍 红黑树也是一种自平衡的二叉搜索树,在每一个节点增加了一个存储位来表示节点的颜色,可以是红色也可以是黑色,通过约束颜色来维持树的平衡,具有以下的性质: 每个节点不是红色就是黑色根节点为黑色如果…

Android中SurfaceView与GLSurfaceView 的关系

SurfaceView 与 GLSurfaceView 的关系 在 Android 开发中,SurfaceView 和 GLSurfaceView 是实现自定义渲染效果的关键组件。它们提供了不同的渲染方式,适用于不同的应用场景。我们将通过以下几个方面详细说明 SurfaceView 和 GLSurfaceView 的特点及实现…

DEVOPS: 容器与虚拟化与云原生

概述 传统虚拟机,利用 hypervisor,模拟出独立的硬件和系统,在此之上创建应用虚拟机是一个主机模拟出多个主机虚拟机需要先拥有独立的系统docker 是把应用及配套环境独立打包成一个单位docker 是在主机系统中建立多个应用及配套环境docker 是…

H7-TOOL的LUA小程序教程第16期:脉冲测量,4路PWM,多路GPIO和波形打印(2024-10-25, 更新完毕)

LUA脚本的好处是用户可以根据自己注册的一批API(当前TOOL已经提供了几百个函数供大家使用),实现各种小程序,不再限制Flash里面已经下载的程序,就跟手机安装APP差不多,所以在H7-TOOL里面被广泛使用&#xff…

西瓜书《机器学习》符号表KaTex表示

写这篇post的缘故是最近整理机器学习的相关公式,经常要用到 KaTeX \KaTeX KATE​X, 但网络上搜索到的西瓜书符号表的表示有些并不准确或不严谨,本着严谨治学的态度,整理了一下符号表的 KaTeX \KaTeX KATE​X表示,希望有所帮助,整理…

docker的安装配置与基本简单命令

目录 1.docker简介 2.docker安装 2.1使用root用户登陆 更新yum源 2.2安装依赖 2.3设置yum源 更新yum源索引 2.4安装docker 2.5启动并且设置开机自启动 2.6验证安装是否成功 2.7配置docker加速器 2.8重启docker服务 3.docker简单使用 3.1下载镜像 3.2列出…

从线性代数到unity mvp矩阵

坐标变换:矩阵是一种线性空间变换的描述(矩阵的列向量,是坐标变换后的基向量)。 如: 如上图,即向量(-1,2)在经过由基底x轴:(1, -2) ,y轴:(3, 0)组成的矩阵变换后得到向量(5,2) 实际上就是-1倍的x轴:(1, -2)加上2倍的y轴:(3,…

线程同步 线程安全

这里写目录标题 线程安全互斥锁**互斥锁初始化****互斥锁加锁和解锁****销毁互斥锁****互斥锁死锁****互斥锁的属性** 条件变量条件变量初始化通知和等待条件变量条件变量的判断条件 自旋锁自旋锁初始化自旋锁加锁和解锁 读写锁读写锁初始化读写锁上锁和解锁读写锁的属性 线程安…

使用Python和OpenCV实现火焰检测

使用Python和OpenCV实现火焰检测 项目解释: 此 Python 代码是使用 OpenCV、线程、声音和电子邮件功能的火灾探测系统的简单示例。 以下是它的功能的简单描述: 导入库:代码首先导入必要的库: cv2:用于图像和视频处理…

蓝桥杯基本算法~~~一维/二维前缀和问题

文章目录 1.一维前缀和2.二维前缀和3.移动零问题4.颜色的分类问题 1.一维前缀和 问题说明:一维就是表示的是一维数组的计算,我们的这个一维前缀和是基于这个一维数组进行计算的; 什么是前缀和:就是10 20 30 40 50这个数组&#…

ubuntu20.04系统安装

文章目录 前言参考1 一、准备工作1、进入BIOS,设置 UEFI/Legacy Boot选项 为UEFI2、进入BIOS界面将Secure Boot禁用3、USB启动为enable 二、单系统安装1、插入U盘,电脑正常开机后 总结 前言 装了很多次ubuntu系统,整理一篇自己的文章很费时间…

JS | CommonJS、AMD、CMD、ES6-Module、UMD五种JS模块化规范

目录 前言 一、CommonJS 模块化规范 二、ES6 模块化规范 三、AMD 模块化规范 四、CMD 模块化规范 五、UMD模块化规范 前言 这三个规范都是为Js模块化加载而生的,使模块能够按需加载,使系统同庞杂的代码得到组织和管理。模块化的管理代码使多人开发…

【宠物狗狗数据集】 犬类品种识别 宠物狗检测 深度学习 目标检测(含数据集)

一、背景意义 随着人们对宠物狗的喜爱日益增加,犬种的多样性也逐渐受到重视。狗狗不仅是家庭的好伴侣,更在多个领域中发挥着重要作用,如导盲、搜救、疗愈等。因此,准确识别和分类各种犬种显得尤为重要。传统的犬种识别方法往往依赖…