darkstat ile Web Tabanlı Ağ Trafiği İstatistikleri Toplama ve Görselleştirme

Ağ trafiğini izlemek için onlarca araç var ama çoğu ya çok karmaşık ya da kurumsal lisans istiyor. Ben yıllarca iftop, nethogs, tcpdump kombinasyonuyla idare ettim. Sonra bir gün küçük bir müşterinin sunucusunda bant genişliği sorunu yaşandı ve yöneticiye “hangi IP ne kadar trafik üretiyor” sorusunu görsel olarak yanıtlayamıyordum. İşte o gün darkstat ile tanıştım ve hayatım biraz daha kolaylaştı.

darkstat Nedir ve Neden Kullanmalısınız?

darkstat, ağ trafiğini pasif olarak dinleyen, toplanan istatistikleri küçük bir SQLite benzeri yapıda saklayan ve bunları tarayıcı üzerinden görüntülenebilir hale getiren hafif bir araçtır. Servis olarak çalışır, arka planda paketleri yakalar ve yerleşik bir HTTP sunucusu üzerinden grafikler ve tablolar sunar.

Öne çıkan özellikleri şunlar:

  • Çok düşük kaynak kullanımı: Tipik bir sistemde 2-5 MB RAM tüketir
  • Yerleşik web arayüzü: Ekstra web sunucusu kurmaya gerek yok
  • Host bazlı istatistik: Hangi IP’nin ne kadar trafik ürettiğini gösterir
  • Bant genişliği grafiği: Zaman bazlı trafik görselleştirmesi
  • Port istatistikleri: Hangi portun ne kadar kullanıldığını raporlar
  • Kalıcı veri saklama: Yeniden başlatmalarda veriler silinmez

Özellikle VPS’lerde, küçük-orta ölçekli sunucularda ve yönlendirici olarak kullanılan Linux makinelerde darkstat tam anlamıyla bir nimete dönüşüyor.

Kurulum

Debian/Ubuntu tabanlı sistemlerde kurulum tek satır:

sudo apt update && sudo apt install darkstat -y

RHEL/CentOS/AlmaLinux sistemlerinde EPEL reposunu etkinleştirmeniz gerekiyor:

sudo dnf install epel-release -y
sudo dnf install darkstat -y

Arch Linux için:

sudo pacman -S darkstat

Kurulum sonrası hangi sürümün geldiğini kontrol etmek iyi alışkanlık:

darkstat --version

İlk Yapılandırma: /etc/darkstat/init.cfg

Debian/Ubuntu’da darkstat’ın ana konfigürasyon dosyası /etc/darkstat/init.cfg konumunda bulunur. Bu dosyayı düzgün yapılandırmadan servisi başlatmayın, aksi halde yanlış arayüzü dinleyebilir ya da dışa açık bir port bırakabilirsiniz.

sudo nano /etc/darkstat/init.cfg

Dosyanın içeriği şuna benzer:

# darkstat başlangıç konfigürasyonu
START_DARKSTAT=yes
INTERFACE="-i eth0"
DIR="-d /var/lib/darkstat"
PORT="-p 667"
BINDIP="-b 127.0.0.1"
LOCAL="-l 192.168.1.0/24"
EXTRA=""

Her parametrenin ne anlama geldiğini açıklayayım:

  • START_DARKSTAT: yes olarak ayarlanmazsa servis başlamaz, Debian tabanlı sistemlere özgü bir kontrol
  • INTERFACE: Hangi ağ arayüzünü dinleyeceği, sunucunuzun aktif arayüzünü buraya yazın
  • DIR: İstatistik veritabanının saklanacağı dizin
  • PORT: Web arayüzünün hangi porttan yayın yapacağı
  • BINDIP: Web arayüzünün hangi IP’ye bağlanacağı, güvenlik için 127.0.0.1 şiddetle tavsiye edilir
  • LOCAL: Yerel ağ tanımı, bu sayede iç ve dış trafik ayrı raporlanır

Arayüz adını öğrenmek için:

ip link show
# veya daha eski sistemlerde
ifconfig -a

Modern Ubuntu/Debian sistemlerinde arayüz adı eth0 yerine ens3, enp2s0, ens192 gibi görünebilir. Doğru arayüzü bulmak kritik.

Servisi Başlatma ve Yönetme

Konfigürasyonu tamamladıktan sonra:

sudo systemctl enable darkstat
sudo systemctl start darkstat
sudo systemctl status darkstat

Servis çalışıyor mu kontrol edelim:

sudo ss -tlnp | grep darkstat
# ya da
sudo netstat -tlnp | grep 667

Eğer 127.0.0.1:667 üzerinde dinlediğini görüyorsanız kurulum başarılıdır. Şimdi yerel makineden http://127.0.0.1:667 adresini tarayıcınızda açın, darkstat’ın web arayüzünü göreceksiniz.

Komut Satırından Doğrudan Başlatma

Bazen sistematik kurulum yapmak istemezsiniz, test amaçlı hızlıca çalıştırmak istersiniz. darkstat bunu da destekliyor:

sudo darkstat -i ens3 -p 667 -b 127.0.0.1 -d /tmp/darkstat-data -l 10.0.0.0/8

Bu komutu açıklayayım:

  • -i ens3: ens3 arayüzünü dinle
  • -p 667: 667 portunda web arayüzü sun
  • -b 127.0.0.1: Sadece localhost’tan erişilebilir yap
  • -d /tmp/darkstat-data: Veriyi /tmp/darkstat-data dizinine kaydet
  • -l 10.0.0.0/8: 10.x.x.x bloğunu yerel ağ olarak tanımla

Arka planda çalıştırmak için:

sudo darkstat -i ens3 -p 667 -b 127.0.0.1 -d /var/lib/darkstat -l 192.168.0.0/16 &

Uzak Sunucuya Güvenli Erişim: SSH Tüneli

darkstat’ı 127.0.0.1‘e bağladığınızda dışarıdan erişemezsiniz. Bu kasıtlı bir güvenlik önlemi. Uzak sunucudaki darkstat’a kendi bilgisayarınızdan erişmek için SSH tüneli kullanın:

ssh -L 8080:127.0.0.1:667 kullanici@sunucu-ip

Bu komutu çalıştırdıktan sonra yerel makinenizde http://localhost:8080 adresini açtığınızda uzak sunucudaki darkstat arayüzüne ulaşırsınız. Bu yöntem hem güvenli hem de pratik. Müşterilere darkstat’ı gösterirken hep bu yöntemi kullanıyorum.

Eğer yöneticiye kalıcı erişim vermek istiyorsanız ve nginx kullanıyorsanız, reverse proxy ile de çözebilirsiniz ama o durumda mutlaka HTTP Basic Auth ekleyin:

sudo apt install apache2-utils -y
sudo htpasswd -c /etc/nginx/.darkstat_passwd yonetici

Nginx konfigürasyonu:

server {
    listen 443 ssl;
    server_name darkstat.sirketiniz.com;

    ssl_certificate /etc/letsencrypt/live/darkstat.sirketiniz.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/darkstat.sirketiniz.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:667;
        auth_basic "Ağ İstatistikleri";
        auth_basic_user_file /etc/nginx/.darkstat_passwd;
    }
}

Gerçek Dünya Senaryosu 1: VPS Bant Genişliği Takibi

Geçen yıl yönettiğim bir e-ticaret sitesinin VPS’inde aylık bant genişliği kotasına beklenmedik şekilde ulaşılmaya başlandı. Hosting sağlayıcısının paneli sadece toplam trafik gösteriyordu, hangi IP’nin ne kadar tükettiğini söylemiyordu.

darkstat’ı kurdum, birkaç saat veri topladım ve /hosts sayfasına baktım. Orada 5-6 adet Rusya ve Çin kaynaklı IP’nin sistemi taradığını ve yüzlerce MB trafik oluşturduğunu gördüm. Bunları firewall’a ekleyip sorunu çözdüm.

Bu tür bir analiz için darkstat’ı başlatıp biraz beklemeniz yeterli:

# Servisi başlat ve birkaç saat veri topla
sudo systemctl start darkstat

# darkstat web arayüzünden /hosts sayfasını kontrol et
# ya da curl ile ham veriyi çek
curl -s http://127.0.0.1:667/hosts | grep -oP '(?<=<td>)[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}(?=</td>)' | sort | uniq -c | sort -rn | head -20

Gerçek Dünya Senaryosu 2: Ofis Ağında Bant Genişliği Hogs

Ofis ortamında “internet yavaş” şikayetleri başladığında darkstat’ı gateway makinede çalıştırmak harika sonuçlar veriyor. Gateway Linux makinenizde tüm ağ trafiği geçtiği için tek bir darkstat instance’ı tüm ofisi izleyebilir.

Diyelim ki gateway makinenizde iki arayüz var: eth0 (WAN) ve eth1 (LAN). WAN trafiğini izlemek için:

sudo darkstat -i eth0 -p 667 -b 127.0.0.1 -d /var/lib/darkstat -l 192.168.1.0/24

-l parametresine LAN bloğunuzu verdiğinizde darkstat iç IP’leri “yerel” olarak işaretler ve hangi iç IP’nin dışarıya ne kadar trafik gönderdiğini net şekilde görebilirsiniz.

Veri Kalıcılığı ve Periyodik Sıfırlama

darkstat varsayılan olarak istatistikleri darkstat.db dosyasında saklar. Sunucu yeniden başlasa bile veriler kaybolmaz. Ama zaman zaman istatistikleri sıfırlamak isteyebilirsiniz, özellikle aylık bant genişliği takibi yapıyorsanız.

Veritabanını sıfırlamak için:

sudo systemctl stop darkstat
sudo rm /var/lib/darkstat/darkstat.db
sudo systemctl start darkstat

Bunu otomatik hale getirmek için cron kullanabilirsiniz. Her ayın 1’inde gece yarısı sıfırlanacak şekilde:

sudo crontab -e
# Her ayın 1'i gece 00:05'te darkstat istatistiklerini sıfırla
5 0 1 * * systemctl stop darkstat && rm -f /var/lib/darkstat/darkstat.db && systemctl start darkstat

Eğer sıfırlamadan önce eski verileri arşivlemek istiyorsanız:

5 0 1 * * systemctl stop darkstat && cp /var/lib/darkstat/darkstat.db /var/backups/darkstat-$(date +%Y%m).db && rm -f /var/lib/darkstat/darkstat.db && systemctl start darkstat

darkstat Web Arayüzünü Okumak

Web arayüzü açıldığında birkaç ana bölümle karşılaşırsınız:

  • Grafik: Son birkaç saate ait anlık bant genişliği grafiği, pikler hemen dikkat çekiyor
  • Hosts: Her IP için gelen ve giden trafik toplamları
  • Ports: Her port için trafik istatistikleri, hangi servisin ne kadar bant genişliği tükettiğini gösterir

/hosts?sort=out URL’si ile en çok giden trafik üreten hostları sıralayabilirsiniz. Bu küçük ama çok kullanışlı bir özellik. Benzer şekilde /hosts?sort=in gelen trafiğe göre sıralar.

Eğer belirli bir IP hakkında detay görmek istiyorsanız, hosts tablosundaki IP’ye tıklayın. O IP ile ilgili port dağılımını göreceksiniz.

Firewall ile Entegrasyon: Port Kısıtlaması

darkstat’ın web portunu sadece belirli IP’lerin erişimine açmak istiyorsanız iptables veya ufw kullanabilirsiniz:

# ufw ile sadece belirli IP'den erişime izin ver
sudo ufw deny 667
sudo ufw allow from 10.0.0.5 to any port 667

Ya da darkstat’ı localhost’a bağlı bırakıp yukarıda anlattığım SSH tüneli yöntemini kullanın. Bence bu daha temiz bir çözüm.

darkstat’ı logrotate ile Yönetmek

Uzun süreli çalışmalarda veritabanı büyüyebilir. Bunu kontrol altında tutmak için periyodik kontrol yapın:

# Veritabanı boyutunu kontrol et
ls -lh /var/lib/darkstat/darkstat.db

# Boyut ne zaman büyüdü
du -sh /var/lib/darkstat/

Deneyimlerime göre orta yoğunluklu bir sunucuda ayda yaklaşık 50-100 MB arasında büyüyor. Bu genellikle sorun değil ama yoğun ağ trafiği olan ortamlarda takip edin.

Alternatif Araçlarla Karşılaştırma

darkstat her duruma uygun değil. Kısa bir değerlendirme yapayım:

  • iftop: Anlık trafik görüntülemek için mükemmel ama geçmişe dönük veri yok, web arayüzü yok
  • ntopng: darkstat’tan çok daha güçlü ama kurulumu karmaşık, kaynak tüketimi yüksek, lisanslı sürümü gerekebilir
  • vnstat: Bant genişliği istatistikleri tutuyor ama host bazlı analiz yok, grafik arayüzü zayıf
  • darkstat: Basit, hafif, web arayüzü var, host bazlı istatistik sunuyor, kurulumu 5 dakika

Yani darkstat “iyi yeterli” kategorisinde. 80 tane özelliği olan karmaşık bir araç değil ama ihtiyaç duyduğunuz temel ağ istatistiklerini temiz bir şekilde sunuyor.

Sorun Giderme

Servis başlamıyor ya da web arayüzüne erişemiyorsanız şu adımları izleyin:

# Servis durumunu ve hata loglarını gör
sudo systemctl status darkstat -l
sudo journalctl -u darkstat -n 50

# Port dinleniyor mu
sudo ss -tlnp | grep 667

# darkstat processin çalışıp çalışmadığını kontrol et
ps aux | grep darkstat

En sık karşılaştığım sorunlar:

  • “Permission denied” hatası: darkstat’ın paket yakalamak için CAP_NET_RAW yetkisine ihtiyacı var. sudo ile çalıştırın ya da systemd servis dosyasına AmbientCapabilities=CAP_NET_RAW ekleyin.
  • Yanlış arayüz: init.cfg dosyasındaki arayüz adını tekrar kontrol edin, ip link show çıktısıyla karşılaştırın.
  • Port çakışması: 667 portu başka bir uygulama tarafından kullanılıyor olabilir. ss -tlnp | grep 667 ile kontrol edin, gerekirse farklı port kullanın.
  • Web arayüzü boş görünüyor: Darkstat az önce başladıysa henüz veri toplamadır. 5-10 dakika bekleyin ve sayfayı yenileyin.

Sonuç

darkstat, ağ trafiği izleme konusunda “hafif ve işe yarayan” kategorisinin en iyi örneklerinden biri. Kurulumu 5 dakikayı geçmiyor, kaynak tüketimi ihmal edilebilir düzeyde ve web arayüzü teknik olmayan kişilere bile durumu açıklamak için yeterince anlaşılır.

Büyük kurumsal ortamlarda ntopng veya Grafana+Prometheus+node_exporter stack’ine bakmanızı öneririm. Ama bir VPS’te, küçük ofis ağında ya da hızlıca “bu sunucuda ne oluyor” sorusuna cevap gereken her durumda darkstat tam olarak ihtiyacınız olan araç.

Benim rutinimde artık yeni bir sunucu kurulumunun standart parçası haline geldi. Belki sizin rutininizde de yer bulur.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir