vnStat ist ein leichtgewichtiges Tool zur Überwachung des Netzwerk-Traffics. Es läuft im Hintergrund, verbraucht kaum Ressourcen und liefert detaillierte Statistiken.

Warum vnStat?

Vorteile

- Minimaler Ressourcenverbrauch
- Kernel-basierte Statistiken
- Keine Root-Rechte für Abfragen
- Historische Daten (Tage, Monate, Jahre)
- Einfache Konfiguration
- CLI und Web-Interface

Anwendungsfälle

- Traffic-Volumen überwachen
- Bandbreiten-Limits prüfen
- Traffic-Anomalien erkennen
- Monatliche Abrechnung kontrollieren
- Server-Auslastung analysieren

Installation

Debian/Ubuntu

apt update
apt install vnstat

CentOS/RHEL

dnf install vnstat

Dienst starten

systemctl enable --now vnstat

Grundkonfiguration

Interface hinzufügen

# Automatisch beim Start erkannt, oder manuell:
vnstat --add -i eth0

# Mehrere Interfaces
vnstat --add -i eth0
vnstat --add -i eth1

Konfigurationsdatei

# /etc/vnstat.conf

# Datenbank-Verzeichnis
DatabaseDir "/var/lib/vnstat"

# Interface
Interface "eth0"

# Update-Intervall (Sekunden)
UpdateInterval 20

# Polling-Intervall
PollInterval 5

# Speicherdauer (Monate)
MonthRotate 1
MonthRotateAffectsYears 0

# Dateneinheit (0 = Bytes, 1 = Bits)
UnitMode 0

# Rateneinheit (0 = Bytes/s, 1 = Bits/s)
RateUnit 1

# Bandbreiten-Erkennung
BandwidthDetection 1
MaxBandwidth 1000

Änderungen anwenden

systemctl restart vnstat

Traffic-Statistiken anzeigen

Übersicht

vnstat
Database updated: Mon Jan 26 10:00:00 2026

   eth0 since 2026-01-01

          rx:  150.25 GiB      tx:  45.32 GiB      total:  195.57 GiB

   monthly
                     rx      |     tx      |    total    |   avg. rate
     ------------------------+-------------+-------------+---------------
      Jan '26    150.25 GiB  |   45.32 GiB |  195.57 GiB |    7.53 Mbit/s
     ------------------------+-------------+-------------+---------------
     estimated   180.30 GiB  |   54.38 GiB |  234.68 GiB |

Tägliche Statistik

vnstat -d
   eth0  /  daily

          day         rx      |     tx      |    total    |   avg. rate
     ------------------------+-------------+-------------+---------------
      2026-01-24     5.23 GiB |    1.45 GiB |    6.68 GiB |    6.53 Mbit/s
      2026-01-25     4.89 GiB |    1.32 GiB |    6.21 GiB |    6.07 Mbit/s
      2026-01-26     2.15 GiB |  620.45 MiB |    2.75 GiB |    5.38 Mbit/s
     ------------------------+-------------+-------------+---------------
     estimated      5.16 GiB |    1.45 GiB |    6.61 GiB |

Monatliche Statistik

vnstat -m

Stündliche Statistik

vnstat -h

Top 10 Tage

vnstat -t

Live-Monitoring

vnstat -l

# Oder mit Zeitlimit (30 Sekunden)
vnstat -l -i eth0 -s 30

Aktuelle Bandbreite

vnstat -tr 5
# Zeigt Traffic-Rate über 5 Sekunden

Ausgabeformate

JSON-Export

vnstat --json
vnstat --json d  # Täglich
vnstat --json m  # Monatlich
vnstat --json h  # Stündlich

XML-Export

vnstat --xml

One-Line-Output

vnstat --oneline

Spezifisches Interface

vnstat -i eth0
vnstat -i eth1 -d

Web-Interface (vnStat PHP)

Installation

apt install apache2 php libapache2-mod-php

vnStat PHP Frontend

cd /var/www/html
wget https://github.com/alexandermarston/vnstat-dashboard/archive/refs/heads/master.zip
unzip master.zip
mv vnstat-dashboard-master vnstat

Konfiguration

// /var/www/html/vnstat/includes/config.php

$interface = 'eth0';
$graph_type = 'svg';
$combined_graph = true;

Zugriff

Browser: http://server-ip/vnstat

Daten exportieren und analysieren

Export in CSV

#!/bin/bash
# vnstat-export.sh

vnstat --json m | jq -r '
  .interfaces[0].traffic.month[] |
  [.date.year, .date.month, .rx, .tx] |
  @csv
' > traffic-monthly.csv

