当前位置: 首页 > ds >正文

nettrace工具介绍

简介

仓库地址: https://github.com/OpenCloudOS/nettrace

背景: 在云原生场景中,linux系统中的网络部署变得越来越复杂,一个tcp连接,从客户端到服务器,中间可能要经过复杂的NATGREIPVS等过程,网络报文在节点上的处理路径也变得越来越长,在发生网络故障时,如何快速定位、有效地定位出网络问题成为一个难题

现有的网络工具:

  • tcpdump:只能在链路层抓包,无法定位内核协议栈中的问题,比如常规的内核丢包问题
  • ftrace:只能追踪内核函数,无法进行报文过滤,且入手较难,需要对内核协议栈有一定了解
  • kprobe:临时编写内核模块,效率和安全性低
  • BCC:功能单一,临时编写BCC程序跟踪效率低,需要对内核有一定了解
  • dropwatch:功能单一,只能查看网络丢包问题

功能介绍:

  • 网络报文追踪:跟踪网络报文从进入到内核协议栈到释放/丢弃的过程中在内核所走过的路径,实现报文整个生命周期的监控,并采集生命周期各个阶段的事件、信息。
  • 网络故障诊断:将以往的经验集成到工具的知识库,通过知识匹配的方式来主动诊断当前网络故障,给出诊断结果以及修复建议。
  • 网络异常监控:常态化部署到生产环境中,主动地发现、上报环境上的网络异常
  • droptrace:用于跟踪、监控系统中的丢包事件的工具,目前已经集成到nettrace中,通过nettrace --drop使用
  • 性能分析:通过跟踪协议栈处理延迟、TCP RTT等信息进行网络性能分析

工作机制:

{% asset_img nettrace工作机制-6773285.png %}

参数介绍

过滤类参数

s/saddr: 根据源ip地址过滤网络包

d/daddr: 根据目标ip地址过滤网络包

addr: 根据源或目标地址ip过滤网络包

S/sport: 根据源TCP/UDP端口过滤网络包

D/dport: 根据目的TCP/UDP端口过滤网络包

P/port: 根据源或目标TCP/UDP端口过滤网络包

p/proto: 根据L3/L4协议过滤网络包

netns: 根据网络命令空间进行过滤,该参数后面跟的是网络命名空间的inode,可以通过ls -l /proc/<pid>/ns/net来查看对应进程的网络命名空间的inode号

netns-current: 仅显示当前网络命名空间的报文

pid: 根据当前处理报文的进程id进行过滤

min-latency: 根据报文的寿命进行过滤, 仅打印处理时长超过该值的报文,单位为us。该参数在默认/diag/latency模式下可用

pkt-len: 根据IP报文总长度来进行过滤

tcp-flags: 根据tcp报文的flags进行过滤,支持的flag包括:SAPRF

模式类参数

默认启用的是生命周期跟踪模式

basic: 基本模式,会直接打印出报文所经过的内核函数/tracepoint。

diag: 启用诊断模式

diag-quiet: 只显示出现存在问题的报文,不显示正常的报文

diag-keep: 持续跟踪,diag模式下,默认在跟踪到异常报文后会停止跟踪,使用该参数后,会持续跟踪下去

drop: 进行系统丢包监控

drop-stack: 打印kfree_skb内核函数的调用堆栈,等价于--trace-stack kfree_skb

sock: 启用socket模式。这个模式下,不会再跟踪报文(skb),而会跟踪socket

monitor: 启用监控模式。一种轻量化的实时监控系统中网络异常的模式

rtt: 启用Rtt统计模式,会统计tcp rtt分布情况

rtt-detail: 详细模式,输出符合过滤条件的每个报文的rtt数据

filter-srtt: 根据srtt来进行过滤,rtt/rtt-detail模式下可用,单位ms

filter-minrtt: 根据minrtt来进行过滤,rtr/rtt-detail模式下可用,单位ms

latency-show: 显示延迟(协议栈处理耗时)信息, basic/sock模式下不可用

latency: 启用延迟分析模式,可以高效分析每个报文协议处理耗时

latency-summary: 启用延迟分析统计模式,可以统计协议栈处理耗时的分布情况

显示类参数

t/trace

概述: 要启用的跟踪group或者是具体的追踪点(通过trace.yaml可以知道所有的group以及追踪点)

示例:

nettrace -t tcp
nettrace -t tcp_v4_send_reset

ret

跟踪和显示内核函数的返回值

detail

显示跟踪详细信息,包括当前的进程、网口和cpu等信息

date

以时间格式打印,而不是时间戳

c/count

指定要跟踪的报文个数c,达到该个数后自动退出

hooks

结合netfilter做的适配

tiny-show

精简显示,只显示第一个报文的内容,用于提升性能

trace-stack

概述: 指定需要进行堆栈打印的内核函数,可以指定多个,用","分隔

示例:

nettrace --trace-stack tcp_send_active_reset

trace-matcher

指定进行报文匹配的内核函数,默认所有的函数,用于提升性能

trace-exclude

概述: 不进行跟踪的group或者是具体的追踪点(通过trace.yaml可以知道所有的group以及追踪点)

示例:

nettrace --trace-exclude life
nettrace --trace-exclude kfree_skb

trace-noclone

不跟踪报文的clone时间,即不把clone出来的报文和当前报文放到一块跟踪

func-stats

只统计内核函数被调用的次数,不打印具体的报文,可指定过滤条件

rate-limit

进行限速,限制每秒事件输出的数量

btf-path

手动指定btf文件的路径

debug

概述: 显示nettrace中的debug信息

bpf-debug

概述: 启用ebpf程序的debug日志输出,需要在使用make编译时添加选项BPF_DEBUG=1

示例:

make BPF_DEBUG=1
nettrace --bpf-debug
http://www.xdnf.cn/news/7771.html

相关文章:

  • GraphPad Prism工作表的管理
  • Baumer工业相机堡盟工业相机的工业视觉如何对高反光圆柱体生产日期进行识别检测
  • 8.MySQL故障排查与生产环境优化
  • 铸铁平台:承载千斤重担的工业基石
  • 视觉语言模型之困:当否定词成为理解的“盲区”
  • 挖o心得(2)
  • TYUT-企业级开发教程-第6章
  • CUMT-教务系统登录功能实现
  • labelme的安装与使用(以关键点检测为例)、labelme格式标签转换
  • 基础知识与协议
  • 迁移学习:让AI像人类一样举一反三的智慧引擎
  • CNN、RNN、Transformer对于长距离依赖的捕捉能力分析
  • Node.js AI 通义灵码 VSCode 插件安装与功能详解
  • 【Linux】48.高级IO(2)
  • Leetcode 01 java
  • 已解决:Git冲突完全解决指南(附最佳实践)
  • ANSI V 级对夹球阀控制阀:高性价比零泄漏流体控制新选择-耀圣
  • Windows下使用Windeployqt.exe打包后运行exe程序报错0xc000007b问题解决方法
  • 数组day2
  • 在hadoop中实现序列化与反序列化
  • YOLOv12和MAF-YOLO的核心技术细节
  • 软考软件评测师——软件工程之开发模型与方法
  • Java中的工具类Collections和Arrays
  • odoo-052 odoo启动提示:OSError: [Errno 98] Address already in use,端口占用
  • 一些C++入门基础
  • 记忆化搜索全面解析
  • 基于 STM32 的蔬菜智能育苗系统硬件与软件设计
  • 第41天-Python+Qt四屏播放器开发指南
  • Java实践:调用jar包里的方法
  • 以太网口16路数字量DI输入采集模块 Modbus TCP协议