一篇文章带你了解云原生NPM数据采集和指标计算方法

简介: 本文介绍云原生NPM中如何采集TCP连接数据,计算网络指标,并关联应用进程。通过构建包含四元组、收发字节数、延迟等字段的数据结构,结合抓包与系统命令获取PID、UID等信息,实现网络与应用的联动分析,助力快速定位故障根源。

在之前的一篇文章《云原生NPM与传统NPM的差异》中,我们了解到,传统NPM通过对物理设备的网络流量进行镜像,可以统计出网络层面的各种指标,也可以分析出网络延迟、带宽、重传等性能相关的指标。但是在实际工作中发现,网络层面的异常信息只是第一步,定位到产生异常的服务和原因,才能真正解决问题。本篇我们将讲述如何在云原生NPM中获取网络数据及相关网络指标的计算方法,以及如何将网络与具体应用进程进行关联,从而有助于快速地定位到可疑点。

1、设计数据结构

该结构描述了一条TCP网络连接(本篇只关注TCP连接的应用)的主要信息,以该数据结构为基础,可以得到以应用/进程为视角的网络状态。除此之外,还可以增加其它字段,如错误报文数、重传报文数、乱序报文数,等等。图片 4

2、获取字段值

  • ClientIP, ServerIP, ClientPort, ServerPort
    网络连接的四元组。从捕获的网络报文中可以解析出IP和Port信息。TCP连接有三次握手的过程,第一次握手的时候由客户端发起syn请求,根据这个信息可以确定Client。

image.png

  • BytesReceived, BytesSent, PacketsReceived, PacketsSent
    对服务端接收和发送的报文数、字节数进行统计。因为服务端接收就等于客户端发送,所以只需要统计一个方向的数据即可。

Rtt, Crt, Art, Ptt这几个与时间相关的性能指标无法直接从网络报文中获取,需要通过一些算法计算,计算方法如下图所示:

image.png

对于旁路抓包,该图中隐含了一个重要信息:传统的NPM抓包位置要么靠近client, 要么靠近server。而云原生中的NPM要么位于client,要么位于server。这个抓包位置的变化,导致性能指标的计算方法略有区别。

  • Rtt (round trip time)
    计算时要区分该连接的目标地址是否为本机地址,如果是,意味着该连接是远端访问本地的一个服务,按照上图中server角色来计算:T(ack) – T(synack);否则,按client角色来计算:T(synack) – T(syn)
  • Crt (client response time)
    按client角色来计算:T(http-get) – T(ack)
  • Art (application response time)
    按 server 角色来计算: T(http-response) – T(http-get)

  • Ptt (payload transaction time)
    按client 或 server角色都可以,数据传输的总时间。

剩下的两个字段,PID和UID,分别表示进程ID和用户ID,这两个字段的值无法在网络包中获取,需要从操作系统中获取。下图是linux系统下运行 netstat -nopt 的输出。

image.png

从中可以看到一条连接的四元组信息,还有PID和进程名。

到此,我们已经获取了本文开头结构中的所有字段的值。很多的应用日志框架都会默认输出PID信息,因此,通过PID还可以将网络指标与应用的日志进行关联,为相关的故障诊断提供更丰富的上下文信息。

3、结尾

通过对网络数据的分析,可以计算出一些与网络质量相关的关键指标,用于定位与网络相关的故障根因。TCP协议栈本身是一个比较复杂的系统,内部11种状态之间的转换与开销对于外部来说是一个完全的黑盒,但是对于定位问题有时却很关键。那如何观测这些关键信息呢?后续文章将介绍如何使用eBPF来采集内核中的网络指标,敬请期待。

