
İzleme sisteminiz ana sayfayı sorguluyor ve "200 OK" alıyor. Yeşil ışık yanıyor. Ama veritabanı bağlantısı kopmuş, kuyruk durmuş ve kullanıcılar hata alıyor.
Bu yazı, gerçek anlamlı sağlık kontrolü kurmayı ele alıyor.
Ana Sayfayı Sorgulamak Neden Yetmez?
Basit bir HTTP kontrolünün gördüğü ve göremediği şeyler:
| Görür | Görmez |
|---|---|
| Web sunucusu ayakta mı | Veritabanı erişilebilir mi |
| Ağ erişilebilir mi | Önbellek servisi çalışıyor mu |
| Sayfa dönüyor mu | Kuyruk işleniyor mu |
| Sertifika geçerli mi | Disk dolmuş mu |
Asıl sorun şudur: önbellekten sunulan bir ana sayfa, veritabanı tamamen çökmüş olsa bile başarıyla dönebilir.
Yani izlemeniz yeşil görünürken uygulamanız fiilen çalışmıyor olabilir. Bu, en tehlikeli izleme yanılgısıdır.
Neyi Kontrol Etmeli?
Anlamlı bir sağlık kontrolü, uygulamanın kritik bağımlılıklarını sınar:
- Veritabanı bağlantısı. Basit bir sorgu çalıştırın.
- Önbellek servisi. Yaz ve oku.
- Disk alanı. Yazılabilir mi, yer var mı?
- Kuyruk durumu. Birikme var mı?
- Kritik dış servisler. Ulaşılabilir mi?
Birinci maddede dikkat: bağlantı kurabilmek yeterli değildir, gerçekten bir sorgu çalıştırılmalıdır — çünkü bağlantı açık olup veritabanı yanıt veremez durumda olabilir.
Beşinci madde ise dikkatli ele alınmalıdır. Dış bir servisin çökmesi sizin sunucunuzu sağlıksız göstermemeli, aksi hâlde yük dengeleyici tüm sunucularınızı havuzdan çıkarabilir.
İki Seviyeli Yaklaşım
En sağlam yapı, iki farklı uç nokta tanımlamaktır:
- Canlılık kontrolü: Süreç ayakta mı? Hafif ve hızlı.
- Hazırlık kontrolü: İstek alabilecek durumda mı? Bağımlılıkları sınar.
Ayrım işlevseldir: canlılık başarısız olursa süreç yeniden başlatılır, hazırlık başarısız olursa yalnızca trafik gönderilmez.
Bu ayrım olmadan tehlikeli bir döngü oluşabilir. Veritabanı geçici olarak yanıt vermediğinde tek bir kontrol kullanılıyorsa, tüm uygulama sunucuları yeniden başlatılır — oysa sorun onlarda değildir.
Yanıt Biçimi
Sağlık kontrolü yalnızca durum kodu değil, ayrıntı da dönmelidir:
- Genel durum — sağlıklı, bozulmuş veya sağlıksız
- Her bağımlılığın ayrı durumu
- Yanıt süreleri
- Uygulama sürümü
- Çalışma süresi
İkinci madde teşhis süresini kısaltır: hangi bağımlılığın bozuk olduğunu doğrudan söyleyen bir yanıt, sorunu aramaya harcanan dakikaları ortadan kaldırır.
Dördüncü madde ise dağıtım sorunlarını yakalar. Sunucuların farklı sürümler bildirdiğini görmek, bir yayının eksik tamamlandığını anında gösterir.
Ara Durum: Bozulmuş
İkili bir sağlık kararı çoğu zaman yetersizdir:
| Durum | Örnek |
|---|---|
| Sağlıklı | Tüm bağımlılıklar çalışıyor |
| Bozulmuş | Önbellek kapalı ama site çalışıyor |
| Sağlıksız | Veritabanı erişilemez |
Orta durum önemlidir: önbellek servisi çökmüş bir uygulama yavaşlar ama çalışmaya devam eder — bu sunucuyu havuzdan çıkarmak durumu iyileştirmez, kötüleştirir.
Bu ayrım, uyarı politikanızı da belirler. Bozulmuş durum bir bildirim üretmeli ama gece yarısı kimseyi uyandırmamalıdır.
Güvenlik Boyutu
Sağlık uç noktası bilgi sızdırabilir:
- Altyapı bileşenlerini açık eder. Hangi veritabanı, hangi servisler?
- Sürüm bilgisi verir. Bilinen açıklar hedeflenebilir.
- İç ağ adreslerini gösterebilir.
- Hata mesajları ayrıntı sızdırabilir.
Çözüm ikili bir yapıdır: herkese açık uç nokta yalnızca sağlıklı ya da sağlıksız der, ayrıntılı sürüm kimlik doğrulaması gerektirir.
Ya da ayrıntılı uç nokta yalnızca iç ağdan erişilebilir olur. Yük dengeleyici ve izleme sistemi iç ağdan sorgular, dışarıya kapalıdır.
Kontrolün Kendi Maliyeti
Sağlık kontrolü sık çalıştırılır ve hafif olmalıdır:
- Ağır sorgular çalıştırmayın. Basit bir bağlantı testi yeterli.
- Sonucu kısa süre önbelleğe alın.
- Zaman aşımı tanımlayın. Kontrol kendisi takılmasın.
- Günlüğe yazmayın. Kayıtları şişirir.
Dördüncü madde pratik bir sorunu önler: saniyede bir sorgulanan bir uç nokta, günde on binlerce satır günlük üretir ve gerçek istekleri görünmez kılar.
Üçüncü madde ise kritik bir tuzağı kapatır. Zaman aşımı tanımlanmamış bir sağlık kontrolü, veritabanı yanıt vermediğinde askıda kalır ve izleme sistemi ne başarı ne hata alır.
Bu tür uç noktaları kendi yapılandırmanızda tanımlayabileceğiniz VDS kiralama yapılarında, iç ağ erişimi ve dış erişim ayrımını da doğrudan kurabilirsiniz.
Sonuç
Ana sayfayı sorgulayan bir izleme yanıltıcıdır: önbellekten sunulan bir sayfa, veritabanı tamamen çökmüş olsa bile başarıyla döner. Anlamlı bir kontrol kritik bağımlılıkları sınamalı ve iki seviyeye ayrılmalıdır — canlılık başarısız olursa süreç yeniden başlar, hazırlık başarısız olursa yalnızca trafik kesilir. Ara bir "bozulmuş" durumu tanımlayın: önbelleği çökmüş bir sunucuyu havuzdan çıkarmak durumu kötüleştirir. Ve ayrıntılı yanıtı dışarıya açmayın.
Sıkça Sorulan Sorular (SSS)
Ana sayfayı sorgulamak neden yeterli değil?
Çünkü önbellekten sunulan bir sayfa, veritabanı çökmüş olsa bile başarıyla döner. İzlemeniz yeşil görünürken uygulamanız fiilen çalışmıyor olabilir. Anlamlı bir kontrol, gerçek bir sorgu çalıştırarak bağımlılıkları sınamalıdır.
Neden iki farklı uç nokta gerekli?
Çünkü sonuçları farklıdır. Canlılık kontrolü başarısız olursa süreç yeniden başlatılır; hazırlık kontrolü başarısız olursa yalnızca trafik gönderilmez. Tek kontrol kullanırsanız, veritabanı geçici olarak yanıt vermediğinde tüm uygulama sunucuları gereksiz yere yeniden başlatılır.
Dış servisleri de kontrol etmeli miyim?
Dikkatli olun. Bir dış servisin çökmesi sizin sunucunuzu sağlıksız göstermemelidir — aksi hâlde yük dengeleyici tüm sunucularınızı havuzdan çıkarır. Dış servis durumunu bildirin ama genel sağlık kararını buna bağlamayın.
Sağlık uç noktası güvenlik riski mi?
Ayrıntılı yanıt dönüyorsa evet — altyapı bileşenlerinizi, sürümlerinizi ve iç adresleri açık eder. Herkese açık uç nokta yalnızca sağlıklı/sağlıksız demeli; ayrıntılı sürüm ya kimlik doğrulaması istemeli ya da yalnızca iç ağdan erişilebilir olmalıdır.