Netdata ile Redis ve Memcached Önbellek Performansını İzleme
Prodüksiyonda bir Redis veya Memcached cluster’ı yönetiyorsanız, “her şey yolunda mı?” sorusuna cevap bulmak için sadece redis-cli info çıktısına bakmak yetmez. Anlık değerler size hiçbir şey anlatmaz; trend görmek, anomali yakalamak ve darboğazı tespit etmek için zaman serisi verisine ihtiyacınız var. Netdata tam da bu noktada devreye giriyor: sıfır konfigürasyonla saniyeler içinde kurulup önbellek metriklerini canlı olarak görselleştiren, hafif ve açık kaynak bir izleme aracı. Bu yazıda Redis ve Memcached performansını Netdata ile nasıl izleyeceğinizi, hangi metriklere odaklanmanız gerektiğini ve gerçek dünya senaryolarında nasıl aksiyon alacağınızı ele alacağız.
Netdata Neden Önbellek İzlemede Öne Çıkıyor
Prometheus + Grafana kombinasyonu güçlü ama kurulum ve bakım maliyeti yüksek. Datadog veya New Relic ise kurumsal bütçe ister. Netdata ise tek bir komutla kurulur, otomatik servis keşfi yapar ve özellikle Redis ile Memcached için yerleşik kolektörlere sahiptir.
Netdata’nın öne çıkan özellikleri:
- 1 saniyelik granülite: Redis hit/miss oranındaki ani düşüşü milisaniyeler içinde görürsünüz
- Sıfır konfigürasyon: Servis standart portta çalışıyorsa Netdata otomatik bağlanır
- Alarm sistemi: Eşik bazlı ve anomali tabanlı alertler
- Düşük overhead: Sunucu kaynaklarının %1’inden azını kullanır
Netdata Kurulumu
Önce Netdata’yı sunucunuza kuralım. Tek satır ile:
wget -O /tmp/netdata-kickstart.sh https://my-netdata.io/kickstart.sh
sh /tmp/netdata-kickstart.sh --stable-channel --disable-telemetry
Kurulum tamamlandıktan sonra servisin durumunu kontrol edin:
systemctl status netdata
systemctl enable netdata
Netdata varsayılan olarak http://sunucu-ip:19999 adresinde çalışır. Güvenlik duvarı kuralını eklemeyi unutmayın:
# Sadece belirli bir IP'den erişime izin vermek için
ufw allow from 192.168.1.0/24 to any port 19999
# Ya da geçici test için
ufw allow 19999/tcp
Prodüksiyonda Netdata arayüzünü doğrudan internete açmak yerine Nginx reverse proxy arkasına koymanızı öneririm. Basit bir Nginx konfigürasyonu:
cat > /etc/nginx/sites-available/netdata << 'EOF'
server {
listen 443 ssl;
server_name monitoring.example.com;
ssl_certificate /etc/letsencrypt/live/monitoring.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/monitoring.example.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;
}
}
EOF
ln -s /etc/nginx/sites-available/netdata /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
Redis Kolektörünü Yapılandırma
Netdata, Redis’i otomatik olarak keşfetmek için go.d.plugin kullanır. Standart port (6379) ve localhost üzerinde çalışan Redis için ekstra konfigürasyon gerekmez. Ancak şifreli veya farklı portta çalışan Redis örnekleri için ayar dosyasını düzenlemeniz gerekir.
# Konfigürasyon dosyasını oluşturun
cat > /etc/netdata/go.d/redis.conf << 'EOF'
jobs:
- name: local
address: redis://127.0.0.1:6379
- name: redis_prod
address: redis://127.0.0.1:6380
password: "guclu-sifreniz-buraya"
timeout: 2
- name: redis_sentinel
address: redis://127.0.0.1:26379
EOF
Konfigürasyonu uygulamak için Netdata’yı yeniden başlatın:
systemctl restart netdata
# Logları kontrol edin
tail -f /var/log/netdata/error.log | grep redis
Eğer Redis ACL kullanıyorsanız (Redis 6.0+), izleme için ayrı bir kullanıcı oluşturmanız hem güvenlik hem de yönetim açısından daha doğrudur:
redis-cli ACL SETUSER netdata on >netdata_password ~* +INFO +PING +CLIENT resetkeys
Redis için Kritik Metrikler
Netdata’da Redis bölümünü açtığınızda onlarca metrik göreceksiniz. Neye odaklanacağınızı bilmek önemli.
Hit Rate ve Miss Rate
Bu iki metrik, önbelleğinizin ne kadar verimli çalıştığını gösterir. Hit rate’i manuel hesaplamak isterseniz:
redis-cli info stats | grep -E "keyspace_hits|keyspace_misses"
# Çıktı:
# keyspace_hits:1483920
# keyspace_misses:24531
Hit rate = keyspace_hits / (keyspace_hits + keyspace_misses) * 100
%90 altına düşen hit rate alarm vermelidir. E-ticaret sitelerinde bu oran genellikle %95-99 arasında olması beklenir. Hit rate düşüşü genellikle şu anlara gelir:
- TTL ayarları çok kısa tutulmuş, veriler süresi dolmadan erişilemiyor
- maxmemory sınırına ulaşıldı ve eviction başladı
- Yeni deployment sonrası cache cold start yaşandı
Memory Kullanımı ve Eviction
redis-cli info memory | grep -E "used_memory_human|maxmemory_human|mem_fragmentation_ratio"
redis-cli info stats | grep evicted_keys
mem_fragmentation_ratio değeri önemlidir:
- 1.0 ile 1.5 arası: Normal ve sağlıklı
- 1.5 üzeri: Yüksek bellek fragmentasyonu, Redis yeniden başlatmayı düşünün
- 1.0 altı: Redis belleği swap’a taşıyor, ciddi performans sorunu
Connected Clients ve Komut Hızı
redis-cli info clients
redis-cli info stats | grep instantaneous_ops_per_sec
instantaneous_ops_per_sec değeri ani yükselme gösteriyorsa uygulama katmanında bir sorun var olabilir; döngüsel sorgular veya N+1 problemi gibi.
Memcached Kolektörünü Yapılandırma
Memcached için de benzer şekilde go.d.plugin devreye girer. Standart port 11211 üzerindeki Memcached otomatik keşfedilir.
cat > /etc/netdata/go.d/memcached.conf << 'EOF'
jobs:
- name: local
address: 127.0.0.1:11211
- name: memcached_sessions
address: 127.0.0.1:11212
timeout: 2
EOF
Memcached bağlantısını test etmek için:
echo "stats" | nc -q 1 127.0.0.1 11211 | head -20
Kolektörün çalışıp çalışmadığını doğrulamak için Netdata debug modunu kullanabilirsiniz:
sudo -u netdata /usr/libexec/netdata/plugins.d/go.d.plugin -d -m memcached
Memcached için Kritik Metrikler
Hit ve Miss Oranları
Netdata, Memcached için otomatik olarak get_hits ve get_misses metriklerini toplar. Bu değerleri komut satırından kontrol etmek için:
echo "stats" | nc -q 1 127.0.0.1 11211 | grep -E "get_hits|get_misses|curr_items|limit_maxbytes|bytes"
Eviction Takibi
Memcached’de eviction sayısı kritik bir göstergedir. Bellek dolduğunda Memcached LRU algoritmasıyla eski verileri siler. Çok fazla eviction, belleğinizin yetersiz kaldığı anlamına gelir:
echo "stats" | nc -q 1 127.0.0.1 11211 | grep evictions
Saatte birkaç yüz eviction normal sayılabilir. Ama saniyede yüzlerce eviction varsa Memcached’e RAM ekleme vakti gelmiştir.
Slab Analizi
Memcached belleği slab adı verilen bloklara bölerek yönetir. Slab verimsizliği ciddi bellek israfına yol açabilir:
echo "stats slabs" | nc -q 1 127.0.0.1 11211
echo "stats items" | nc -q 1 127.0.0.1 11211
Netdata Alertleri Yapılandırma
Netdata’nın yerleşik alarm sistemi Redis ve Memcached için bazı varsayılan alertler içerir. Kendi özel alertlerinizi tanımlamak için:
cat > /etc/netdata/health.d/redis-custom.conf << 'EOF'
# Redis hit rate alarmı
alarm: redis_hit_rate_warning
on: redis.hit_rate
lookup: average -5m percentage
units: %
every: 1m
warn: $this < 90
crit: $this < 75
info: Redis hit rate son 5 dakikada düşük
to: sysadmin
# Redis eviction alarmı
alarm: redis_evictions
on: redis.evicted_keys
lookup: sum -1m
units: keys
every: 1m
warn: $this > 100
crit: $this > 1000
info: Redis son 1 dakikada çok fazla key evict etti
to: sysadmin
# Redis bellek kullanımı
alarm: redis_memory_high
on: redis.memory
lookup: average -5m
units: MiB
every: 5m
warn: $this > 3500
crit: $this > 4000
info: Redis bellek kullanımı kritik seviyede
to: sysadmin
EOF
Memcached için de benzer alertler:
cat > /etc/netdata/health.d/memcached-custom.conf << 'EOF'
alarm: memcached_hit_rate
on: memcached.hit_rate
lookup: average -5m percentage
units: %
every: 1m
warn: $this < 85
crit: $this < 70
info: Memcached hit rate düşük
to: sysadmin
alarm: memcached_evictions_high
on: memcached.evictions
lookup: sum -5m
units: evictions
every: 5m
warn: $this > 500
crit: $this > 2000
info: Memcached eviction oranı yüksek, bellek yetersiz olabilir
to: sysadmin
EOF
Alert bildirimlerini e-posta üzerinden göndermek için:
cat >> /etc/netdata/health_alarm_notify.conf << 'EOF'
SEND_EMAIL="YES"
DEFAULT_RECIPIENT_EMAIL="[email protected]"
EMAIL_SENDER="[email protected]"
EOF
systemctl restart netdata
Gerçek Dünya Senaryosu: E-ticaret Flash Sale
Bir e-ticaret platformunda çalışan sysadmin olduğunuzu düşünün. Akşam 20:00’de flash sale başlayacak ve Redis ürün katalog önbelleğini tutuyor.
Sale başladıktan 10 dakika sonra Netdata alarmı çaldı: Redis hit rate %97’den %71’e düştü. Aynı anda eviction sayısı dakikada 3000’e çıktı. Ne yaparsınız?
Adım 1: Anlık durumu kontrol edin
redis-cli info memory
redis-cli info stats | grep -E "evicted|hits|misses"
redis-cli info keyspace
Adım 2: Maxmemory politikasını geçici olarak değiştirin
Eğer allkeys-lru politikası kullanılıyorsa ve saldırgan eviction görüyorsanız, maxmemory sınırını geçici olarak artırın:
# Mevcut limiti kontrol et
redis-cli config get maxmemory
# Geçici olarak artır (örneğin 4GB'dan 6GB'a)
redis-cli config set maxmemory 6gb
# Kalıcı için redis.conf'u düzenleyin
sed -i 's/^maxmemory .*/maxmemory 6gb/' /etc/redis/redis.conf
Adım 3: Hotkey analizi yapın
Hangi keyler en çok erişiliyor, hangilerinin TTL’i kısa?
redis-cli --hotkeys
redis-cli --bigkeys
Adım 4: Uygulama ekibini bilgilendirin
Hit rate düşüşünün ardından uygulamanın cache warming yapmadığı anlaşıldı. Cache warming scripti:
#!/bin/bash
# Kritik ürün sayfalarını önceden cache'e at
PRODUCT_IDS=$(mysql -u app -ppassword shopdb -e "SELECT id FROM products WHERE featured=1" -s -N)
for id in $PRODUCT_IDS; do
curl -s "http://localhost:8080/api/products/$id" > /dev/null
echo "Ürün $id cache'e alındı"
done
echo "Cache warming tamamlandı"
redis-cli info stats | grep keyspace_hits
Gerçek Dünya Senaryosu: Memcached Session Problemi
Bir medya sitesinde oturum verilerini Memcached’de tutuyorsunuz. Sabah 09:00’da kullanıcılar oturumlarının kapandığını bildirmeye başladı. Netdata’da ne görürsünüz?
Netdata grafiklerinde Memcached eviction sayısının gece 03:00’dan itibaren artmaya başladığını ve gündüz saatlerinde patlama yaptığını görürsünüz. Çözüm adımları:
# Slab kullanım durumunu analiz et
echo "stats slabs" | nc -q 1 127.0.0.1 11211 | awk '/chunk_size|used_chunks|free_chunks/'
# Mevcut item sayısı ve sona erme süreleri
echo "stats items" | nc -q 1 127.0.0.1 11211
# Memcached servisine daha fazla bellek ver
# /etc/memcached.conf dosyasında:
sed -i 's/^-m ./-m 2048/' /etc/memcached.conf
systemctl restart memcached
Netdata Cloud ile Çoklu Sunucu İzleme
Birden fazla sunucuda Redis veya Memcached çalıştırıyorsanız Netdata Cloud ücretsiz tier ile bunları tek panelde toplayabilirsiniz.
# Her sunucuda Netdata Cloud'a bağlanın
netdata-claim.sh -token=CLOUD_TOKEN_BURAYA -rooms=ROOM_ID -url=https://app.netdata.cloud
Bağlantı durumunu kontrol etmek için:
systemctl status netdata-agent
grep "CLAIMED" /var/lib/netdata/cloud.d/claimed.conf
Performans Optimizasyonu için İzleme Tavsiyeleri
Netdata verilerini düzenli olarak analiz ederek proaktif önlemler alabilirsiniz. Günlük incelemeniz gereken metrikler:
- Redis:
used_memorytrendi,keyspace_hits/missesoranı,connected_clientsmaksimumu,slowloguzunluğu - Memcached:
get_hits/missesoranı,evictionstoplamı,curr_connectionsmaksimumu,byteskullanımı
Redis slow log’unu düzenli kontrol etmek için basit bir script:
#!/bin/bash
# Her gece çalıştırılacak slow log analiz scripti
THRESHOLD=10000 # 10ms üzeri sorgular
SLOWLOG=$(redis-cli slowlog get 100)
COUNT=$(redis-cli slowlog len)
if [ "$COUNT" -gt 50 ]; then
echo "UYARI: Son periyotta $COUNT adet yavaş sorgu tespit edildi"
echo "$SLOWLOG" | head -50
redis-cli slowlog reset
fi
Bu scripti cron’a ekleyin:
echo "0 6 * * * root /usr/local/bin/redis-slowlog-check.sh | mail -s 'Redis Slow Log Raporu' [email protected]" >> /etc/crontab
Netdata Konfigürasyonunu Backup’lama
Tüm bu konfigürasyonu yaptıktan sonra backup almayı unutmayın:
# Netdata konfigürasyonlarını yedekle
tar -czf /backup/netdata-config-$(date +%Y%m%d).tar.gz
/etc/netdata/go.d/redis.conf
/etc/netdata/go.d/memcached.conf
/etc/netdata/health.d/redis-custom.conf
/etc/netdata/health.d/memcached-custom.conf
/etc/netdata/health_alarm_notify.conf
# Git ile versiyon kontrolü altına alın
cd /etc/netdata
git init
git add .
git commit -m "Initial Netdata monitoring configuration"
Sonuç
Netdata ile Redis ve Memcached izlemek, prodüksiyon ortamında fark yaratır. Hit rate düşüşlerini gerçek zamanlı görmek, eviction patlamalarını önceden yakalamak ve bellek fragmentasyonunu takip etmek; kesintisiz hizmet için olmazsa olmaz.
Önemli olan noktalar şöyle sıralanabilir: Önce standart portta çalışan servisleri Netdata’nın otomatik keşfetmesine izin verin, konfigürasyon karmaşıklığına girmeyin. Sonra hit rate, eviction ve bellek kullanımı için özelleştirilmiş alertler tanımlayın. Flash sale veya büyük kampanyalar öncesinde cache warming stratejinizi test edin ve Netdata grafiklerindeki trend’e bakarak kapasite planlaması yapın.
Redis ve Memcached sadece “çalışıyor mu çalışmıyor mu” diye değil, “ne kadar verimli çalışıyor” diye izlenmelidir. Netdata bu soruya saniye bazında ve görsel olarak cevap veren en pratik araçlardan biri. Kurulum maliyeti düşük, öğrenme eğrisi kısa, kazanımı ise büyük.