相关文章
|
3月前
|
存储 算法 Java
深入理解JVM:内存管理与垃圾回收机制探索
JVM是Java程序的运行核心,实现跨平台、自动内存管理与高效执行。其架构包括类加载、运行时数据区、执行引擎等模块。内存模型历经演变,JDK 8起以元空间替代永久代,优化GC性能。JVM通过分代回收机制,结合标记清除、复制、整理等算法,管理对象生命周期,提升系统稳定性与性能。
|
3月前
|
人工智能 运维 Cloud Native
一起聊聊大规模 AI Agent 部署与运维实战
诚挚地邀请您参加将于 11 月 28 日(周五)下午,在北京阿里中心举办的 【企业 AI 原生应用架构升级】主题研讨会。
|
4月前
|
运维 监控 数据可视化
从巴比馒头的“洗菜流水线”,来看“telemetry pipeline”工具的火热兴起
以巴比馒头自动化洗菜为喻,探讨运维领域“数据清洗”难题。DataHub作为国产可视化遥测管道工具,支持多源数据接入与低代码编排,实现日志、指标、链路等数据的高效处理与统一管理,助力企业构建高质量可观测体系。(238字)
|
3月前
|
存储 Java Go
Goroutine间的“灵魂管道”:Channel如何实现数据同步与因果传递?
Channel是Go实现CSP并发模型的核心,通过goroutine间安全的数据传递与同步,避免锁和条件变量的复杂性。其底层基于循环队列与等待队列,支持发送接收、阻塞唤醒等机制,并建立happens-before因果关系,确保并发确定性。
1327 0
|
3月前
|
人工智能 自然语言处理 安全
Serverless AI 原生架构破局「三高」困境
在 AI 大模型浪潮席卷全球的今天,企业纷纷加速拥抱 AI,推动智能客服、内容生成、流程自动化等场景快速落地。然而,许多企业在实践中却遭遇了“三高困境”——成本高、复杂度高、风险高。Serverless AI 原生架构不仅是技术演进,更是企业智能化转型的关键基础设施。它让开发者聚焦业务逻辑,让企业告别“基建焦虑”,让 AI 真正“飞入寻常百姓家”。
|
4月前
|
人工智能 Kubernetes Cloud Native
KCD 杭州站 x OpenInfra Days China 首次联手!议程全公开,超强 Speaker 阵容抢先看
11 月 15 日杭州浙大森林会议中心,与全球技术精英面对面交流,共探技术前沿,名额有限,先到先得~
396 42
|
3月前
|
人工智能 运维 监控
告别重复劳动:使用n8n核心触发器(Cron, Webhook, 手动)开启自动化之旅
在数字时代,n8n作为开源自动化工具,通过手动、定时(Cron)和Webhook三大核心触发器,实现任务的智能调度与流程自动化。掌握它们,即可轻松解放双手,提升效率,开启高效工作新模式。
|
4月前
|
运维 算法 数据挖掘
【故障定位系列】基于DeepSeek的故障定位大揭秘
传统故障定位依赖专家经验与固定算法,难以应对复杂场景。引入DeepSeek大模型后,可凭借其强大推理与自适应能力,实现智能故障定位。通过“大模型+Agent”协同架构,大模型负责决策,Agent执行数据分析,既降低Token消耗,又保留智能化分析优势。未来,随着大模型理解与推理能力提升,故障定位将更高效、精准。
|
3月前
|
JavaScript 前端开发 vr&ar
JSAR 粒子系统实战:打造炫酷 3D 烟花秀
本文介绍如何使用 JSAR 与 Babylon.js 打造 3D 烟花粒子系统。无需 Unity,前端开发者可借助熟悉的技术栈,在 Rokid AR 眼镜上实现沉浸式空间应用,涵盖粒子系统原理、性能优化及跨平台开发实践。
270 2
|
3月前
|
人工智能 自然语言处理 安全
MCP 打造 AI Agent 的 5 大最佳实践
面对流量激增、系统告急,单一渠道AI Agent难堪重负?问题不在能力,在架构!MCP(多渠道平台)作为智能体“神经中枢”,可统一调度Web、微信、钉钉等多渠道任务,实现高并发、可扩展的自动化。本文详解企业级MCP构建AI Agent的五大最佳实践:模块拆分、工具选型、设计模式、上下文管理与安全可控,助你快速落地高效、稳定的智能系统。