Ana içeriğe geç

Health Check

Türkçe karşılığı
sağlık kontrolü
Okunuşu
helt çek

Günlük kullanımda çoğunlukla İngilizcesi tercih edilir.

Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/health-check

Kısaca

Health check, bir servisin çalışır durumda olup olmadığını ve isteklere yanıt verebildiğini bildiren, genelde bir HTTP endpoint'i olan küçük otomatik testtir.

Health check nedir?

Health check, diğer sistemlerin çalışan bir servise 'iyi misin?' diye sormasını sağlar. Çoğu zaman /healthz ya da /health gibi, servis sağlıklıyken 200 OK, değilken 503 Service Unavailable gibi bir hata durumu döndüren hafif bir endpoint'tir. Load balancer'lar, konteyner orkestratörleri ve izleme araçları onu birkaç saniyede bir çağırır ve yanıta göre otomatik olarak harekete geçer.

Health check'ler farklı soruları yanıtlar. Liveness (canlılık) kontrolü, sürecin canlı mı yoksa örneğin bir kilitlenmede (deadlock) takılı mı olduğunu sorar ve başarısızlık 'beni yeniden başlat' demektir. Readiness (hazır olma) kontrolü, servisin şu anda trafik kabul edip edemeyeceğini, örneğin yapılandırmasını yükleyip veritabanına bağlandıktan sonra hazır olup olmadığını sorar ve başarısızlık yeniden başlatma olmadan 'henüz bana istek gönderme' demektir. Kubernetes tam olarak bunları liveness, readiness ve startup probe'ları olarak kullanır; load balancer'lar da başarısız olan sunucuları toparlanana kadar rotasyondan çıkarmak için health check kullanır.

Health check, bir hemşirenin belirli aralıklarla hastanın nabzını kontrol etmesine benzer: tam bir tıbbi muayene yerine alarmı erken çaldıran hızlı, rutin bir ölçüm. İyi health check'ler sürekli çalıştıkları için hızlı ve ucuzdur ve gürültü yaratmamaları için genellikle istek loglarının ve rate limit'lerin dışında bırakılır.

Klasik bir hata, liveness kontrolünü veritabanına veya diğer servislere bağımlı yapmaktır. Veritabanı kısa süreliğine çökerse her örnek liveness kontrolünde başarısız olur ve aynı anda yeniden başlatılır; bu da küçük bir kesintiyi büyük bir kesintiye çevirir. Bu yüzden bağımlılık kontrolleri, varsa readiness kontrolünde yer almalıdır. Health check, gözlemlenebilirlikten (observability) de çok daha dardır: otomasyon için basit bir evet-hayır sinyali verir; metrikler, loglar ve izler ise sistemin ne kadar iyi performans gösterdiğini ve nedenini açıklar.

Önemli noktalar

  • Health check, bir servisin sağlıklı olup olmadığını bildiren hızlı bir endpoint veya komuttur.
  • Load balancer'lar ve orkestratörler onu düzenli çağırır; trafiği yeniden yönlendirir veya otomatik yeniden başlatır.
  • Liveness kontrolleri yeniden başlatmayı tetikler; readiness kontrolleri trafik gönderilip gönderilmeyeceğini belirler.
  • Toplu yeniden başlatmalardan kaçınmak için liveness kontrollerini harici bağımlılıklardan uzak tutun.
  • Health check'ler sürekli çalıştıkları için hızlı ve ucuz olmalıdır.

Örnek

Kubernetes'te liveness, readiness ve startup probe'larıyaml
containers:
  - name: api
    image: registry.example.com/api:1.4.2
    livenessProbe:            # failing -> the container is restarted
      httpGet: { path: /livez, port: 8080 }
      periodSeconds: 10
      failureThreshold: 3
    readinessProbe:           # failing -> no traffic, but no restart
      httpGet: { path: /readyz, port: 8080 }
      periodSeconds: 5
    startupProbe:             # gives slow-starting apps time to boot
      httpGet: { path: /livez, port: 8080 }
      failureThreshold: 30

Sık sorulan sorular

Liveness kontrolü ile readiness kontrolü arasındaki fark nedir?

Liveness kontrolü platforma sürecin takılıp takılmadığını ve yeniden başlatılması gerekip gerekmediğini söyler. Readiness kontrolü ise sürecin şu anda trafik alıp alamayacağını söyler; başarısız olması örneği yeniden başlatmadan load balancer'dan çıkarır.

Bir health check endpoint'i ne döndürmelidir?

Sağlıklıyken 200, değilken 503 döndürün; isteğe bağlı olarak her bağımlılığın durumunu anlatan küçük bir JSON gövdesiyle. Saldırganlara yardımcı olabileceğinden ayrıntılı dahili bilgileri herkese açık endpoint'lerin dışında tutun.

Endpoint neden sıklıkla /healthz olarak adlandırılır?

Sondaki z, Google'ın dahili sistemlerinden gelip Kubernetes üzerinden yayılan ve gerçek uygulama route'larıyla çakışmayı önlemeyi amaçlayan bir adlandırma kuralıdır. Kubernetes'in kendi bileşenleri artık bunun yerine /livez ve /readyz sunar.

İlgili sayfalar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar