如何使用 cgroup 進行網路記帳

如何使用 cgroup 進行網路記帳

我正在嘗試獲取進程組的網路統計資料。據我所知,Linux 上的複雜網路記帳通常是使用 netfilter/iptables 的記帳基礎設施來完成的。

因為我想為這樣的群體繼承遺產cgroups將是一個很好的匹配。

我最好的想法是讓 iptables 匹配classid可以使用net_cls-controller 設定的內容。

但看來,iptables只能該值透過--set--class.

那麼:有沒有一種很好的方法來取得(複雜且靈活的)Linux 上的進程組的網路記帳和日誌記錄?

答案1

這是一個非常好的問題!謝謝。舊的,但會幫助這裡的人


答:您可以將 cgroup 與 tc 一起使用。我從來沒有聽說過,但谷歌搜尋後發現以下內容:

net_cls — 此子系統使用類別識別碼 (classid) 標記網路資料包,讓 Linux 流量控制器 (tc) 識別源自特定 cgroup 任務的資料包。

據此,您應該使用 tc 並從那裡獲取統計數據(有許多可用的工具)。

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

聯絡 Alexey,也許他可以幫助你:)


B. 您可以使用 SELinux 和 iptables 進行統計,但使用 cgroup 限制頻寬 - 我更喜歡這種方法 - 在某些情況下 tc 對我來說看起來很難看,並且對於集成來說不是最佳選擇。

SELinux 有網路掛鉤,可以根據進程標籤為每個資料包分配附加資料作為標籤,甚至可以傳輸到另一個系統並過濾/記錄/獲取統計信息,透過使用 SECMARK 完成 iptables 所能做的一切。

http://selinuxproject.org/page/NB_Networking

如果您還不熟悉 SELinux,我建議您閱讀 RedHat/Fedora 指南“Security-Enhanced Linux”和“SELinux FAQ”,另外還有非常好的解釋和指南,Daniel J. Walsh (Dan Walsh) 的博客文章- 谷歌搜尋一下。

另外,對於新手來說,非常好的(也是更好的)起點是關注 YouTube 上的視頻,我相信您可以在大約三個小時內處理它以了解您需要的一切:

  • 適合每個人的 SELinux - Paul Wayper
  • 適用於系統管理員的 SELinux - Paul Wayper

SELINUX 很簡單,不用怕

答案2

使用最新的內核,您可以直接與 iptables 中的 cgroup 進行匹配,請參閱:http://lwn.net/Articles/569678/

它已被包含到主線核心中。

相關內容