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

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

我是我们公司很多人使用的 openSUSE Linux 服务器的管理员。

今天我们发现昨天有一个用户使用了过多的带宽,管理部门需要注意是哪个用户做了这件事。

ifconfig我已经在不同的网站和论坛等处进行了搜索,但找到的ifstat只是显示整个网络使用情况。并且我还安装了一个工具vnstat来启动网络监控和日志记录,以防将来可能发生任何进一步的问题。

最后,我想知道是否有任何解决方案可以找出每个用户过去特定时间内的网络使用情况。或者 Linux 中是否有一个日志文件负责跟踪用户的网络使用情况。

答案1

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

您必须专门设置日志才能执行此操作,我不知道执行此操作的标准方法。准确执行此操作可能并不容易:用户可能会导致不属于该用户的过程产生网络流量,并且将该流量归因于该用户可能并不容易。

例如这个几乎重复的问题或者这个

答案2

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

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

之后iptables -L -v -n你将能够看到 uid 为 1001 的用户发送了多少数据。

当然,这不是一个完整的解决方案——也许一个更好的选择是,如果你

  • 在脚本中不同的链中创建了 uid 跟踪器
  • 并使用工具记录此计数器。

可能有现成的工具可以实现这一点,尽管手动实现它也并不是那么复杂。

答案3

问题是你需要在网络连接运行时建立与用户之间的链接。一旦完成,此链接就会丢失(至少据我所知)。

保存此信息的一种方法可以按照此问题中的解释进行操作:

如何监控 Ubuntu 服务器上每个用户的网络带宽?。 (询问Ubuntu)

相关内容