2015年10月2日 星期五

網路流量監控工具(二):vnStat

使用電腦時,經常需要連上網路,但是網路流量常會受到限制,有時來自電信公司、有時來自網管人員。若不隨時注意網路的使用量,不小心就會超過流量限制,暫時不能上網。
  前文〝網路流量監控工具(一):MATE Netspeed〞介紹的「MATE Netspeed」,只能監控『即時(瞬時)網路流量』,而且沒有流量累計的功能。因此,再找尋其它具有累計流量的套件,就有其必要性。本篇就是介紹另一流量監控的套件 vnStat,具有:
  • 統計「累計網路流量」的功能,
  • 包含「每小時」、「每日」、「每週」、「每月」及「最高 10 次」等流量累計資料。
  • 不受「開、關機」、「網卡重啟」等影響,正確累計各時間區間的流量。
  • 不需用 root 權限,只要一般使用者就可以查詢結果。
似乎比「MATE Netspeed」更符合需求,網路上的說明有些部份不太適用,把自己安裝、設定和使用的步驟整理一下。

一、安裝

Fedora 的套件資料庫有收錄,所以安裝很方便。
[root@Core-i7 ~]# dnf install vnstat
若安裝後立即查詢,將出現以下訊息,
[SiB@Core-i7 ~]$ vnstat
No database found, nothing to do. Use --help for help.

A new database can be created with the following command:
    vnstat -u -i eth0

Replace 'eth0' with the interface that should be monitored.

The following interfaces are currently available:
    enp5s0 lo wlp3s0
這是因為 vnStat 藉由一個背景服務程式定時記錄網路流量,剛安裝好的 vnStat 並不會自動啟動這個服務。先查詢一下這個服務的狀態,
[root@Core-i7 ~]# systemctl status vnstat.service
● vnstat.service - VnStat - Lightweight Network Traffic Monitor
      Loaded: loaded (/usr/lib/systemd/system/vnstat.service; disabled; vendor preset: disabled)
      Active: inactive (dead)
由上面的結果(紅色字是標註以方便說明)可以看出來,第一個 disabled 是指『目前系統設定』為『開機不啟動』,第二個 disabled 是指該套件『預設』為『開機不啟動』,而 inactive 則是指目前該服務的狀態為『未啟動』。

二、啟動 vnStat,開始記錄

安裝好 vnStat 後,vnStat 監控服務的預設是:開機時為關閉狀態。因此,要設定為開機時自動啟動監控,才方便隨時監控網路的累積流量。需要的命令如下:
[root@Core-i7 ~]# systemctl enable vnstat.service
Created symlink from /etc/systemd/system/multi-user.target.wants/vnstat.service to /usr/lib/systemd/system/vnstat.service.
[root@Core-i7 ~]# systemctl start vnstat.service
[root@Core-i7 ~]# systemctl status vnstat.service
  vnstat.service - VnStat - Lightweight Network Traffic Monitor
      Loaded: loaded (/usr/lib/systemd/system/vnstat.service; enabled; vendor preset: disabled)
      Active: active (running) since 五 2015-09-25 21:39:40 CST; 2s ago
 Main PID: 6046 (vnstatd)
     CGroup:  /system.slice/vnstat.service
└─\u2514\u25006046 /usr/sbin/vnstatd -d

 9月 25 21:39:40 Core-i7 systemd[1]: Started VnStat - Lightweight Network Traffic Monitor.
 9月 25 21:39:40 Core-i7 systemd[1]: Starting VnStat - Lightweight Network Traffic Monitor...
 9月 25 21:39:40 Core-i7 vnstatd[6046]: Monitoring: enp5s0 wlp3s0
其中,
  • 第 1 個命令是設定的下次開機時,自動啟動 vnStat 監控服務,
  • 第 2 個命令是立即啟動 vnStat 監控服務,
  • 第 3 個命令是查詢 vnStat 監控服務的設定、執行狀態
由最後的結果可以看出,vnStat 監控服務啟動時,若未指定或設定監控的網卡為何時,預設會監控所有網卡(lo 除外)。

:剛開始監控時,因為記錄的流量資料不足,會查不到資料,過些時間再來查詢即可,不要著急。

三、設定監控的網卡

用 vnStat 監控網路累計流量,可以指定要記錄哪一張網卡,或全部。文件說:可以隨時增加、刪除監控的網卡。不過,我測的時候只能刪除,而不能增加網卡。(有空再試試)(:「追加監控的網卡」問題已解決,請參考篇末說明)
  接著,就針對設定的幾個操作分別說明:

1. 除了『本地迴路(lo)』網卡外,全部監控

