如何测量与特定用户相关的网络接口的数据传输?

如何测量与特定用户相关的网络接口的数据传输?

我有一台 Ubuntu 服务器,我想测量通过网络接口传输的数据量(包括传入和传出)。由特定用户。 我该怎么做?

注意:我知道如何测量整台机器的总数据传输量。我想将我的监控限制在特定用户身上。

答案1

您可以使用 iptables 规则来执行此操作。以下是一些命令,它们将跟踪 UID=1000 的用户的所有流量

iptables -I OUTPUT -m owner --uid-owner 1000 -j CONNMARK --set-mark 1
iptables -I INPUT -m mark --mark 1
iptables -I INPUT -j CONNMARK --restore-mark

然后,您可以使用 查看计数器iptables -nvL。字节数是第二个字段。
对于输入流量,您需要查看 INPUT 下mark match 0x1末尾带有 的行。对于输出流量,它将是CONNMARK set 0x1末尾带有 的行。

细节:

iptables -I OUTPUT -m owner --uid-owner 1000 -j CONNMARK --set-mark 1

1这告诉 iptables对来自 uid=1000 的用户的所有出站流量设置防火墙标记。

iptables -I INPUT -j CONNMARK --restore-mark

这告诉 iptables 使用连接跟踪来找出哪些传入数据包与传出数据包相关联,并恢复流的任何防火墙标记(即,我们上面设置标记的标记)。

iptables -I INPUT -m mark --mark 1

这告诉 iptables 匹配任何带有防火墙标记的传入数据包1。我们不对它们做任何事情,我们只是使用它,这样它就会增加计数器。

答案2

唯一能真正实现这一点的方法是编写自己的 System Tap 脚本。我做了类似的事情Zabbix监控。链接处的脚本不跟踪每个用户的数据,但它显示了基本概念。

相关内容