如何使用 cgroups 进行网络记账

如何使用 cgroups 进行网络记账

我正在尝试获取进程组的网络统计信息。据我所知,Linux 上的复杂网络记帐通常使用 netfilter/iptables 记帐基础结构完成。

因为我希望拥有继承权,所以对于这样的群体来说,cgroups这将是一个很好的匹配。

我最好的想法是让 iptables 匹配classid可以使用net_cls-controller 设置的。

但看起来,iptables 只能此值通过--set--class

那么:有没有一种好的方法可以获取 Linux 上进程组的(复杂而灵活的)网络会计和日志记录?

答案1

非常好的问题!谢谢。这个问题比较老套,但对这里的人有帮助。


A. 您可以将 cgroups 与 tc 一起使用。我从未听说过,但在谷歌搜索后发现了以下内容:

net_cls — 该子系统使用类标识符 (classid) 标记网络数据包,使 Linux 流量控制器 (tc) 能够识别来自特定 cgroup 任务的数据包。

据此您应该使用 tc 并从那里获取统计数据(有许多可用的工具)。

http://patchwork.ozlabs.org/patch/194809/

联系 Alexey,也许他可以帮你:)


B. 您可以使用 SELinux 和 iptables 进行统计,但使用 cgroups 限制带宽 - 我更喜欢这种方法 - 在某些情况下,tc 对我来说看起来很丑陋,并且不是集成的最佳选择。

SELinux 具有网络钩子,可以根据进程标签为每个数据包分配附加数据作为标签,甚至能够传输到另一个系统并过滤/记录/获取统计信息,使用 SECMARK 可以完成 iptables 所能做的一切。

http://selinuxproject.org/page/NB_Networking

如果您还不熟悉 SELinux,我建议您阅读 RedHat/Fedora 指南“安全增强型 Linux”和“SELinux FAQ”,此外还有非常好的解释和指南,Daniel J. Walsh(Dan Walsh)的博客文章 - 请在 Google 上搜索。

此外,对于新手来说非常好(也是更好)的起点是观看 YouTube 上的视频,我相信您可以在大约三个小时内理解您需要的一切:

  • 适合每个人的 SELinux - Paul Wayper
  • 系统管理员的 SELinux - Paul Wayper

SELINUX 很简单,别害怕

答案2

使用最新的内核,您可以直接在 iptables 中匹配 cgroups,参见:http://lwn.net/Articles/569678/

它已被纳入主线内核。

相关内容