Täglicher Bericht per E-Mail

#!/bin/bash
# /usr/local/bin/vnstat-report.sh

MAILTO="admin@example.com"

{
    echo "=== vnStat Daily Report ==="
    echo ""
    echo "=== Übersicht ==="
    vnstat
    echo ""
    echo "=== Heute ==="
    vnstat -d 1
    echo ""
    echo "=== Top 10 Tage ==="
    vnstat -t
} | mail -s "Traffic Report $(date +%Y-%m-%d)" $MAILTO
# Crontab
0 8 * * * /usr/local/bin/vnstat-report.sh

Traffic-Alerts

Skript für Alerts

#!/bin/bash
# /usr/local/bin/traffic-alert.sh

# Schwellwerte in GB
DAILY_LIMIT=50
MONTHLY_LIMIT=1000
MAILTO="admin@example.com"

# Täglicher Traffic (in GiB)
DAILY=$(vnstat --oneline | cut -d';' -f4 | sed 's/ GiB//')
MONTHLY=$(vnstat --oneline | cut -d';' -f9 | sed 's/ GiB//')

# Prüfen und warnen
if (( $(echo "$DAILY > $DAILY_LIMIT" | bc -l) )); then
    echo "Daily traffic limit exceeded: $DAILY GiB" | \
    mail -s "Traffic Alert: Daily Limit" $MAILTO
fi

if (( $(echo "$MONTHLY > $MONTHLY_LIMIT" | bc -l) )); then
    echo "Monthly traffic limit exceeded: $MONTHLY GiB" | \
    mail -s "Traffic Alert: Monthly Limit" $MAILTO
fi
# Stündlich prüfen
0 * * * * /usr/local/bin/traffic-alert.sh

Mehrere Interfaces

Alle Interfaces anzeigen

vnstat --iflist

Statistik pro Interface

vnstat -i eth0
vnstat -i eth1
vnstat -i docker0

Kombinierte Ansicht

# Alle Interfaces summiert
vnstat --add -i eth0+eth1

Datenbank verwalten

Datenbank-Speicherort

ls -la /var/lib/vnstat/

Datenbank zurücksetzen

# Interface entfernen
vnstat --remove -i eth0 --force

# Neu hinzufügen
vnstat --add -i eth0

Backup

cp -r /var/lib/vnstat /backup/vnstat-$(date +%Y%m%d)

Grafana-Integration

Mit InfluxDB

#!/bin/bash
# vnstat-to-influx.sh

INFLUX_HOST="localhost"
INFLUX_DB="vnstat"

STATS=$(vnstat --json)

RX=$(echo $STATS | jq '.interfaces[0].traffic.total.rx')
TX=$(echo $STATS | jq '.interfaces[0].traffic.total.tx')

curl -i -XPOST "http://$INFLUX_HOST:8086/write?db=$INFLUX_DB" \
    --data-binary "network,interface=eth0 rx=$RX,tx=$TX"

Prometheus Exporter

# vnstat_exporter installieren
go install github.com/bvanrijn/vnstat_exporter@latest

# Starten
vnstat_exporter --listen-address=":9433"
# prometheus.yml
scrape_configs:
  - job_name: 'vnstat'
    static_configs:
      - targets: ['localhost:9433']

Troubleshooting

Keine Daten

# Dienst-Status
systemctl status vnstat

# Interface prüfen
vnstat --iflist

# Manuelles Update
vnstat -u -i eth0

Falsche Werte

# Datenbank-Integrität prüfen
vnstat --dbcheck

# Kernel-Statistiken prüfen
cat /proc/net/dev

Datenbank reparieren

# vnStat stoppen
systemctl stop vnstat

# Datenbank löschen
rm /var/lib/vnstat/eth0

# Neu initialisieren
systemctl start vnstat
vnstat --add -i eth0

Zusammenfassung

| Befehl | Funktion | |--------|----------| | vnstat | Übersicht | | vnstat -d | Täglich | | vnstat -m | Monatlich | | vnstat -h | Stündlich | | vnstat -l | Live | | vnstat -t | Top 10 | | vnstat --json | JSON-Export | | vnstat -i eth0 | Spezifisches Interface |

Fazit

vnStat ist das ideale Tool zur Traffic-Überwachung auf Linux-Servern. Es läuft unauffällig im Hintergrund und liefert auf Abruf detaillierte Statistiken. Für Server mit Traffic-Limits oder zur Kapazitätsplanung ist vnStat unverzichtbar. Kombiniert mit einem Web-Frontend und Alerts haben Sie Ihren Bandbreitenverbrauch immer im Blick.