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

1

背景

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

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

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

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

2

实现说明

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

2.1. eBPF数据采集接口

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

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

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

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

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

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

2.2. 数据汇总处理

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

3

使用限制

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

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

4

使用说明

4.1 安装采集应用

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

4.2 查看观测视图

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

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

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

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

5

关注云舟观测

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

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

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

相关推荐
hopetomorrow13 分钟前
学习路之PHP--使用GROUP BY 发生错误 SELECT list is not in GROUP BY clause .......... 解决
开发语言·学习·php
网络安全-杰克21 分钟前
网络安全概论
网络·web安全·php
不是二师兄的八戒23 分钟前
本地 PHP 和 Java 开发环境 Docker 化与配置开机自启
java·docker·php
怀澈12225 分钟前
高性能服务器模型之Reactor(单线程版本)
linux·服务器·网络·c++
耗同学一米八1 小时前
2024 年河北省职业院校技能大赛网络建设与运维赛项样题二
运维·网络·mariadb
skywalk81631 小时前
树莓派2 安装raspberry os 并修改成固定ip
linux·服务器·网络·debian·树莓派·raspberry
爱分享的码瑞哥1 小时前
Python爬虫中的IP封禁问题及其解决方案
爬虫·python·tcp/ip
_不会dp不改名_1 小时前
HCIA笔记3--TCP-UDP-交换机工作原理
笔记·tcp/ip·udp
co0t1 小时前
计算机网络(14)ip地址超详解
服务器·tcp/ip·计算机网络
C++忠实粉丝1 小时前
计算机网络socket编程(3)_UDP网络编程实现简单聊天室
linux·网络·c++·网络协议·计算机网络·udp