用 vnstat --iflist 就可以查詢電腦中的所有網卡,
[SiB@Core-i7 ~]$ vnstat --iflist
Available interfaces: enp5s0 lo wlp3s0
將列出目前電腦中所有可辨識的網卡,其中的 lo 是『TCP/IP 堆疊』的『本地迴路』,通常用於:測試『TCP/IP 堆疊』的運作是否正常、網路應用的連線測試等,所以一般不監控它。若使用者想監控所有網卡,不用設定,直接跳到下一個步驟
  但是,若之前已設定為只監控部分網卡,先把所有網卡監控都移除,再重新啟動 vnStat 監控服務程式(參考步驟 二、3),就恢復監控全部網卡了。(:「追加監控的網卡」問題已解決,請參考篇末說明)

2. 移除監控特定網卡的流量

現在的「筆記型電腦」除了「有線網路」外,也都有「無線網路」。通常只需要監控對外的網卡就好,例如:平常都用「有線網路」對外連線,這時就不需要監控對內的「無線網路」,關閉這張網卡的監控之命令為,
[root@Core-i7 ~]# vnstat --delete --force -i wlp3s0
Database for interface "wlp3s0" deleted.
The interface will no longer be monitored.
上例是將「無線網路」關閉,也移除之前的紀錄的資料。

:若不能確定哪一張是「有線」、「無線」,可以查看右上角工作列中,網路圖示的「連線資訊」。

3. 恢復監控所有網卡的流量

依文件說明或 vnStat 程式的輔助文件(即:vnstat --help 或 vnstat --longhelp 輸出的說明)所述,是可以再追加監控的網卡。不過,我是沒有試成功,只找到這個替代方案,就是將關閉所監控的全部網卡,再重啟 vnStat 的監控服務,
[root@Core-i7 ~]# vnstat --iflist
Available interfaces: enp5s0 lo wlp3s0
[root@Core-i7 ~]# vnstat --delete  --force -i enp5s0
Database for interface "enp5s0" deleted.
The interface will no longer be monitored.
[root@Core-i7 ~]# vnstat --delete --force -i wlp3s0
Database for interface "wlp3s0" deleted.
The interface will no longer be monitored.
[root@Core-i7 ~]# systemctl restart vnstat.service
其中,
  • 第 1 個命令是列出可監控的網路(:lo 不用關閉),
  • 第 2, 3 個命令是關閉網卡的監控,而
  • 第 4 個命令是重啟 vnStat 的監控服務。

四、查詢網卡流量

開始記錄流量後,一開始會因記錄不足是查不到資料,待會再試就可以了。接著,就是一般的查詢功能,在「終端機」下 vnstat 就可以查詢流量紀錄,
[SiB@Core-i7 ~]$ vnstat
rx/tx/total/estimated
wlp3s0:
Sep '151 KiB/0 KiB/1 KiB
Oct '15122 KiB/24 KiB/146 KiB/0 KiB
        yesterday1 KiB/0 KiB/1 KiB
today122 KiB/24 KiB/146 KiB/--
enp5s0:
Sep '157.14 MiB/1.78 MiB/8.92 MiB
Oct '15      207.91 MiB  /      1.32 GiB  /      1.52 GiB  /       53.12 GiB
yesterday7.14 MiB/1.78 MiB/8.92 MiB
today207.91 MiB/1.32 GiB/1.52 GiB/1.71 GiB
上例中,橫向分別為:網卡/日期、接收、傳送、合計及預估值,直向在網卡下分別為:月、日(上例中為:9 月、10 月、昨天及今天)。
  在 vnstat 命令後可以加上參數,以查詢不同的流量紀錄資訊。幾個常用的參數列表說明如下:
參數作用說明
--iflist列出所有 vnStat 可監控的網卡之編號。
-i 網卡編號選擇「網路卡」編號,配合以下參數做為指定特定網卡之用,預設值為 eth0。
-h顯示最近 24 小時的每小時流量記錄。(配合 -i 參數)
-d顯示最近幾天的每日流量記錄。(配合 -i 參數)
-m顯示最近幾個月的每月流量記錄。(配合 -i 參數)
-w顯示最近幾週的每週流量記錄。(配合 -i 參數)
-t顯示最近幾天的前 10 大流量記錄。(配合 -i 參數)
-s顯示精簡版的流量記錄。(配合 -i 參數)
--sync同步「網卡流量計數」與「流量紀錄資料庫」,當電腦有「休眠」再「甦醒」,而兩個流量紀錄不同需修正時使用。

註一:只有一張網卡時,上表中需「配合 -i 參數」的參數,可以不指定網卡。
註二:當有數張網卡,而經常要查詢特定網卡,又想省略不用『 -i 』參數時,可在 /etc/vnstat.conf 這個設定檔中,將 Interface "eth0" 改為 Interface "網卡編號",如下:
# vnStat 1.11 config file
##

# default interface
Interface "enp5s0"
上例是假設常查詢的網卡編號為 enp5s0。

後記:


已測試版本:

  • Fedora: 22, 21

參考資料:

沒有留言:

張貼留言

感謝你耐心看完本文,歡迎留下任何指正、建議,筆者會儘快回應。(English is also welcome.)