Yanıt içeriğinde belirli bir metni (ör. "OK") nasıl doğrularım?
Kısa cevap
HTTP ya da HTTPS türündeki Health Checks profilinde Content Check Mode alanında Basic (string match) (varsayılan) bırakılır ve Expected Content Query alanına aranan metin (ör. OK) yazılır; metin yanıt gövdesinde geçmiyorsa denetim başarısız olur. Bu arama büyük/küçük harfe duyarlıdır ve düzenli ifade (regex) değildir. Harf duyarsız, desenli ya da JSON alanına göre kontrol gerekiyorsa JSONata Expression modu kullanılır; aynı ayarlar WEB-CLI'da --contentCheckMode ve --contentQuery ile yazılır.
Sorun: Sunucu Yanıt Veriyor ama Uygulama Sağlıksız
Bir uygulama çökse bile web sunucusu 200 kodlu bir hata sayfası dönebilir. Yalnızca durum koduna bakan denetim bu durumu yakalayamaz; sunucu sağlıklı görünür ve trafik almaya devam eder. Sağlık sayfasının gövdesinde uygulamanın gerçekten çalıştığını gösteren bir metnin (ör. OK, healthy) aranması gerekir.
Çözüm: 3 Yöntem
Yöntem 1 ve Yöntem 2 aynı profilde birlikte kullanılamaz; Content Check Mode alanında biri seçilir. Yöntem 3, Yöntem 1'in WEB-CLI karşılığıdır.
| Durumunuz | Uygun yöntem |
|---|---|
| Sağlık sayfası sabit bir metin dönüyor | Yöntem 1: Basic (string match) |
| Harf duyarsız ya da desenli arama, JSON alanı kontrolü gerekiyor | Yöntem 2: JSONata Expression |
| Profili WEB-CLI'dan oluşturuyorum ya da güncelliyorum | Yöntem 3: WEB-CLI |
Yöntem 1: Basic (string match) Önerilen
- Nasıl çalışır Yanıt gövdesinde aranan metin geçiyorsa içerik kontrolü başarılıdır; metnin başındaki ve sonundaki boşluklar kırpılır. Durum kodu da Expected Status Codes listesinde olmalıdır.
- Nerede açılırLoad Balancer → Profiles → Health Checks → HTTP/HTTPS profili → Content Check Mode → Expected Content Query
- Gereksinim Sağlık sayfasının sabit bir metin dönmesi; profilin atanacağı bir Kurum Servisi
- vService tipi Tümü (Network vService'te ANY - L3 ve Port Range açıkken sağlık durumu dağıtıma yansımaz)
Adım adım yapılandırma
Sol alttaki TR7 logosuyla Configuration Menu açılır; Load Balancer → Profiles → Health Checks yolu izlenir.
Yeni profil için Add'e tıklanır; mevcut bir HTTP/HTTPS profili için profil seçilip Edit'e tıklanır (Nasıl eklenir?).
Yeni profilde Name girilir ve Check Type HTTP (varsayılan) ya da HTTPS seçilir; Path + Query alanına sağlık adresi yazılır (ör. /health). Mevcut profilde bu adım atlanır.
Expected Status Codes listesinde sağlık sayfasının döndüğü kodun (varsayılan 200: OK) seçili olduğu kontrol edilir; durum kodu ve içerik birlikte sağlanmalıdır.
Content Check Mode alanında Basic (string match) (varsayılan) bırakılır; Expected Content Query alanına aranan metin yazılır (ör. OK).
Formun altındaki Add (düzenlemede Edit) butonuna tıklanır. Profil zaten atanmışsa değişiklik profili kullanan bütün Kurum Servislerine uygulanır.
Yeni profil için Load Balancer → Backend Services yolu izlenir; Kurum Servisine sağ tıklanıp Edit seçilir.
Health Check alanında profil seçilir.
Formun altındaki Edit butonuna tıklanır. Cluster'da değişiklik varsayılan olarak eş cihaza kendiliğinden aktarılır; Manual Sync Mode açıksa Synchronize ile gönderilir.
Doğrulama
Backend Services listesinin Health kolonundaki gösterge kontrol edilir (Health durumu göstergesi).
OK (yeşil)Sağlık sayfasındaki metin geçici olarak değiştirildiğinde Kurum Servisinin önizlemesindeki Health Checks sekmesinde içerik hatası görünür; art arda Required failures kadar başarısızlıktan sonra durum Error olur.
HTTP / HTTP(s) content check failedYöntem 2: JSONata expression
- Nasıl çalışır İfade durum kodunu (
status), yanıt başlıklarını (headers), çözümlenmiş gövdeyi (body) ve ham gövdeyi (bodyRaw) değerlendirir; sonuç doğru (truthy) ise içerik kontrolü başarılıdır. Harf duyarsız arama ve düzenli ifade kullanılabilir. - Nerede açılır HTTP/HTTPS profili → Content Check Mode → JSONata Expression → JSONata Query
- Gereksinim Sağlık sayfasının döndüğü kodun Expected Status Codes listesinde olması
- vService tipi Tümü
Adım adım yapılandırma
Load Balancer → Profiles → Health Checks ekranında HTTP/HTTPS profili seçilip Edit'e tıklanır (yeni profil için Add).
Content Check Mode alanında JSONata Expression seçilir; Expected Content Query alanının yerine JSONata Query alanı görünür.
JSONata Query alanına ifade yazılır; örneğin harf duyarsız arama için $contains(bodyRaw, /ok/i), JSON gövde için body.status = "UP". Alanın editöründe ifade örnek bir yanıt üzerinde denenebilir.
Edit (yeni profilde Add) butonuna tıklanır; yeni profil Yöntem 1'deki gibi Kurum Servisinin Health Check alanında seçilir.
Doğrulama
Backend Services listesinin Health kolonundaki gösterge kontrol edilir; ifade sağlanmazsa önizlemedeki Health Check kartında JSONata hatası görünür (Health durumu göstergesi).
OK (yeşil)Yöntem 3: WEB-CLI
- Nasıl çalışır Yöntem 1'deki ayarlar
--contentCheckMode basicve--contentQueryalanlarıyla yazılır. - Nerede açılır WEB-CLI →
lb hc add/lb hc update(lb hc · HTTP ve HTTPS alanları) - Gereksinim WEB-CLI erişimi; profili atamak için Kurum Servisinin kimliği
- vService tipi Tümü
Adım adım yapılandırma
checkType ve name zorunludur ve bu sırayla yazılır; --expectedStatusCodes yazılmazsa 200 kullanılır:
lb hc add checkType http name web-icerik --uri /health --contentCheckMode basic --contentQuery "OK"Content Check Mode alanı Basic (string match) olan mevcut bir HTTP/HTTPS profilinde yalnızca aranan metin değiştirilecekse:
lb hc update id <profil-kimliği> --contentQuery "OK"Profil kimliği lb hc list, Kurum Servisi kimliği lb backend list çıktısından alınır:
lb backend update id <backend-kimliği> --hc <profil-kimliği>Doğrulama
Profil kaydı görüntülenir.
lb hc show <profil-kimliği>contentCheckMode basic, contentQuery OKSık Yapılan Hatalar
- Regex yazmak. Basic modda metin olduğu gibi aranır; desen için JSONata Expression kullanılır.
- Harf farkını gözden kaçırmak.
okaramasıOKmetniyle eşleşmez. - JSON'u metin olarak aramak.
"status":"up"araması"status": "up"(boşluklu) gövdeyle eşleşmez; JSON için JSONata Expression tercih edilir. - Durum kodunu unutmak. İçerik doğru olsa bile kod Expected Status Codes listesinde değilse denetim başarısız olur.
Dokümantasyonda nasıl yapılır
