ss -it 对于重传(retrans)和丢包的命令说明

问题描述 投票:0回答:1

我需要监控我的 kubernetes 集群的网络,我正在使用用 Go 编写的 netlink 包来做到这一点。 https://github.com/vishvananda/netlink

我能够解析此处提到的 tcpInfo 类型中的所有字段https://github.com/vishvananda/netlink/blob/9ada19101fc5585d550e5cc0b43c28873214820a/tcp.go#L20并将其发送到时间刻度数据库并在 Grafana 中解析。

然而,对我来说一个主要要求是将指标显示为百分比。也许结合 tcpInfo 结构中提到的一些字段。这些是我的要求。

  1. 发送率:(另一端发送/接收的数据包的比率)。这看起来很复杂,但可以使用 db 查询在 grafana 中提取。
  2. 丢包率:丢包或丢弃的百分比。我不确定在此使用哪些指标。我希望它包含(数据包丢失/确认后发送的数据包)。我似乎有三个可用的指标。 lostunacked/sacked 我不确定这些是否会给我正确的值,因为根据这篇文章 unacked 应该给我正确的值(在确认该时间帧之后),但它总是返回 0 .
  3. 重传率:DL层帧重传的百分比(与此相同的问题。不确定应该使用哪些指标来扣除)。

这是我的节点中 ss -it 的示例输出

vjain@hk-osfebn-1298 ~]$ ss -it
..
..
ESTAB      0      0                                                                                      10.118.228.4:52388                                                                                              10.118.223.244:amqp                 
     cubic wscale:7,9 rto:201 rtt:0.132/0.012 ato:40 mss:1448 rcvmss:536 advmss:1448 cwnd:10 ssthresh:9 bytes_acked:1063335432 bytes_received:14283091 segs_out:7802018 segs_in:6550978 send 877.6Mbps lastsnd:33778 lastrcv:28454 lastack:28454 pacing_rate 1748.5Mbps retrans:0/28 rcv_rtt:88378.6 rcv_space:35246
..
..

我似乎无法理解 retrans 或 rtt 的输出。 在retrans:0/28中,0是重传次数,28是发送的数据包总数?但我在 grafana 仪表板中使用 ss 输出中给出的端点看不到任何值为 28 的指标。此外,似乎没有与丢失数据包相关的输出,但 netlink 包从

lost_out
https://elixir.bootlin.com/linux/latest/source/include/linux/tcp.h
中的 include/linux/tcp.h

派生它
sockets linux-kernel netlink network-monitoring
1个回答
0
投票

我不是 TCP 或 Linux 内核方面的专家。但是通过浏览 iproute2 源代码,第一个值指向 s->retrans,秒值指向 s->total_retrans。

s->retrans 是从 /proc/net/tcp 中提取的,其中有一个

retrnsmt
列,可能代表 未恢复的 RTO 超时数

s->total_retrans 来自内核网络指标

info->tcpi_total_retrans
,这可能意味着重传的总数。

所以我猜值 0/28 可能意味着 0 个数据包未从 RTO 超时中恢复,并且由于 RTO 重传而发送了 28 个数据包?

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.