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.conftcp_resets.confdns_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.
