Ağ Trafiğini Gerçek Zamanlı İzleme: Netdata Rehberi

Sunucunuzda neler olduğunu gerçek zamanlı görmek istiyorsunuz ama Grafana + Prometheus kurulumu size çok ağır geliyor mu? Netdata tam da bu noktada devreye giriyor. Tek komutla kuruluyor, tarayıcınızda anında çalışıyor ve ağ trafiğini milisaniye hassasiyetiyle izliyor. Bu yazıda Netdata’yı sıfırdan kurup ağ trafiği izleme konusunda gerçekten işe yarar bir setup oluşturacağız.

Netdata Nedir ve Neden Tercih Edilmeli?

Netdata, açık kaynaklı bir gerçek zamanlı performans izleme aracıdır. Klasik izleme araçlarından farkı şu: veriyi toplar, işler ve görselleştirir, üstelik bunu 1 saniyelik granülariteyle yapar. Çoğu izleme çözümü 10-15 saniyelik aralıklarla veri toplarken Netdata saniyede bir örnekleme yapar.

Ağ trafiği izleme açısından bakıldığında Netdata şunları yapabilir:

  • Arayüz bazında bant genişliği kullanımını anlık gösterir
  • Paket kayıplarını ve hataları tespit eder
  • TCP bağlantı durumlarını (established, time_wait, close_wait vb.) takip eder
  • Firewall istatistiklerini (iptables, nftables) görselleştirir
  • DNS sorgularını ve yanıt sürelerini izler
  • Network namespace’leri ve container ağlarını destekler

Bir production senaryosu düşünelim: Gece 2’de sunucunuzun ağ trafiğinde ani bir artış oluyor. Sabah işe geldiğinizde bunu fark ediyorsunuz. Netdata’nın geçmiş verileriyle tam olarak hangi saatte, hangi arayüzde, ne kadar trafik olduğunu görebilirsiniz. Üstelik alert sistemi sayesinde siz uyurken bile haberdar olabilirdiniz.

Kurulum

Hızlı Kurulum (Önerilen)

Netdata’nın en kolay kurulum yöntemi resmi kickstart scriptidir:

wget -O /tmp/netdata-kickstart.sh https://my-netdata.io/kickstart.sh
sh /tmp/netdata-kickstart.sh

Ya da tek satırda:

bash <(curl -Ss https://my-netdata.io/kickstart.sh)

Kurulum bittikten sonra servis otomatik başlar. Tarayıcınızdan http://sunucu-ip:19999 adresine giderek dashboard’a erişebilirsiniz.

Paket Yöneticisiyle Kurulum

Ubuntu/Debian için:

apt-get install -y netdata
systemctl enable netdata
systemctl start netdata

CentOS/RHEL için önce EPEL reposunu eklemeniz gerekir:

yum install -y epel-release
yum install -y netdata
systemctl enable netdata
systemctl start netdata

Kurulum Doğrulama

systemctl status netdata
netstat -tlnp | grep 19999

Çıktıda LISTEN görüyorsanız Netdata ayakta demektir.

Temel Yapılandırma

Netdata’nın ana konfigürasyon dosyası /etc/netdata/netdata.conf konumundadır. Ama dikkat edin, bu dosyayı elle düzenlemek yerine Netdata’nın kendi aracını kullanmak daha sağlıklıdır:

cd /etc/netdata
./edit-config netdata.conf

Bu komut varsayılan konfigürasyonu /etc/netdata/netdata.conf dosyasına kopyalar ve düzenlemenize izin verir. Sadece değiştirmek istediğiniz satırların başındaki # işaretini kaldırmanız yeterli.

Önemli parametreler:

  • history: Hafızada tutulacak saniye sayısı (varsayılan 3600, yani 1 saat)
  • memory mode: Veri saklama modu (ram, save, map, dbengine)
  • update every: Örnekleme aralığı saniye cinsinden (varsayılan 1)

Production sunucularda dbengine modunu kullanmanızı öneririm çünkü bu mod uzun süreli veri saklama imkanı sağlar:

[global]
    memory mode = dbengine
    page cache size = 32
    dbengine multihost disk space = 256

Bu ayarla Netdata disk üzerinde 256MB’a kadar geçmiş veri saklayacaktır.

Ağ Trafiği İzleme: Derinlemesine Bakış

Arayüz Metrikleri

Netdata, sistemdeki tüm ağ arayüzlerini otomatik olarak keşfeder ve izler. Dashboard’da Network Interfaces bölümünde her arayüz için ayrı grafikler görürsünüz.

Her arayüz için şu metrikler toplanır:

  • Received/Sent: Gelen ve giden bant genişliği (Mb/s veya Gb/s)
  • Packets: Paket sayısı (received/sent)
  • Errors: Alım ve gönderim hataları
  • Drops: Düşürülen paketler
  • Fifo: FIFO hataları
  • Compressed: Sıkıştırılmış paketler

Belirli bir arayüzü izlemek istemiyorsanız konfigürasyonda hariç tutabilirsiniz:

./edit-config proc.plugin

Dosyada şu bölümü bulun:

[plugin:proc:/proc/net/dev]
    # exclude zero metrics from charts = yes
    # disabled interfaces = lo

TCP/IP Durumları

Ağ sorunlarını teşhis etmede en kritik metriklerden biri TCP bağlantı durumlarıdır. Netdata bunu IPv4 TCP Connections grafiğinde gösterir.

Özellikle dikkat etmeniz gereken durumlar:

  • TIME_WAIT: Normalin üzerinde TIME_WAIT bağlantısı varsa sunucunuz çok sayıda kısa süreli bağlantı açıp kapatıyordur. E-ticaret sitelerinde yoğun dönemlerde bu sayı binleri bulabilir.
  • CLOSE_WAIT: CLOSE_WAIT bağlantıları arttıysa muhtemelen uygulamanızda bir soket kapatmayan bir bug var demektir. Bu ciddi bir bellek sızıntısına yol açabilir.
  • SYN_RECV: Yüksek SYN_RECV sayısı SYN flood saldırısının işareti olabilir.

Gerçek dünya senaryosu: Bir müşterinin web sunucusunda performans sorunları yaşıyorduk. CPU ve RAM normaldi ama site yavaştı. Netdata’da baktığımızda CLOSE_WAIT durumundaki bağlantı sayısının 4000’i geçtiğini gördük. Uygulamada veritabanı bağlantılarının düzgün kapatılmadığı ortaya çıktı. Sorunu tespit etmemiz 5 dakika sürdü.

Bant Genişliği Kullanımını Anlık İzleme

Komut satırından da ağ trafiğini izleyebilirsiniz. Netdata’nın API’sini kullanarak:

curl -s "http://localhost:19999/api/v1/data?chart=net.eth0&after=-60&points=60&format=json" | python3 -m json.tool

Bu komut eth0 arayüzü için son 60 saniyelik veriyi JSON formatında döndürür. Script’lerinizde veya monitoring pipeline’larınızda bu endpoint’i kullanabilirsiniz.

Daha basit bir yöntem olarak Netdata’nın CLI aracını da kullanabilirsiniz:

netdatacli ping
netdatacli reload-claiming-state

Ağ Plugin’lerini Yapılandırma

Netdata’nın ağ izleme yetenekleri birkaç farklı plugin tarafından sağlanır. Bunları özelleştirebilirsiniz:

./edit-config go.d/dns_query.conf

DNS sorgu izleme için örnek konfigürasyon:

jobs:
  - name: local_dns
    servers:
      - 8.8.8.8
      - 1.1.1.1
      - 192.168.1.1
    domains:
      - google.com
      - github.com
    record_types:
      - A
      - AAAA
    network: udp
    port: 53

Bu konfigürasyonla Netdata belirttiğiniz DNS sunucularına düzenli aralıklarla sorgu atacak ve yanıt sürelerini izleyecektir. İnternete çıkışınızın DNS gecikmesini takip etmek için mükemmel bir yöntemdir.

Alert (Uyarı) Sistemi Kurulumu

İzleme yapmak güzel ama bir şeyler ters gittiğinde haberdar olmazsanız pek bir anlamı kalmaz. Netdata’nın alarm sistemi oldukça güçlüdür.

Hazır Alarmları İnceleme

Netdata kurulumla birlikte yüzlerce hazır alarm kuralı gelir. Ağ ile ilgili olanları görmek için:

ls /usr/lib/netdata/conf.d/health.d/ | grep -i net

Çıktıda şöyle dosyalar görürsünüz:

  • net.conf
  • tcp_resets.conf
  • dns_query.conf

Özel Alarm Oluşturma

Diyelim ki eth0 arayüzünüzde gelen trafik 800 Mbps’i geçince uyarı almak istiyorsunuz:

./edit-config health.d/net.conf

Dosyaya şu alarm tanımını ekleyin:

alarm: eth0_traffic_high
    on: net.eth0
lookup: average -1m unaligned of received
 units: Mbits/s
 every: 1m
  warn: $this > 600
  crit: $this > 800
  info: eth0 arayuzunde gelen trafik yuksek
    to: sysadmin

Bu tanımla:

  • Son 1 dakikanın ortalamasını alır
  • 600 Mbps’te WARNING
  • 800 Mbps’te CRITICAL alarm üretir

Email Bildirimi Ayarlama

./edit-config health_alarm_notify.conf

Email için şu bölümü düzenleyin:

SEND_EMAIL="YES"
DEFAULT_RECIPIENT_EMAIL="[email protected]"
EMAIL_SENDER="[email protected]"

Test etmek için:

sudo -u netdata /usr/lib/netdata/plugins.d/alarm-notify.sh test

Bu komut tüm bildirim kanallarına test mesajı gönderir. Email’in geldiğini gördüğünüzde alarm sistemi çalışıyor demektir.

Slack Bildirimi

Birçok ekip artık email yerine Slack kullanıyor. Netdata Slack entegrasyonu oldukça basit:

SEND_SLACK="YES"
SLACK_WEBHOOK_URL="https://hooks.slack.com/services/XXXXXXX/YYYYYYY/ZZZZZZZ"
DEFAULT_RECIPIENT_SLACK="#monitoring"

Webhook URL’ini Slack’ten almanız gerekir: Slack > Apps > Incoming Webhooks.

Çok Sunuculu Ortamlarda Netdata

Streaming (Akış) Yapılandırması

Birden fazla sunucunuz varsa her birinin ayrı ayrı dashboard’una girmek yorucu olur. Netdata’nın streaming özelliği sayesinde tüm sunucuların verilerini tek bir merkezi Netdata instance’ına aktarabilirsiniz.

Ana sunucuda (alıcı) /etc/netdata/stream.conf düzenleyin:

[11111111-2222-3333-4444-555555555555]
    enabled = yes
    history = 3600
    default memory mode = dbengine
    health enabled by default = auto
    allow from = 10.0.0.*

UUID’yi kendiniz belirleyebilirsiniz. Güvenli bir UUID üretmek için:

uuidgen

Agent sunucularda (gönderici) yine stream.conf düzenleyin:

[stream]
    enabled = yes
    destination = 10.0.0.1:19999
    api key = 11111111-2222-3333-4444-555555555555

Bundan sonra agent sunucuların tüm metrikleri ana sunucuya akar. Ana sunucunun dashboard’unda sol üst menüden tüm sunucular arasında geçiş yapabilirsiniz.

Gerçek dünya senaryosu: 15 web sunucusu, 3 veritabanı sunucusu ve 5 uygulama sunucusu olan bir yapıda hepsini tek bir Netdata dashboard’undan izliyorduk. Bir gün ağ trafiğinde anormallik gördük: 15 web sunucusundan 3 tanesinin giden trafiği diğerlerine göre çok daha yüksekti. Yük dengeleyicinin düzgün çalışmadığı ortaya çıktı. Streaming olmasaydı bunu tespit etmek çok daha uzun sürerdi.

Güvenlik Önlemleri

Netdata’yı açık bırakmak güvenlik açığı oluşturabilir. Birkaç önemli önlem:

Erişimi Kısıtlama

/etc/netdata/netdata.conf dosyasında:

[web]
    bind to = 127.0.0.1
    allow connections from = localhost 10.0.0.*
    allow dashboard from = localhost 10.0.0.*
    allow badges from = *
    allow streaming from = 10.0.0.*

Bu ayarla Netdata sadece localhost ve iç ağdan erişilebilir olur. Dışarıdan erişmek istiyorsanız önüne nginx reverse proxy koymanızı öneririm.

Nginx ile Reverse Proxy

server {
    listen 443 ssl;
    server_name netdata.sirket.com;

    ssl_certificate /etc/letsencrypt/live/netdata.sirket.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/netdata.sirket.com/privkey.pem;

    auth_basic "Netdata Monitoring";
    auth_basic_user_file /etc/nginx/.htpasswd;

    location / {
        proxy_pass http://127.0.0.1:19999;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Şifre dosyası oluşturmak için:

htpasswd -c /etc/nginx/.htpasswd sysadmin

Performans Sorunlarını Teşhis Etme

Gerçek Dünya Senaryosu: Yavaş Site

Bir e-ticaret müşterisinin sitesi ara ara yavaşlıyordu. Sunuculara bakıyorduk, her şey normal görünüyordu. Netdata’nın ağ grafiklerine baktığımızda ilginç bir şey fark ettik.

Netdata API’sini kullanarak son 1 saatin verilerini çektik:

curl -s "http://localhost:19999/api/v1/data?chart=net.eth0&after=-3600&points=360&format=csv" > /tmp/network_data.csv

CSV’yi incelediğimizde her 15 dakikada bir giden trafikte ani düşüşler olduğunu gördük. Bu düşüşler tam olarak yavaşlama şikayetleriyle örtüşüyordu. Araştırdık: Bir yedekleme scripti her 15 dakikada bir çalışıyor ve ağ kartını doyuruyordu. Script’e traffic shaping ekleyince sorun çözüldü:

tc qdisc add dev eth0 root tbf rate 100mbit burst 32kbit latency 400ms

Bu komut yedekleme trafiğini 100 Mbit ile sınırlandırır. Üretim trafiği etkilenmeden yedekleme yapılır hale gelir.

Paket Kaybı Tespiti

Paket kayıpları ağ sorunlarının erken işareti olabilir. Netdata bu konuda da yardımcı olur:

./edit-config go.d/ping.conf
jobs:
  - name: altyapi_izleme
    hosts:
      - 8.8.8.8
      - default_gateway_ip
      - veritabani_sunucu_ip
    packets: 5
    interval: 5

Bu konfigürasyonla Netdata belirtilen IP’lere sürekli ping atarak paket kaybı ve gecikme metriklerini toplar. Gateway’inize paket kaybı başlarsa uplink problemi olduğunu anlarsınız.

Netdata Cloud Entegrasyonu

Netdata’nın cloud versiyonu ücretsiz temel plan sunar. Bunun avantajı şu: Lokaldeki agent’larınızı cloud’a bağlarsınız ve internet üzerinden güvenli tünel ile her yerden erişebilirsiniz. Ayrıca tüm sunucularınızın alarmlarını tek panelden yönetebilirsiniz.

Bağlamak için:

netdatacli cloud-sync-config

Ya da kurulum sırasında claim token ile:

bash <(curl -Ss https://my-netdata.io/kickstart.sh) --claim-token TOKEN --claim-url https://app.netdata.cloud

Claim token’ı app.netdata.cloud adresinde hesap oluşturduktan sonra alabilirsiniz.

Düzenli Bakım ve Optimizasyon

Netdata’yı kurup bırakmak yetmez. Periyodik bakım gerekir.

Log dosyalarını kontrol edin:

journalctl -u netdata -n 100 --no-pager
tail -f /var/log/netdata/error.log

Disk kullanımını kontrol edin (dbengine kullanıyorsanız):

du -sh /var/lib/netdata/

Gereksiz plugin’leri kapatarak kaynak kullanımını azaltabilirsiniz. Örneğin IPMI sensörleriniz yoksa:

[plugin:freeipmi]
    update every = 5
    command options = # disabled

Güncelleme için:

bash <(curl -Ss https://my-netdata.io/kickstart.sh) --reinstall

Bu komut mevcut konfigürasyonunuzu koruyarak Netdata’yı en son sürüme günceller.

Sonuç

Netdata, ağ trafiği izleme konusunda kurulum kolaylığı ile derinlik arasında mükemmel bir denge sunar. Beş dakikada kurulur, anında çalışmaya başlar ve gerçekten işe yarar bilgiler verir.

Bu yazıda ele aldığımız konuları özetlersek:

  • Tek komutla kurulum ve temel yapılandırma
  • Ağ arayüzü metrikleri, TCP durumları ve DNS izleme
  • Özel alarm kuralları oluşturma ve bildirim ayarları
  • Çok sunuculu ortamlarda streaming yapılandırması
  • Nginx ile güvenli erişim
  • Gerçek sorunları Netdata ile nasıl teşhis edersiniz

Deneyimlerime göre Netdata’yı kurduktan sonra ilk hafta içinde mutlaka daha önce fark etmediğiniz bir ağ anomalisi yakalarsınız. Yüksek TIME_WAIT sayısı, beklenmedik bant genişliği kullanımı, DNS gecikmeleri… Bunların hepsi orada, siz sadece bakmanız gerekiyor.

Ağ izleme meselesinde altın kural şu: Sorun çıktıktan sonra bakmak yerine, sorun çıkmadan önce normalin ne olduğunu öğrenmek. Netdata’nın geçmiş verileri tam da bunun için var. Sunucunuzun “normal” trafiğini öğrendikten sonra anormali anında fark edersiniz.

Benzer Konular

Bir yanıt yazın

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