Health Check'te JSON yanıtını alan bazında doğrulayabilir miyim (Content Check Mode: JSONata Expression)?
Kısa cevap
Evet. HTTP ya da HTTPS profilinde Content Check Mode alanında JSONata Expression seçilir ve JSONata Query alanına ifade yazılır (ör. body.status = "UP"). İfade status (durum kodu), headers (küçük harfli başlıklar), body (JSON ya da XML olarak ayrıştırılmış gövde) ve bodyRaw (ham gövde) değerlerini kullanır; sonuç doğru (truthy) ise içerik kontrolü başarılıdır. Expected Status Codes listesi ayrıca uygulanır. WEB-CLI'da --contentCheckMode jsonata ve --jsonataQuery ile yazılır.
Sorun: Sağlık Yanıtı Birden Fazla Bileşenin Durumunu Taşıyor
Modern uygulamaların sağlık adresleri çoğu zaman JSON döner: veritabanı, önbellek, kuyruk gibi bileşenlerin her biri için ayrı bir durum alanı bulunur. Sabit bir metin araması bu yapıyı güvenilir biçimde denetleyemez (alan sırası ve boşluklar değişebilir); belirli alanların değerine göre karar vermek gerekir. Aksi hâlde bir bileşeni çalışmayan sunucu trafik almaya devam eder.
Çözüm: 2 Yöntem
İki yöntem aynı ayarı farklı arayüzlerden yapar.
| Durumunuz | Uygun yöntem |
|---|---|
| Profili arayüzden yapılandırıyorum; ifadeyi örnek yanıtta denemek istiyorum | Yöntem 1: JSONata Expression |
| Profili WEB-CLI'dan oluşturuyorum ya da güncelliyorum | Yöntem 2: WEB-CLI |
Yöntem 1: JSONata Expression Önerilen
- Nasıl çalışır İfade her yanıtta değerlendirilir; sonuç doğru (true, boş olmayan metin, sıfır dışı sayı, nesne ya da dizi) ise içerik kontrolü başarılıdır. Sonuç yanlışsa "JSONata check returned false", ifade hatalıysa "JSONata evaluation error" ile denetim başarısız olur.
- Nerede açılırLoad Balancer → Profiles → Health Checks → HTTP/HTTPS profili → Content Check Mode → JSONata Expression → JSONata Query
- Gereksinim Sağlık adresinin JSON (ya da XML) dönmesi; profilin atanacağı bir Kurum Servisi
- vService tipi Tümü
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 HTTP/HTTPS profili için profil seçilip Edit'e tıklanır.
Yeni profilde Name girilir, Check Type alanında HTTP ya da HTTPS seçilir ve Path + Query alanına sağlık adresi yazılır (ör. /health). Mevcut profilde bu adım atlanır.
Content Check Mode alanında JSONata Expression seçilir; Expected Content Query alanının yerine JSONata Query alanı görünür.
İfade yazılır ve alanın editöründe örnek bir yanıt üzerinde denenir. Örnekler:
- Bütün bileşenler UP:
status = 200 and $exists(body.checks) and $count(body.checks[status != "UP"]) = 0 - Durum kodu ve alan birlikte:
status = 200 and body.status = "UP" - Başlık kontrolü:
$contains(headers.`content-type`, "json")
Add (düzenlemede Edit) butonuna tıklanır; değişiklik profili kullanan bütün Kurum Servislerine uygulanır. Mevcut profil düzenlendiyse işlem burada biter.
Yeni profil için Load Balancer → Backend Services ekranında Kurum Servisine sağ tıklanıp Edit seçilir.
Health Check alanında profil seçilir.
Edit butonuna tıklanır.
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 2: WEB-CLI
- Nasıl çalışır Mod
--contentCheckMode jsonata, ifade--jsonataQueryile yazılır;--jsonataQueryyalnızca HTTP/HTTPS profilinde ve mod jsonata iken kullanı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; ifade
|karakteri içermemeli (WEB-CLI|işaretini komut ayırıcı sayar; böyle ifadeler arayüzden girilir) - vService tipi Tümü
Adım adım yapılandırma
Yeni profil (checkType ve name zorunludur ve bu sırayla yazılır):
lb hc add checkType http name json-saglik --uri /health --contentCheckMode jsonata --jsonataQuery 'body.status = "UP"'Mevcut bir HTTP/HTTPS profilinde (kimlik lb hc list çıktısından alınır):
lb hc update id <profil-kimliği> --contentCheckMode jsonata --jsonataQuery 'body.status = "UP"'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 jsonata, jsonataQuery body.status = "UP"Sık Yapılan Hatalar
- Gövdenin her zaman JSON olarak ayrıştırıldığını sanmak. Gövde, Content-Type
jsoniçeriyorsa ya da Content-Type yoksa JSON olarak ayrıştırılır;text/plaindönen JSON'dabody.alantanımsız olur, bu durumda$eval(bodyRaw).alankullanılır. - Yokluk durumunu düşünmemek.
$count(body.checks[status != "UP"]) = 0ifadesichecksalanı hiç yoksa (ör. hata sayfası döndüğünde) da doğru döner;$exists(body.checks) and …ile alanın varlığı da denetlenir. - Başlık adlarını büyük harfle yazmak.
headersiçindeki adlar küçük harflidir. - Durum kodunu yalnızca ifadede denetlemek. Expected Status Codes listesi de ayrıca uygulanır.
- Yalnızca
truesonucun başarılı sayıldığını sanmak. Boş olmayan metin ya da sıfır dışı sayı da başarılı sayılır; ifade açık bir karşılaştırma içermelidir.
Dokümantasyonda nasıl yapılır
