从这个问题Linux 服务器上缺少统计信息 /proc/net/stat/nf_conntrack我意识到还有/proc/net/stat/nf_conntrack
另一种选择conntrack -S
。
/proc/net/stat/nf_conntrack 中有NEW
一个计数器,可以根据该计数器计算 CPS(每秒连接数)指标。但conntrack -S
我没有看到这样的计数器。
如何NEW
在没有 的情况下获取 conntrack 计数器/proc/net/stat/nf_conntrack
?有没有办法从 中获取它conntrack -S
?
答案1
在文件系统方法中显示此类统计数据的内核部分/proc
是那里:
if (v == SEQ_START_TOKEN) { seq_puts(seq, "entries searched found new invalid ignore delete delete_list insert insert_failed drop early_drop icmp_error expect_new expect_create expect_delete search_restart\n"); return 0; } seq_printf(seq, "%08x %08x %08x %08x %08x %08x %08x %08x " "%08x %08x %08x %08x %08x %08x %08x %08x %08x\n", nr_conntracks, 0, st->found, 0, st->invalid, st->ignore, 0, 0, st->insert, st->insert_failed, st->drop, st->early_drop, st->error, st->expect_new, st->expect_create, st->expect_delete, st->search_restart );
可以看出,字段searched
(被其他字段替换在更高版本的内核中),,,new
始终delete
显示delete_list
0:没有任何东西可以为这些字段提供信息。
正如我在之前的回答中所怀疑的那样(“或者可能已经过时”),无论是使用旧方法还是新方法,都没有关于此问题的统计数据。
这里是2016 年提交的删除了它们(可能适用于内核 4.9):
netfilter:conntrack:删除数据包热路径统计信息
这些计数器位于热路径中,并显示在 perf 中,对于“找到”和“搜索”尤其如此,它们会随着处理的每个数据包而增加。
类似信息
搜索=212030105
新=623431
找到=333613
删除=623327现在似乎没有什么帮助:
在繁忙的系统上,发现和搜索到的数据每隔几个小时就会溢出一次(这些是 32 位整数),在其他更繁忙的系统上,每隔几天就会溢出一次。
对于调试,有更好的方法,例如 iptables 的 trace target,conntrack log sysctls。现在我们还有 perf 工具。
这将删除数据包路径统计计数器,除了在正常系统上预计为 0(或接近于 0)的计数器,例如“insert_failed”(发生竞争)或“invalid”(原始跟踪器拒绝)。
为 ctnetlink 情况保留插入状态。为 tuple-is-taken 检查保留找到状态,此时 NAT 必须确定是否需要选择不同的源地址。
选择
您可以使用连接跟踪工具(在 Ubuntu 上打包那里) 可配置为记录事件以仅提供日志和统计信息(而不是其主要用途,用于高可用性集群中多个防火墙之间的透明故障转移)。Ubuntu 可能默认提供统计信息配置(或在文档中)。以下是conntrackd
运行该服务的系统上的示例:
# conntrackd -s ct; sleep 5; conntrackd -s ct
[Fri Oct 15 08:34:08 2021] (pid=3443753) [warning] deprecated unix backlog configuration, ignoring.
cache stats:
current active connections: 65
connections created: 121807 failed: 0
connections updated: 116158 failed: 0
connections destroyed: 121742 failed: 0
traffic processed:
0 Bytes 0 Pckts
[Fri Oct 15 08:34:13 2021] (pid=3443756) [warning] deprecated unix backlog configuration, ignoring.
cache stats:
current active connections: 68
connections created: 121811 failed: 0
connections updated: 116163 failed: 0
connections destroyed: 121743 failed: 0
traffic processed:
0 Bytes 0 Pckts
该工具显示connections created:
从 121807 到了 121811。我相信这相当于new
从内核中删除的字段。
注意:traffic processed:
当然是用于两个防火墙之间的防火墙到防火墙通信连接跟踪守护进程(因此这里始终为 0)。