本文发布于Cylon的收藏册,转载请著名原文链接~

在Prometheus node-exporter中,存在多个网络监控指标指标标志着主机的网络状态,但是大家常常忽略这些指标,而这些指标又很重要,这些指标的来源是根据Linux网络子系统中的多个计数器定义的,本文就解开这些TCP计数器的面目。

TcpExtListenOverflows 和 TcpExtListenDrops

当内核从客户端接收到 SYN 时,如果 TCP 接受队列已满,内核将丢弃 SYN 并将 TcpExtListenOverflows +1。同时内核也会给TcpExtListenDrops +1。当 TCP 套接字处于 LISTEN 状态,并且内核需要丢弃数据包时,内核总是将 TcpExtListenDrops +1。因此,增加 TcpExtListenOverflows 将使 TcpExtListenDrops 同时增加,但在不增加 TcpExtListenOverflows 的情况下,TcpExtListenDrops 也会增加,例如内存分配失败也会导致 TcpExtListenDrops 增加。

以上解释基于内核 4.10 或更高版本,在旧内核上,当 TCP 接受队列已满时,TCP Stack有不同的行为。在旧内核上,TCP Stack不会丢弃 SYN,它会完成 3 次握手。当接受队列已满时,TCP 堆栈会将套接字保留在 TCP 半开队列中。由于处于半开队列中,TCP 堆栈将在指数退避计时器上发送 SYN+ACK,在客户端回复 ACK 后,TCP Stack检查接受队列是否仍满,如果未满,则将套接字移至接受队列如果队列已满,则将套接字保留在半开队列中,下次客户端回复ACK时,该套接字将有另一次机会移至接受队列。

这两个计数器在 node_expoter 中的指标是:

  • node_netstat_TcpExt_ListenDrops
  • node_netstat_TcpExt_ListenOverflows

TcpInSegs 和 TcpOutSegs

TcpInSegs 和 TcpOutSegs 都是被定义在 RFC1213 [1]

TcpInSegs 是指 TCP layer 接收到的数据包数量,包括错误接收的数据包,例如校验和错误、无效的TCP头等。只有一个错误不会被包含在内:如果第 2 层目标地址不是 NIC 的第 2 层地址。如果数据包是多播或广播数据包,或者 NIC 处于混杂模式,则可能会发生这种情况。在这些情况下,数据包将被传递到 TCP 层,但 TCP 层将在增加 TcpInSegs 之前丢弃这些数据包。 TcpInSegs 计数器不知道 GRO (Generic Receive Offload)。因此,如果两个数据包被 GRO 合并,TcpInSegs 计数器只会增加 1。

TcpOutSegs 是指 TCP layer 发送的数据包数量,它排除了重传的数据包。但它包括 SYN, ACK 和 RST 数据包。与 TcpInSegs 不同,TcpOutSegs 能够识别 GSO (Generic Receive Offload),因此如果数据包被 GSO 分割为 2,TcpOutSegs 将增加 2。

这两个计数器在 node_expoter 中的指标是:

  • node_netstat_Tcp_InSegs
  • node_netstat_Tcp_OutRsts

TcpPassiveOpens 和 TcpActiveOpens

TcpPassiveOpens 和 TcpActiveOpens 都是被定义在 RFC1213 [1]

TcpPassiveOpens 是指 TCP层收到一个SYN,回复一个 SYN+ACK,进入 SYN-RCVD 状态。

TcpActiveOpens 是指 TCP 层发送了一个SYN,并进入 SYN-SENT 状态。每次 TcpActiveOpens +1,TcpOutSegs 应始终+1

这两个计数器在 node_expoter 中的指标是:

  • node_netstat_Tcp_PassiveOpens
  • node_netstat_Tcp_ActiveOpens

TcpEstabResets 和 TcpOutRsts

TcpEstabResets 和 TcpOutRsts 都是被定义在 RFC1213 [1]

TcpEstabResets 指 TCP 连接从 ESTABLISHED 状态或 CLOSE-WAIT 状态直接转换到 CLOSED 状态的次数。

TcpOutRsts 指发送的包含 RST 标志的 TCP 段的数量。

这两个计数器在 node_expoter 中的指标是:

  • node_netstat_Tcp_OutRsts
  • node_netstat_Tcp_ActiveOpens

TCPSynRetrans

SYN 和 SYN/ACK 重传 (Retransmit )次数,将重传分为 SYN, 快速重传, 超时重传等。

这个计数器在 node_expoter 中的指标是:

  • node_netstat_TcpExt_TCPSynRetrans

Reference

[1] RFC1213

[2] SNMP counter

本文发布于Cylon的收藏册,转载请著名原文链接~

链接:https://www.oomkill.com/2023/10/linux-network-conunter/

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」 许可协议进行许可。