Ana içeriğe geç

Diagnostic Endpoint Adresleri

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:

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.

İş 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_ID>
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.

uyarı

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.

# Tekli pod
kubectl exec -it <any_pod_name> -n <namespace> -- 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_name> -n <namespace> -- curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://worker-http-service.prod.svc.cluster.local:8091/apinizer/diagnostics/jvm"

Thread Bilgileri​

Aktif thread sayısı, thread durumları, thread pool kullanımı.

kubectl exec -it <any_pod_name> -n <namespace> -- curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://worker-http-service.prod.svc.cluster.local:8091/apinizer/diagnostics/threads?internal=true"

Thread Dump​

Tüm thread'lerin detaylı stack trace bilgileri. Deadlock tespiti için kullanılır.

kubectl exec -it <any_pod_name> -n <namespace> -- curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://worker-http-service.prod.svc.cluster.local:8091/apinizer/diagnostics/threaddump?internal=true"

Heap Dump​

JVM heap memory'nin binary dump'ı. Memory analizi için kullanılır.

bilgi

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.

kubectl exec -it <any_pod_name> -n <namespace> -- 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

Connection Bilgileri​

Aktif HTTP connection'lar, connection pool durumları, backend bağlantıları.

kubectl exec -it <any_pod_name> -n <namespace> -- curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://worker-http-service.prod.svc.cluster.local:8091/apinizer/diagnostics/connections?internal=true"

Environment Değişkenleri​

Sistem ve JVM environment değişkenleri, system properties.

kubectl exec -it <any_pod_name> -n <namespace> -- curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://worker-http-service.prod.svc.cluster.local:8091/apinizer/diagnostics/env?internal=true"

Health Durumu​

Pod'un sağlık durumu, uptime, temel sistem bilgileri.

kubectl exec -it <any_pod_name> -n <namespace> -- curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://worker-http-service.prod.svc.cluster.local:8091/apinizer/diagnostics/health?internal=true"

Tüm Metrikler​

Heap dump hariç tüm metrikleri tek bir çağrıda toplar.

kubectl exec -it <any_pod_name> -n <namespace> -- curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://worker-http-service.prod.svc.cluster.local:8091/apinizer/diagnostics/all?internal=true"

Cache Diagnostic Endpoint'leri​

Cache modülü için kullanılabilir endpoint'ler:

JVM Metrikleri​

# Tekli pod
kubectl exec -it <any_pod_name> -n <namespace> -- 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_name> -n <namespace> -- curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://cache-http-service.prod.svc.cluster.local:8090/apinizer/diagnostics/jvm"

Thread Bilgileri​

kubectl exec -it <any_pod_name> -n <namespace> -- curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://cache-http-service.prod.svc.cluster.local:8090/apinizer/diagnostics/threads?internal=true"

Thread Dump​

kubectl exec -it <any_pod_name> -n <namespace> -- curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://cache-http-service.prod.svc.cluster.local:8090/apinizer/diagnostics/threaddump?internal=true"

Heap Dump​

kubectl exec -it <any_pod_name> -n <namespace> -- 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

Environment Değişkenleri​

kubectl exec -it <any_pod_name> -n <namespace> -- curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://cache-http-service.prod.svc.cluster.local:8090/apinizer/diagnostics/env?internal=true"

Health Durumu​

kubectl exec -it <any_pod_name> -n <namespace> -- curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://cache-http-service.prod.svc.cluster.local:8090/apinizer/diagnostics/health?internal=true"

Hazelcast Metrikleri​

Hazelcast cluster bilgileri, cache istatistikleri, distributed map metrikleri.

bilgi

Bu endpoint sadece Cache modülünde mevcuttur ve Hazelcast cluster'ın detaylı durumunu gösterir.

kubectl exec -it <any_pod_name> -n <namespace> -- curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://cache-http-service.prod.svc.cluster.local:8090/apinizer/diagnostics/hazelcast?internal=true"

Tüm Metrikler​

kubectl exec -it <any_pod_name> -n <namespace> -- curl -X GET \
-H "Authorization: <ENVIRONMENT_ID>" \
"http://cache-http-service.prod.svc.cluster.local:8090/apinizer/diagnostics/all?internal=true"

Endpoint Karşılaştırma Tablosu​

EndpointWorkerCacheBroadcastAçı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ı​

Memory Leak Tespiti
  1. /jvm endpoint'i ile memory kullanımını düzenli olarak izleyin
  2. Heap memory'nin sürekli artış gösterdiğini tespit edin
  3. /heapdump ile heap dump alın
  4. 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
Deadlock Analizi

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

Tüm pod'ların durumunu tek çağrıda kontrol edebilirsiniz:

# Tüm pod'ların tüm metriklerini al
curl -X GET -H "Authorization: <ENV_ID>" \
"http://<WORKER_URL>/apinizer/diagnostics/all" \
| jq '.' > cluster-diagnostics.json

# Her pod'un memory kullanımını listele
cat cluster-diagnostics.json | jq '.pods[] | {pod: .podName, heapUsed: .jvm.memory.heap.used, heapMax: .jvm.memory.heap.max}'
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
Connection Pool İzleme

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.

uyarı

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: