强曰为道

与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

第7章:nload与vnstat

第7章:nload与vnstat

7.1 概述

工具定位

工具定位特点
nload实时带宽监控图形化显示、直观
vnstat历史带宽统计持久化存储、低资源消耗

为什么需要这两个工具

  1. nload - 实时查看带宽使用情况,图形化显示
  2. vnstat - 长期记录带宽数据,支持按小时/天/月统计

与其他网络工具对比

特性nloadvnstatiftopbmon
实时图形
历史数据
连接级别
资源消耗极低
持久化

7.2 nload详解

7.2.1 安装

# Debian/Ubuntu
sudo apt update
sudo apt install nload

# CentOS/RHEL
sudo yum install epel-release
sudo yum install nload

# Fedora
sudo dnf install nload

# Arch Linux
sudo pacman -S nload

# macOS
brew install nload

7.2.2 基本使用

# 监控默认接口
nload

# 监控指定接口
nload eth0

# 监控多个接口
nload eth0 eth1

# 监控所有接口
nload -m

7.2.3 界面解读

Device eth0 [192.168.1.100] (1/2):
======================================================================
Incoming:

                                                       curr: 1.25 MBit/s
                                                       avg: 1.10 MBit/s
                                                       min: 0.50 MBit/s
                                                       max: 2.30 MBit/s
                                                       Ttl: 123.45 MByte
Outgoing:

                                                       curr: 456.00 kBit/s
                                                       avg: 400.00 kBit/s
                                                       min: 100.00 kBit/s
                                                       max: 789.00 kBit/s
                                                       Ttl: 45.67 MByte

界面元素

元素含义
Device网络接口名称和IP
Incoming入站流量(下载)
Outgoing出站流量(上传)
curr当前速率
avg平均速率
min最小速率
max最大速率
Ttl总流量

7.2.4 图形解读

入站流量图形:
                    │
            ┌───────┤
            │ ████  │
            │ ████  │
    ────────┤ ████  ├────────
            │ ████  │
            └───────┤
                    │
  • 柱状图 - 显示当前流量
  • 刻度 - 动态调整的带宽刻度
  • 颜色 - 绿色表示入站,红色表示出站

7.2.5 命令行参数

# 常用参数
nload -a <seconds>      # 平均窗口大小(秒)
nload -i <max>          # 入站最大带宽(kBit/s)
nload -o <max>          # 出站最大带宽(kBit/s)
nload -t <interval>     # 刷新间隔(毫秒)
nload -u <unit>         # 显示单位
nload -U <unit>         # 总流量单位
nload -m                # 合并显示所有接口
nload devices eth0      # 指定接口

单位选项

参数单位
-u h自动(默认)
-u bBit/s
-u kkBit/s
-u mMBit/s
-u gGBit/s

7.2.6 交互命令

按键功能
/ 切换接口
/ 调整刻度
r重置统计
q退出
F2显示帮助

7.2.7 高级用法

自定义带宽范围

# 假设带宽为100Mbps
nload -i 100000 -o 100000 eth0

# 假设带宽为1Gbps
nload -i 1000000 -o 1000000 eth0

脚本化输出

# 使用tshark或tcpdump配合
nload -t 1000 eth0 > /dev/null &

# 获取当前流量
nload -t 1 eth0 | grep "curr:"

监控脚本

#!/bin/bash
# nload_monitor.sh

INTERFACE=${1:-eth0}
LOG_FILE="/tmp/nload_${INTERFACE}.log"

while true; do
    # 获取流量数据
    DATA=$(nload -t 1 $INTERFACE 2>/dev/null | grep "curr:" | awk '{print $2, $3}')
    TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
    
    echo "$TIMESTAMP $DATA" >> $LOG_FILE
    sleep 1
done

7.2.8 性能开销

场景CPU占用内存占用
默认设置<0.5%~5MB
高频刷新<1%~5MB
多接口<1%~10MB

7.3 vnstat详解

7.3.1 安装

# Debian/Ubuntu
sudo apt update
sudo apt install vnstat

# CentOS/RHEL
sudo yum install epel-release
sudo yum install vnstat

# Fedora
sudo dnf install vnstat

# Arch Linux
sudo pacman -S vnstat

# macOS
brew install vnstat

7.3.2 服务管理

# 启动服务
sudo systemctl start vnstat

# 设置开机自启
sudo systemctl enable vnstat

# 查看服务状态
sudo systemctl status vnstat

# 停止服务
sudo systemctl stop vnstat

7.3.3 数据库初始化

# 首次运行需要初始化数据库
sudo vnstat -u -i eth0

# 检查数据库
ls -la /var/lib/vnstat/

# 修复数据库
sudo vnstat --repair

7.3.4 基本使用

# 查看默认接口统计
vnstat

# 查看指定接口
vnstat -i eth0

# 查看所有接口
vnstat -a

7.3.5 输出解读

月度统计

Database updated: 2026-05-10 14:30:00

   eth0 since 2026-01-01

          rx:  123.45 GiB      tx:  45.67 GiB      total:  169.12 GiB

   monthly
                     rx      |     tx      |    total    |   avg. rate
     ------------------------+-------------+-------------+---------------
     2026-05    12.34 GiB   |   4.56 GiB  |  16.90 GiB  |    5.23 Mbit/s
     2026-04    45.67 GiB   |  12.34 GiB  |  58.01 GiB  |    1.87 Mbit/s
     2026-03    34.56 GiB   |   9.87 GiB  |  44.43 GiB  |    1.43 Mbit/s
     ------------------------+-------------+-------------+---------------
     total      92.57 GiB   |  26.77 GiB  | 119.34 GiB  |

每日统计

vnstat -d

小时统计

vnstat -h

实时统计

vnstat -l

7.3.6 统计选项

选项功能
-d每日统计
-m月度统计
-w周度统计
-h小时统计
-l实时统计
-t顶部统计
-s短格式
-55分钟统计

7.3.7 输出格式

# JSON格式
vnstat --json

# XML格式
vnstat --xml

# 文本格式
vnstat --text

# 图形化(需要vnstati)
vnstat -i eth0 -hg

7.3.8 vnstati图形化

安装vnstati

# Debian/Ubuntu
sudo apt install vnstati

# CentOS/RHEL
sudo yum install vnstati

生成图片

# 生成小时统计图
vnstati -h -o /tmp/vnstat_hourly.png

# 生成每日统计图
vnstati -d -o /tmp/vnstat_daily.png

# 生成月度统计图
vnstati -m -o /tmp/vnstat_monthly.png

# 生成汇总图
vnstati -s -o /tmp/vnstat_summary.png

# 生成流量图
vnstati -hg -o /tmp/vnstat_graph.png

# 生成5分钟统计图
vnstati -5 -o /tmp/vnstat_5min.png

7.3.9 配置文件

主配置文件

/etc/vnstat.conf

配置示例

# 接口
Interface "eth0"

# 数据库目录
DatabaseDir "/var/lib/vnstat"

# 日志目录
LogFile "/var/log/vnstat/vnstat.log"

# 刷新间隔(秒)
UpdateInterval 30

# 数据库轮转
BootVariation 15

# 流量单位
RateUnit 1

# 默认输出格式
OutputStyle 3

# 带宽限制
BandwidthDetection 1
MaxBandwidth 1000

# 数据保留
MonthRotate 1

配置选项详解

选项默认值说明
UpdateInterval30数据更新间隔(秒)
PollInterval5轮询间隔(秒)
RateUnit10=bytes, 1=bits
OutputStyle00=简约, 1=经典, 2=彩色, 3=彩色经典
MonthRotate1月度轮转日期
MaxBandwidth1000最大带宽(Mbit/s)

7.3.10 数据管理

删除接口数据

# 删除指定接口
sudo vnstat --delete -i eth0

# 清空所有数据
sudo vnstat --delete -i eth0 --force

备份数据

# 备份数据库
sudo cp -r /var/lib/vnstat /backup/vnstat_$(date +%Y%m%d)

# 恢复数据库
sudo cp -r /backup/vnstat_20260510/* /var/lib/vnstat/

修改数据

# 设置特定日期的流量
sudo vnstat -i eth0 --setconfig -t "2026-05-01 100000 50000"

7.3.11 告警设置

基于带宽的告警脚本

#!/bin/bash
# vnstat_alert.sh

INTERFACE=${1:-eth0}
THRESHOLD_MB=${2:-1000}  # 1GB阈值

# 获取今日流量(字节)
TODAY_RX=$(vnstat -i $INTERFACE --json | jq '.interfaces[0].traffic.day[0].rx')
TODAY_TX=$(vnstat -i $INTERFACE --json | jq '.interfaces[0].traffic.day[0].tx')
TOTAL=$((TODAY_RX + TODAY_TX))
TOTAL_MB=$((TOTAL / 1024 / 1024))

if [ $TOTAL_MB -gt $THRESHOLD_MB ]; then
    echo "警告: $INTERFACE 今日流量已达 ${TOTAL_MB}MB,超过阈值 ${THRESHOLD_MB}MB"
    # 发送告警
    # mail -s "流量告警" [email protected] <<< "今日流量: ${TOTAL_MB}MB"
fi

定期检查cron

# 编辑crontab
crontab -e

# 每小时检查一次
0 * * * * /path/to/vnstat_alert.sh eth0 1000

7.4 带宽监控方案

7.4.1 实时监控方案

方案1:nload + 终端

# 直接运行
nload eth0

# 适合临时查看

方案2:nload + tmux

# 在tmux会话中运行
tmux new-session -d -s monitor 'nload eth0'
tmux attach -t monitor

方案3:nload + SSH

# 远程监控
ssh user@server nload eth0

7.4.2 历史监控方案

方案1:vnstat + vnstati

# 记录数据
sudo systemctl enable vnstat

# 定期生成图片
vnstati -d -o /var/www/html/vnstat_daily.png

方案2:vnstat + 自定义脚本

#!/bin/bash
# vnstat_report.sh

# 生成报告
vnstat -i eth0 > /var/log/vnstat/report_$(date +%Y%m%d).txt

# 生成CSV
vnstat -i eth0 --json > /var/log/vnstat/report_$(date +%Y%m%d).json

7.4.3 综合监控方案

组合使用

# 实时监控
tmux new-session -d -s nload 'nload eth0'

# 历史记录
sudo systemctl enable vnstat

# 定期报告
crontab -e
# 0 0 * * * vnstat_report.sh

7.5 实战场景

场景1:服务器带宽监控

需求:监控服务器的带宽使用情况

# 1. 安装工具
sudo apt install nload vnstat vnstati

# 2. 启动vnstat服务
sudo systemctl enable --now vnstat

# 3. 实时监控
nload eth0

# 4. 查看历史
vnstat -d  # 每日
vnstat -m  # 每月

场景2:带宽异常排查

问题:带宽突然跑满

# 1. 实时查看流量
nload eth0

# 2. 找出流量来源
iftop -i eth0 -n

# 3. 查看历史趋势
vnstat -h

# 4. 分析是否有异常高峰
vnstati -h -o /tmp/hourly.png

场景3:流量统计报告

需求:生成月度流量报告

# 1. 生成报告
vnstat -m > /tmp/monthly_report.txt

# 2. 生成图形
vnstati -m -o /tmp/monthly_graph.png

# 3. 生成JSON(可导入其他系统)
vnstat -m --json > /tmp/monthly.json

场景4:多接口监控

需求:监控多个网络接口

# 1. 查看所有接口
vnstat -a

# 2. 实时监控多个接口
nload -m

# 3. 分别监控
nload eth0
# Ctrl+C
nload eth1

场景5:带宽计费

需求:统计流量用于计费

# 1. 查看月度流量
vnstat -m

# 2. 获取精确数据
vnstat -m --json | jq '.interfaces[0].traffic.month[0]'

# 3. 计算费用
# 流量(GB)* 单价

场景6:带宽告警

需求:流量超过阈值时告警

#!/bin/bash
# bandwidth_alert.sh

INTERFACE="eth0"
THRESHOLD_GB=100  # 100GB阈值

# 获取本月流量(GB)
MONTHLY=$(vnstat -i $INTERFACE -m --json | jq '.interfaces[0].traffic.month[0].rx + .interfaces[0].traffic.month[0].tx')
MONTHLY_GB=$(echo "$MONTHLY / 1073741824" | bc)

if [ $MONTHLY_GB -gt $THRESHOLD_GB ]; then
    echo "警告: $INTERFACE 本月流量已达 ${MONTHLY_GB}GB"
    # 发送告警
    # mail -s "流量告警" [email protected] <<< "本月流量: ${MONTHLY_GB}GB"
fi

7.6 高级配置

7.6.1 nload高级配置

自定义颜色

# nload不支持颜色配置
# 但可以通过终端设置
export TERM=xterm-256color
nload eth0

自定义刷新

# 每秒刷新
nload -t 1000 eth0

# 每2秒刷新
nload -t 2000 eth0

7.6.2 vnstat高级配置

多接口配置

# /etc/vnstat.conf
Interface "eth0"
Interface "eth1"

自定义单位

# 以bits显示
RateUnit 1

# 以bytes显示
RateUnit 0

数据保留策略

# 保留多少个月的数据
# 默认24个月

7.7 故障排查

问题1:nload显示为0

# 检查接口是否有流量
ping 8.8.8.8

# 检查接口状态
ip link show eth0

# 检查nload指定的接口是否正确
nload -m  # 查看所有接口

问题2:vnstat没有数据

# 检查服务状态
sudo systemctl status vnstat

# 初始化数据库
sudo vnstat -u -i eth0

# 检查权限
ls -la /var/lib/vnstat/

问题3:vnstat数据不准确

# 重置数据
sudo vnstat --delete -i eth0
sudo vnstat -u -i eth0

# 检查是否有其他流量计数器
iptables -L -v

问题4:nload图形异常

# 检查终端支持
echo $TERM

# 调整窗口大小
# nload需要足够的终端宽度

# 使用更简单的终端
TERM=xterm nload eth0

7.8 性能优化

7.8.1 nload优化

# 降低刷新频率
nload -t 5000 eth0  # 5秒刷新

# 减少带宽计算
nload -a 10 eth0    # 10秒平均窗口

7.8.2 vnstat优化

# 调整更新间隔
sudo nano /etc/vnstat.conf

# 增大更新间隔
UpdateInterval 60  # 60秒

# 减少轮询频率
PollInterval 10    # 10秒

7.9 与其他工具集成

7.9.1 nload + Prometheus

# 使用textfile collector
#!/bin/bash
# /var/lib/node_exporter/textfile_collector/network_stats.prom

# 获取流量数据
RX=$(cat /sys/class/net/eth0/statistics/rx_bytes)
TX=$(cat /sys/class/net/eth0/statistics/tx_bytes)

echo "# HELP node_network_receive_bytes Total bytes received"
echo "# TYPE node_network_receive_bytes counter"
echo "node_network_receive_bytes{device=\"eth0\"} $RX"

echo "# HELP node_network_transmit_bytes Total bytes transmitted"
echo "# TYPE node_network_transmit_bytes counter"
echo "node_network_transmit_bytes{device=\"eth0\"} $TX"

7.9.2 vnstat + Grafana

# 导出JSON
vnstat -i eth0 --json > /var/lib/grafana/vnstat.json

# 使用InfluxDB
# 需要额外脚本将数据导入InfluxDB

7.9.3 vnstat + Web界面

# 使用vnStat PHP frontend
git clone https://github.com/vberber/vnstat-php-frontend.git
cd vnstat-php-frontend
cp config.php.example config.php

# 修改配置
nano config.php
# 设置接口和数据库路径

# 部署到Web服务器
cp -r * /var/www/html/vnstat/

7.10 扩展阅读

7.11 快速参考

nload快速参考

# 基本用法
nload eth0             # 监控指定接口
nload -m               # 合并所有接口
nload -t 1000 eth0     # 每秒刷新

# 带宽设置
nload -i 100000 -o 100000 eth0  # 100Mbps

# 单位设置
nload -u k eth0        # kBit/s
nload -u m eth0        # MBit/s

# 交互键
↑/↓   切换接口
q     退出

vnstat快速参考

# 基本用法
vnstat               # 默认接口统计
vnstat -i eth0       # 指定接口
vnstat -a            # 所有接口

# 时间统计
vnstat -h            # 小时
vnstat -d            # 每日
vnstat -m            # 月度
vnstat -w            # 周度
vnstat -l            # 实时

# 输出格式
vnstat --json        # JSON
vnstat --xml         # XML

# 图形化
vnstati -d -o out.png # 每日图
vnstati -m -o out.png # 月度图
vnstati -s -o out.png # 汇总图

# 管理
sudo vnstat -u -i eth0    # 初始化
sudo vnstat --delete -i eth0  # 删除
sudo vnstat --repair      # 修复

7.12 本章小结

本章详细介绍了nload和vnstat的使用:

  1. nload - 实时带宽监控

    • 图形化显示
    • 多接口支持
    • 交互式操作
  2. vnstat - 历史带宽统计

    • 持久化存储
    • 多维度统计
    • 图形化输出
  3. 监控方案

    • 实时监控:nload
    • 历史记录:vnstat
    • 综合方案:nload + vnstat
  4. 实战场景

    • 带宽监控
    • 流量统计
    • 异常排查
    • 计费统计

nload适合实时查看,vnstat适合长期记录,两者结合使用效果最佳。


上一章: 第6章:iftop详解 下一章: 第8章:vmstat/iostat/SAR