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ı
JVM memory kullanımı, thread sayıları ve sistem kaynaklarını anlık olarak izleyebilirsiniz.
Thread dump ve heap dump alarak memory leak ve deadlock sorunlarını tespit edebilirsiniz.
Sistem kaynak kullanımını izleyerek ölçeklendirme kararları alabilirsiniz.
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:
sequenceDiagram
participant Client as İstemci/Manager
participant Pod as Hedef Pod
participant AllPods as Diğer Pod'lar
Note over Client,AllPods: Tekli Pod Sorgusu (internal=true)
Client->>Pod: GET /apinizer/diagnostics/jvm?internal=true
Note over Pod: Sadece kendi metriklerini toplar
Pod-->>Client: Tekli Pod Response
Note over Client,AllPods: Broadcast Sorgu (internal=false veya varsayılan)
Client->>Pod: GET /apinizer/diagnostics/jvm
Note over Pod: Broadcast modunda
Pod->>AllPods: Pod-to-Pod İstekler (internal=true)
AllPods-->>Pod: Her pod kendi metriklerini döner
Note over Pod: Tüm sonuçları birleştirir
Pod-->>Client: Toplu Response (Tüm Pod'lar)
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:
flowchart TD
A[API İsteği Gelir] --> B{internal Parametresi}
B -->|true| C[Tekli Pod<br/>Sadece Bu Pod]
B -->|false veya yok| D[Broadcast Modu]
D --> E[Kubernetes API'den<br/>Pod Listesi Al]
E --> F[Her Pod'a<br/>Paralel İstek At]
F --> G[internal=true İle<br/>Pod-to-Pod Çağrı]
G --> H[Sonuçları Birleştir]
H --> I[Toplu Response Dön]
C --> J[Response Dön]
style D fill:#e1f5ff
style H fill:#fff4e1
Authorization
Tüm diagnostic endpoint'ler authorization gerektirir. İsteklerde Environment ID kullanılır:
İstekte Authorization header'ında aktif environment ID'yi göndermelisiniz.
Authorization: <ENVIRONMENT_ID>
Worker ve Cache pod'ları gelen token'ı kendi environment ID'leri ile karşılaştırır.
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_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"
# 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_name> -n <namespace> -- 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_name> -n <namespace> -- 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_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
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_name> -n <namespace> -- 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_name> -n <namespace> -- 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_name> -n <namespace> -- 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_name> -n <namespace> -- 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_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"
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_name> -n <namespace> -- 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_name> -n <namespace> -- 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_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
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_name> -n <namespace> -- 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_name> -n <namespace> -- 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_name> -n <namespace> -- 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_name> -n <namespace> -- 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ı
Memory Leak Tespiti
/jvmendpoint'i ile memory kullanımını düzenli olarak izleyin- Heap memory'nin sürekli artış gösterdiğini tespit edin
/heapdumpile 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
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
/health ve /jvm endpoint'lerini periyodik olarak kontrol ederek proaktif sorun tespiti yapın.
Production ortamında tüm pod'ları kontrol etmek için broadcast mode kullanın (internal parametresi olmadan).
Heap dump'lar büyük dosyalar oluşturabilir. Yeterli disk alanı olduğundan emin olun.
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: