我正在尝试获取进程组的网络统计信息。据我所知,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/
它已被纳入主线内核。