Ana içeriğe atla

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:
1

Authorization Header Ekle

İstekte Authorization header’ında aktif environment ID’yi göndermelisiniz.
Authorization: <ENVIRONMENT_ID>
2

Doğrulama

Worker ve Cache pod’ları gelen token’ı kendi environment ID’leri ile karşılaştırır.
3

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.
# 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.
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.
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
/jvmJVM memory ve GC metrikleri
/threadsThread bilgileri ve durumları
/threaddumpDetaylı thread stack trace
/heapdumpBinary heap dump dosyası
/connectionsHTTP connection pool bilgileri
/envEnvironment değişkenleri
/healthSağlık durumu ve uptime
/hazelcastHazelcast cluster metrikleri
/allTüm metrikler (heapdump hariç)

Kullanım Senaryoları

  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
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
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}'
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: