nettrace工具介绍

发布于:2025-05-21 ⋅ 阅读:(20) ⋅ 点赞:(0)

简介

仓库地址: 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

网站公告

今日签到

点亮在社区的每一天
去签到