我正在嘗試獲取進程組的網路統計資料。據我所知,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/
它已被包含到主線核心中。