Linux

隨著時間的推移監控頻寬,不包括某些網路?

  • February 16, 2011

我想監控我的 Linux 伺服器的頻寬使用情況,但有一個問題:我的兩台伺服器之間的流量不計入我的利益,只計入整個網際網路的流量。但是,我的伺服器只有一個網路介面,而且我嘗試過的幾乎所有東西都是在每個介面的基礎上進行測量的。有誰知道可以生成頻寬圖的工具,同時不計算進出某些 IP 範圍的流量?

如果它生成 RRD 文件(我已經可以很容易地繪製它們),則加分;如果它與 collectd(標準 collectd 的配置,或它的外掛)一起使用,則加倍加分。

假設您無法訪問提供與您的 ISP 看到的相同數據視圖的上游路由器或交換機,您可以在每台主機上使用 iptables accounting to 來計算發往除您的其他 IP 地址(或 IP range),然後自己將其插入 RRD。

編輯

例如,您可以在 iptables 中使用一些類似這些規則的規則來創建記帳:

iptables -N ACCOUNT_IN
iptables -N ACCOUNT_OUT
iptables -I INPUT -j ACCOUNT_IN
iptables -I OUTPUT -j ACCOUNT_OUT

iptables -I ACCOUNT_IN -s ! 10.66.1.0/24
iptables -I ACCOUNT_OUT -d ! 10.66.1.0/24

這將創建兩個新鏈 ACCOUNT_IN 和 ACCOUNT_OUT。然後我在 INPUT 和 OUTPUT 鏈的頂部插入跳轉到這些。在每個鏈中,我添加了一個沒有跳轉目標的規則來匹配遠端地址 - 對於輸入,任何在我的本地 /24 上沒有地址作為源的東西;對於輸出,任何在我的本地 /24 上沒有地址作為目的地的東西。然後數據包從這個鏈返回到您的正常 INPUT/OUTPUT 鏈,因為沒有跳轉規則。

檢查會計數據:

# iptables -L ACCOUNT_IN -n -v
Chain ACCOUNT_IN (1 references)
pkts bytes target     prot opt in     out     source               destination         
   5  2138            all  --  *      *      !10.66.1.0/24         0.0.0.0/0 

# iptables -L ACCOUNT_OUT -n -v 
Chain ACCOUNT_OUT (1 references)
pkts bytes target     prot opt in     out     source               destination         
  15  2846            all  --  *      *       0.0.0.0/0           !10.66.1.0/24    

從那裡您可以提取這些 pkt/字節計數並傳遞給 rrdupdate(我假設您可以將數據傳遞到 rrd,正如您所說的可以將數據從 rrd 中提取出來。如果沒有,這個問題可能已經在這裡問過了)。

如果您想在每次讀取它們時將計數器歸零,請傳遞 -Z 命令(歸零計數器)以將字節計數器歸零。

如果您的任何主機是路由器,您還需要在 FORWARD 鏈上進行計費 - 您可能只需從 FORWARD 鏈的頂部插入到 ACCOUNT_IN 和 ACCOUNT_OUT 的跳轉,它就會做正確的事情,但我還沒有考慮到足以 100% 確定它會起作用

引用自:https://serverfault.com/questions/235511