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

我有一个Ubuntu服务器,我有兴趣测量有多less数据正在通过networking接口传输(进出), 由特定的用户 。 我该怎么做?

NB我知道如何测量整个机器的总数据传输。 我想限制我的监测到一个特定的用户。

你可以使用iptables规则来做到这一点。 这里有一些命令可以跟踪UID = 1000的用户的所有stream量

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查看计数器。 字节数是第二个字段。
对于inputstream量,您将需要查看INPUT下具有mark match 0x1的行。 对于输出stream量来说,它将是CONNMARK set 0x1的行。

细节:

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

这告诉iptables在uid = 1000的用户的所有出站stream量上设置防火墙标记1

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

这告诉iptables使用连接跟踪来确定哪些传入数据包与传出数据包相关联,并为该数据stream还原任何防火墙标记(即我们在上面设置标记的标记)。

 iptables -I INPUT -m mark --mark 1 

这告诉iptables匹配任何有防火墙标记1传入数据包。 我们没有对他们做任何事情,我们只是使用它,所以它会增加柜台。

你真正能做到的唯一方法就是编写你自己的系统Tap脚本。 我做了类似的Zabbix监测 。 链接上的脚本没有跟踪每个用户的数据,但它显示了基本的概念。