如何在Linux中监控每个用户的networking使用情况?

我是本公司很多人使用的openSUSE linux服务器的pipe理员。

今天我们发现,昨天有一个用户使用了太多的带宽,对于pipe理部门来说很重要的是要注意哪个用户做了这个。

我在不同的网站和论坛等search,所有我觉得是ifconfigifstat只是显示整个networking的使用情况。 同时我还安装了一个工具vnstat来启动networking监视和日志logging,以便将来可能发生任何进一步的问题。

最后,我想知道是否有任何解决scheme来查找过去每个用户在特定时间的networking使用情况。 或者在linux中有一个日志文件负责用户的networking使用情况。

不,没有这样的日志文件。

你必须专门设置日志来做到这一点,我不知道有一个标准的方式来做到这一点。 要准确地做到这一点可能并不容易:用户可能会导致该用户不拥有的进程生成networkingstream量,并且将该stream量归于该用户可能并不重要。

看看这个近乎重复的问题或者这个 。

这很简单:使用iptables ,你也可以跟踪用户。 理论上,你可以阻止/删除/redirect他们的数据包,但现在你只想测量它们。 这很简单,因为iptables默认跟踪所有通过规则的数据。 示例代码在这里:

 iptables -A OUTPUT -o eth0 -m owner --uid-owner 1001 

iptables -L -v -n您将能够看到用户使用uid 1001发送了多less数据。

当然,这不是一个完整的解决scheme – 如果你愿意的话,也许是更好的select

  • 在脚本的另一个链中创build了uid跟踪器
  • 并用工具logging了这个计数器。

可能有现成的工具,但手动执行也不是那么复杂。

问题是您需要在networking连接和用户运行时build立链接。 一旦完成,这个链接就会丢失(至less,据我所知)。

保持这种信息的一种方法可以遵循这个问题中的解释:

如何在Ubuntu服务器上监控每个用户的networking带宽? 。 (askUbuntu)