Genel Bakış
Diagnostic endpoint’ler, Worker ve Cache modüllerinin çalışma durumu hakkında detaylı bilgi toplama imkanı sunar. Bu endpoint’ler ile JVM metrikleri, thread bilgileri, connection durumları, environment değişkenleri ve daha fazlasına erişim sağlayabilirsiniz.
Kullanım Alanları
Performans Analizi JVM memory kullanımı, thread sayıları ve sistem kaynaklarını anlık olarak izleyebilirsiniz.
Sorun Tespiti Thread dump ve heap dump alarak memory leak ve deadlock sorunlarını tespit edebilirsiniz.
Kapasite Planlaması Sistem kaynak kullanımını izleyerek ölçeklendirme kararları alabilirsiniz.
Merkezi İzleme Tüm pod’ları toplu olarak sorgulayarak cluster genelinde durum analizi yapabilirsiniz.
Erişim Yöntemleri
Diagnostic endpoint’lere iki farklı şekilde erişim sağlayabilirsiniz:
Server Management Ekranı
API Erişimi
API Manager’daki System → Server Management ekranından görsel arayüz üzerinden tüm pod’ların diagnostic bilgilerine erişebilirsiniz. Bu yöntem, manual kontrol ve hızlı analiz için uygundur.
Doğrudan HTTP istekleri ile endpoint’lere erişim sağlayabilirsiniz. Bu yöntem, otomasyon, monitoring sistemleri ve script tabanlı kontroller için idealdir.
İş Akışı
Diagnostic endpoint’lerin çalışma mantığı aşağıdaki diyagramda gösterilmektedir:
Broadcast Mekanizması
internal=false (veya parametre verilmediğinde), istenen pod tüm cluster içindeki diğer pod’lara istekleri iletir ve sonuçları toplar:
Authorization
Tüm diagnostic endpoint’ler authorization gerektirir. İsteklerde Environment ID kullanılır:
Authorization Header Ekle
İstekte Authorization header’ında aktif environment ID’yi göndermelisiniz. Authorization: < ENVIRONMENT_I D >
Doğrulama
Worker ve Cache pod’ları gelen token’ı kendi environment ID’leri ile karşılaştırır.
Erişim
Token eşleşirse istek işlenir, aksi halde 401 Unauthorized döner.
Environment ID’yi API Manager’dan Environment ayarlarından veya sistem yöneticisinden edinebilirsiniz. Yanlış veya eksik authorization bilgisi ile yapılan istekler reddedilir.
Worker Diagnostic Endpoint’leri
Worker modülü için kullanılabilir endpoint’ler:
JVM Metrikleri
JVM memory kullanımı, heap/non-heap bilgileri, garbage collection istatistikleri.
Kubernetes İçinden
Kubernetes Dışından
# Tekli pod
kubectl exec -it < any_pod_nam e > -n < namespac e > -- curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://worker-http-service.prod.svc.cluster.local:8091/apinizer/diagnostics/jvm?internal=true"
# Tüm pod'lar (broadcast)
kubectl exec -it < any_pod_nam e > -n < namespac e > -- curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://worker-http-service.prod.svc.cluster.local:8091/apinizer/diagnostics/jvm"
# Tekli pod
curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://<WORKER_ACCESS_URL>/apinizer/diagnostics/jvm?internal=true"
# Tüm pod'lar (broadcast)
curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://<WORKER_ACCESS_URL>/apinizer/diagnostics/jvm"
Thread Bilgileri
Aktif thread sayısı, thread durumları, thread pool kullanımı.
Kubernetes İçinden
Kubernetes Dışından
kubectl exec -it < any_pod_nam e > -n < namespac e > -- curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://worker-http-service.prod.svc.cluster.local:8091/apinizer/diagnostics/threads?internal=true"
curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://<WORKER_ACCESS_URL>/apinizer/diagnostics/threads"
Thread Dump
Tüm thread’lerin detaylı stack trace bilgileri. Deadlock tespiti için kullanılır.
Kubernetes İçinden
Kubernetes Dışından
kubectl exec -it < any_pod_nam e > -n < namespac e > -- curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://worker-http-service.prod.svc.cluster.local:8091/apinizer/diagnostics/threaddump?internal=true"
curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://<WORKER_ACCESS_URL>/apinizer/diagnostics/threaddump"
Heap Dump
JVM heap memory’nin binary dump’ı. Memory analizi için kullanılır.
Heap dump endpoint’i broadcast desteklemez ve çıktı olarak binary dosya (.hprof) döner. Bu nedenle internal parametresi kullanılmaz ve sonuç bir dosyaya kaydedilmelidir.
Kubernetes İçinden
Kubernetes Dışından
kubectl exec -it < any_pod_nam e > -n < namespac e > -- curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://worker-http-service.prod.svc.cluster.local:8091/apinizer/diagnostics/heapdump" \
--output heapdump- $( date +%Y%m%d-%H%M%S ) .hprof
curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://<WORKER_ACCESS_URL>/apinizer/diagnostics/heapdump" \
--output heapdump- $( date +%Y%m%d-%H%M%S ) .hprof
Connection Bilgileri
Aktif HTTP connection’lar, connection pool durumları, backend bağlantıları.
Kubernetes İçinden
Kubernetes Dışından
kubectl exec -it < any_pod_nam e > -n < namespac e > -- curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://worker-http-service.prod.svc.cluster.local:8091/apinizer/diagnostics/connections?internal=true"
curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://<WORKER_ACCESS_URL>/apinizer/diagnostics/connections"
Environment Değişkenleri
Sistem ve JVM environment değişkenleri, system properties.
Kubernetes İçinden
Kubernetes Dışından
kubectl exec -it < any_pod_nam e > -n < namespac e > -- curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://worker-http-service.prod.svc.cluster.local:8091/apinizer/diagnostics/env?internal=true"
curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://<WORKER_ACCESS_URL>/apinizer/diagnostics/env"
Health Durumu
Pod’un sağlık durumu, uptime, temel sistem bilgileri.
Kubernetes İçinden
Kubernetes Dışından
kubectl exec -it < any_pod_nam e > -n < namespac e > -- curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://worker-http-service.prod.svc.cluster.local:8091/apinizer/diagnostics/health?internal=true"
curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://<WORKER_ACCESS_URL>/apinizer/diagnostics/health"
Tüm Metrikler
Heap dump hariç tüm metrikleri tek bir çağrıda toplar.
Kubernetes İçinden
Kubernetes Dışından
kubectl exec -it < any_pod_nam e > -n < namespac e > -- curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://worker-http-service.prod.svc.cluster.local:8091/apinizer/diagnostics/all?internal=true"
curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://<WORKER_ACCESS_URL>/apinizer/diagnostics/all"
Cache Diagnostic Endpoint’leri
Cache modülü için kullanılabilir endpoint’ler:
JVM Metrikleri
Kubernetes İçinden
Kubernetes Dışından
# Tekli pod
kubectl exec -it < any_pod_nam e > -n < namespac e > -- curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://cache-http-service.prod.svc.cluster.local:8090/apinizer/diagnostics/jvm?internal=true"
# Tüm pod'lar (broadcast)
kubectl exec -it < any_pod_nam e > -n < namespac e > -- curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://cache-http-service.prod.svc.cluster.local:8090/apinizer/diagnostics/jvm"
curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://<CACHE_ACCESS_URL>/apinizer/diagnostics/jvm"
Thread Bilgileri
Kubernetes İçinden
Kubernetes Dışından
kubectl exec -it < any_pod_nam e > -n < namespac e > -- curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://cache-http-service.prod.svc.cluster.local:8090/apinizer/diagnostics/threads?internal=true"
curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://<CACHE_ACCESS_URL>/apinizer/diagnostics/threads"
Thread Dump
Kubernetes İçinden
Kubernetes Dışından
kubectl exec -it < any_pod_nam e > -n < namespac e > -- curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://cache-http-service.prod.svc.cluster.local:8090/apinizer/diagnostics/threaddump?internal=true"
curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://<CACHE_ACCESS_URL>/apinizer/diagnostics/threaddump"
Heap Dump
Kubernetes İçinden
Kubernetes Dışından
kubectl exec -it < any_pod_nam e > -n < namespac e > -- curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://cache-http-service.prod.svc.cluster.local:8090/apinizer/diagnostics/heapdump" \
--output cache-heapdump- $( date +%Y%m%d-%H%M%S ) .hprof
curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://<CACHE_ACCESS_URL>/apinizer/diagnostics/heapdump" \
--output cache-heapdump- $( date +%Y%m%d-%H%M%S ) .hprof
Environment Değişkenleri
Kubernetes İçinden
Kubernetes Dışından
kubectl exec -it < any_pod_nam e > -n < namespac e > -- curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://cache-http-service.prod.svc.cluster.local:8090/apinizer/diagnostics/env?internal=true"
curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://<CACHE_ACCESS_URL>/apinizer/diagnostics/env"
Health Durumu
Kubernetes İçinden
Kubernetes Dışından
kubectl exec -it < any_pod_nam e > -n < namespac e > -- curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://cache-http-service.prod.svc.cluster.local:8090/apinizer/diagnostics/health?internal=true"
curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://<CACHE_ACCESS_URL>/apinizer/diagnostics/health"
Hazelcast Metrikleri
Hazelcast cluster bilgileri, cache istatistikleri, distributed map metrikleri.
Bu endpoint sadece Cache modülünde mevcuttur ve Hazelcast cluster’ın detaylı durumunu gösterir.
Kubernetes İçinden
Kubernetes Dışından
kubectl exec -it < any_pod_nam e > -n < namespac e > -- curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://cache-http-service.prod.svc.cluster.local:8090/apinizer/diagnostics/hazelcast?internal=true"
curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://<CACHE_ACCESS_URL>/apinizer/diagnostics/hazelcast"
Tüm Metrikler
Kubernetes İçinden
Kubernetes Dışından
kubectl exec -it < any_pod_nam e > -n < namespac e > -- curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://cache-http-service.prod.svc.cluster.local:8090/apinizer/diagnostics/all?internal=true"
curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://<CACHE_ACCESS_URL>/apinizer/diagnostics/all"
Endpoint Karşılaştırma Tablosu
Endpoint Worker Cache Broadcast Açıklama /jvm✅ ✅ ✅ JVM memory ve GC metrikleri /threads✅ ✅ ✅ Thread bilgileri ve durumları /threaddump✅ ✅ ✅ Detaylı thread stack trace /heapdump✅ ✅ ❌ Binary heap dump dosyası /connections✅ ❌ ✅ HTTP connection pool bilgileri /env✅ ✅ ✅ Environment değişkenleri /health✅ ✅ ✅ Sağlık durumu ve uptime /hazelcast❌ ✅ ✅ Hazelcast cluster metrikleri /all✅ ✅ ✅ Tüm metrikler (heapdump hariç)
Kullanım Senaryoları
/jvm endpoint’i ile memory kullanımını düzenli olarak izleyin
Heap memory’nin sürekli artış gösterdiğini tespit edin
/heapdump ile heap dump alın
Eclipse MAT veya VisualVM ile analiz edin
# Memory kullanımını izleme
curl -X GET -H "Authorization: <ENV_ID>" \
"http://<WORKER_URL>/apinizer/diagnostics/jvm" | jq '.pods[].jvm.memory'
# Heap dump alma
curl -X GET -H "Authorization: <ENV_ID>" \
"http://<WORKER_URL>/apinizer/diagnostics/heapdump" \
--output analysis.hprof
Thread dump alarak deadlock durumlarını tespit edebilirsiniz: # Thread dump alma
curl -X GET -H "Authorization: <ENV_ID>" \
"http://<WORKER_URL>/apinizer/diagnostics/threaddump" \
| jq '.pods[].threadDump' > threaddump.txt
# Dosyada "deadlock" kelimesini arayın
grep -i "deadlock" threaddump.txt
Cluster Geneli Performans Analizi
Otomatik Monitoring Entegrasyonu
Prometheus, Grafana veya custom monitoring sistemlerine entegre edebilirsiniz: #!/bin/bash
# monitoring-script.sh
while true ; do
RESPONSE = $( curl -s -X GET -H "Authorization: $ENV_ID " \
"http:// $WORKER_URL /apinizer/diagnostics/jvm" )
echo " $RESPONSE " | jq -r '.pods[] | "\(.podName) - Heap: \(.jvm.memory.heap.used)/\(.jvm.memory.heap.max)"'
sleep 60
done
Worker pod’larındaki connection pool durumlarını kontrol edebilirsiniz: # Connection pool metrikleri
curl -X GET -H "Authorization: <ENV_ID>" \
"http://<WORKER_URL>/apinizer/diagnostics/connections" \
| jq '.pods[] | {pod: .podName, activeConnections: .connections.active, idleConnections: .connections.idle}'
Best Practices
Düzenli İzleme /health ve /jvm endpoint’lerini periyodik olarak kontrol ederek proaktif sorun tespiti yapın.
Broadcast Kullanımı Production ortamında tüm pod’ları kontrol etmek için broadcast mode kullanın (internal parametresi olmadan).
Heap Dump Boyutu Heap dump’lar büyük dosyalar oluşturabilir. Yeterli disk alanı olduğundan emin olun.
Authorization Güvenliği Environment ID’yi güvenli şekilde saklayın ve loglarda göstermeyin.
Performans Notu : Heap dump ve thread dump işlemleri pod üzerinde yük oluşturabilir. Production ortamında bu işlemleri düşük yoğunluk saatlerinde gerçekleştirmeniz önerilir.
İlgili Kaynaklar
Daha fazla bilgi için aşağıdaki sayfalara göz atabilirsiniz: