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

本文涉及的产品
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 本文介绍云原生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来采集内核中的网络指标,敬请期待。

相关文章
|
29天前
|
存储 算法 Java
深入理解JVM:内存管理与垃圾回收机制探索
JVM是Java程序的运行核心,实现跨平台、自动内存管理与高效执行。其架构包括类加载、运行时数据区、执行引擎等模块。内存模型历经演变,JDK 8起以元空间替代永久代,优化GC性能。JVM通过分代回收机制,结合标记清除、复制、整理等算法,管理对象生命周期,提升系统稳定性与性能。
|
2月前
|
Kubernetes Java Go
Cloud Naive最佳开发实践
经过多年的工作,我们的精神导师John领悟了java那一套docker in docker的艺术并带到golang项目架构设计中。
408 50
|
8天前
|
人工智能 运维 监控
从代码到生产推理服务:DevPod 全流程部署 DeepSeek-OCR 模型实战指南
DevPod重塑AI开发范式,实现从云端开发、调试到生产部署的全流程闭环。依托预置环境与GPU资源,一键完成模型服务化,打通AI落地“最后一公里”,让开发者专注业务创新。
|
2月前
|
人工智能 IDE Java
AI Coding实践:CodeFuse + prompt 从系分到代码
在蚂蚁国际信贷业务系统建设过程中,技术团队始终面临双重考验:一方面需应对日益加速的需求迭代周期,满足严苛的代码质量规范与金融安全合规要求;另一方面,跨地域研发团队的协同效率与代码标准统一性,在传统开发模式下逐渐显现瓶颈。为突破效率制约、提升交付质量,我们积极探索人工智能辅助代码生成技术(AI Coding)的应用实践。本文基于蚂蚁国际信贷技术团队近期的实际项目经验,梳理AI辅助开发在金融级系统快速迭代场景中的实施要点并分享阶段性实践心得。
403 25
AI Coding实践:CodeFuse + prompt 从系分到代码
|
29天前
|
人工智能 算法 数据安全/隐私保护
La Suite Docs:开源协作文档平台,可私有部署的 Notion 替代方案
法国政府开源的企业级协作文档平台,GitHub 14.3k star。基于 Django+React 开发,支持实时协作、离线编辑、AI 辅助写作,可私有部署,是 Notion 的开源替代方案。转自:https://yunpan.plus/t/505-1-1
|
2月前
|
运维 监控 数据可视化
从巴比馒头的“洗菜流水线”,来看“telemetry pipeline”工具的火热兴起
以巴比馒头自动化洗菜为喻,探讨运维领域“数据清洗”难题。DataHub作为国产可视化遥测管道工具,支持多源数据接入与低代码编排,实现日志、指标、链路等数据的高效处理与统一管理,助力企业构建高质量可观测体系。(238字)
|
2月前
|
Kubernetes 监控 Cloud Native
Java Agent 启动耗时性能评测排行榜
在云原生与微服务高频发布场景下,APM探针启动延迟影响容器生命周期。本文对比主流Java APM方案启动耗时,揭示Databuff探针以43秒领先,较SkyWalking(66秒)显著优化。分析其按需字节码注入、异步上报、无锁配置等低开销设计,并提供K8s探针配置建议,助力提升部署效率与系统稳定性。
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
995 62
|
22天前
|
运维 监控 数据可视化
别让运维跪着查日志了!给老板看的“业务观测”大盘才是真香
深夜告警、业务暴跌、全员背锅?一次支付故障暴露传统监控盲区。我们通过业务观测,将技术指标转化为老板听得懂的“人话”,实现从被动救火到主动洞察的跨越。让技术团队不再跪着查日志,而是站着驱动业务增长。
别让运维跪着查日志了!给老板看的“业务观测”大盘才是真香
|
2月前
|
人工智能 文字识别 并行计算
为什么别人用 DevPod 秒启 DeepSeek-OCR,你还在装环境?
DevPod 60秒极速启动,一键运行DeepSeek OCR大模型。告别环境配置难题,云端开箱即用,支持GPU加速、VSCode/Jupyter交互开发,重塑AI原生高效工作流。
624 35