1-) Nasıl Çalışır?
Bu kılavuzda, bir Apinizer Worker pod’unun JVM metriklerini periyodik olarak toplayan ve gün sonunda bu verilerden tek dosyalık interaktif bir HTML rapor üreten basit bir izleme çözümü anlatılmaktadır. Çözüm üç parçadan oluşur:- Bir toplayıcı shell script (
monitor.sh) — verilen ortamın Worker Diagnostics API’sini periyodik olarak okur, satır başına bir JSON kaydı olacak şekilde JSONL dosyasına ekler. Aynı script, ortam adı + Worker URL + Env ID argümanları ile birden fazla ortam için paralel olarak çalıştırılabilir. - Bir Python rapor üretici (
generate_report.py) — belirtilen ortamın JSONL dosyasını okur; memory, thread, GC, connection, health metriklerini normalize eder; istatistikler, anomali tespiti ve Chart.js tabanlı interaktif grafiklerle zenginleştirilmiş tek bir HTML dosyası üretir. - Bir orkestratör script (
make-report.sh) — verilen ortam adına ve tarihe göre JSONL dosyasını bulur, asgari kayıt sayısını kontrol eder ve rapor üreticiyi çağırır.
Akış şu şekildedir: Apinizer Worker (
/apinizer/diagnostics/all) → monitor.sh <ortam> (her 2 dakikada bir) → <ortam>-worker-jvm-YYYYMMDD.jsonl → make-report.sh <ortam> → generate_report.py → apinizer-worker-rapor-<ortam>-YYYYMMDD.html2-) Ön Koşullar
Çözümü çalıştıracağınız makinede aşağıdaki gereksinimler karşılanmalıdır:bash,curl,sed,wc(tipik bir Linux ortamında mevcut)python3(3.9 veya üzeri;list[dict]gibi type hint’ler için gerekli)- Rapor üretici yalnızca standart kütüphaneyi kullanır;
pip installgerekmez. Grafiklerin çizimi için gereken Chart.js, üretilen HTML dosyasına CDN üzerinden gömülüdür — raporu görüntülerken internet bağlantısı yeterlidir. - Worker pod’larının Diagnostics API’sine ağ erişimi (ör. cluster dışından NodePort veya Ingress üzerinden).
Authorization header’ı olarak kullanılır.
3-) Diagnostics API
Toplayıcı script, Worker üzerindeki aşağıdaki endpoint’i çağırır:4-) Toplayıcı Script’in Kurulumu
Tek birmonitor.sh dosyası, hangi ortamı izleyeceğiniz bilgisini argüman olarak alır. Bu sayede farklı ortamları (ör. dev, prod, staging) izlemek için ayrı script dosyalarına gerek kalmaz; aynı script dosyası birden fazla terminalde farklı argümanlarla çalıştırılarak paralel izleme yapılabilir.
Bu kılavuzda anlatılan üç script’in (
monitor.sh, generate_report.py, make-report.sh) hazır kopyalarına aşağıdaki bağlantıdan erişebilirsiniz:Script dosyalarını indirDosyaları aynı dizine indirip chmod +x monitor.sh make-report.sh komutuyla çalıştırılabilir yapmanız yeterlidir.monitor.sh — Dinamik Toplayıcı Script
Aşağıdaki script’imonitor.sh adıyla kaydedin. Kullanım sırasında ortam adı, Worker URL ve Env ID değerlerini komut satırında argüman olarak geçirin.
Script’i Çalıştırılabilir Yapma ve Başlatma
dev-worker-jvm-20260422.jsonl, prod-worker-jvm-20260422.jsonl gibi); dosyalar birbirine karışmaz.
Script varsayılan olarak her 120 saniyede bir örnekleme alır. Daha sık veya daha seyrek örnekleme için dördüncü argüman olarak saniye cinsinden bir değer geçirebilirsiniz (ör.
./monitor.sh prod <url> <id> 60). 60 saniyenin altına inmek Worker üzerinde gereksiz yük oluşturabilir; 300 saniyenin üzeri ise kısa süreli spike’ları kaçırabilir.Arka Planda Sürekli Çalıştırma
İzleme script’leriwhile true döngüsüyle çalıştığı için, terminal oturumu kapandığında durur. Sürekli çalışır halde tutmak için kullanım senaryonuza göre aşağıdaki yöntemlerden biri tercih edilebilir:
- Test / geliştirme ortamı için
tmuxveyascreen— Script’i ayrı bir tmux oturumunda başlatırsanız, SSH bağlantınızı kapatsanız bile çalışmaya devam eder. Daha sonra oturuma yeniden bağlanıp çıktıyı canlı izleyebilirsiniz. Hızlı ve basit bir çözümdür; ancak sunucu yeniden başlatıldığında script otomatik olarak ayağa kalkmaz. - Üretim ortamı için
systemdservisi — Linux’ta arka plan servislerini yöneten standart yöntemdir. Her ortam için bir.serviceunit dosyası yazılır; komut satırı olarakExecStart=/path/to/monitor.sh prod <url> <id>gibi argümanlar verilir. Bu sayede sunucu yeniden başlatıldığında servis otomatik başlar, beklenmedik şekilde çıkarsa otomatik olarak yeniden denenir (Restart=always), ve çıktısı sistem log’larına (journalctl) düşer. Üretim kullanımında süreklilik ve gözlemlenebilirlik açısından tercih edilen yöntem budur.
Deployment veya zamanlanmış bir CronJob olarak da koşturulabilir.
5-) JSONL Çıktı Formatı
Toplayıcı her örneklemede, Worker’dan dönen JSON yanıtının en başınacollectedAt alanını enjekte eder ve tek satır halinde çıktı dosyasına ekler. Bu format, JSONL (JSON Lines) olarak bilinir — her satır bağımsız ve geçerli bir JSON nesnesidir.
<ORTAM_ADI>-worker-jvm-YYYYMMDD.jsonl
Örneğin:
dev-worker-jvm-20260422.jsonlprod-worker-jvm-20260422.jsonlstaging-worker-jvm-20260422.jsonl
6-) Rapor Üretici
Rapor üretici, belirtilen ortama ait JSONL dosyasını okuyup tek bir HTML dosyası çıkarır. Çıktı dosyası self-contained’dır; başka bir asset gerektirmez, e-posta eki olarak gönderilebilir veya paylaşılan bir disk üzerinden açılabilir.generate_report.py — Rapor Üretici Script
generate_report.py dosyasını, toplayıcı script’in çıktı ürettiği dizine (JSONL dosyalarının yanı) kaydedin. Script tamamen Python standart kütüphanesi ile yazılmıştır ve ek bir bağımlılık gerektirmez. Tam kaynak kodu dokümanın sonundaki eke dahil edilmiştir; aşağıda ana fonksiyonları ve çalışma mantığı özetlenmiştir.
Script dört ana aşamada çalışır:
THRESHOLDS sözlüğünü düzenleyebilirsiniz.
make-report.sh — Orkestratör Script
Aşağıdaki script, verilen ortam adına ve tarihe göre JSONL dosyasını bulup rapor üreticiyi çağırır.generate_report.py ile aynı dizine make-report.sh adıyla kaydedin.
CLI Kullanımı
generate_report.py doğrudan da çalıştırılabilir. Desteklenen seçenekler:
apinizer-worker-rapor-<ORTAM>-YYYYMMDD.html adıyla JSONL dosyasıyla aynı dizine yazılır.
7-) Rapor İçeriği
Üretilen HTML dosyası tek sayfalık interaktif bir dashboard’tur. Üst kısımda ortam etiketi, rapor özeti ve anomali badge’leri yer alır; içerik altı sekmeye bölünmüştür.
Sekmeler
- Genel Bakış — Heap %, Heap Max, thread sayısı, yanıt süresi, aktif bağlantı, GC Young hızı, GC Old ve deadlock gibi anahtar metriklerin özet kartları; altında tüm podların aynı grafik üzerinde karşılaştırıldığı zaman serisi grafikleri (Heap %, yanıt süresi, thread sayısı, aktif bağlantı). Sayfa açılışında seçili olan sekmedir.
- Memory — Heap kullanımı (MB ve %) ile non-heap / metaspace grafikleri. Heap kullanımının zaman içinde nasıl değiştiğini görmek için idealdir; stabil bir ortamda heap testere dişi deseni oluştururken, bellek sızıntısı yaşayan bir pod’da sürekli yukarı yönlü bir eğim görülür.

- Threads — Thread state dağılımı (RUNNABLE / WAITING / TIMED_WAITING),
apinizer-asyncexecutor pool durumu (pool size, aktif, queue) ve pod bazında toplam başlatılan thread sayısı.

- GC — G1 Young ve Concurrent GC sayaçları ile kümülatif GC süresi grafikleri.
- Connections — HTTP connection pool’un leased ve available metrikleri ile maintenance pool queue grafikleri.
- Anomaliler — Eşik aşımı tespit edilen metriklerin listesi; hangi metrikte, kaç örnekte, hangi tepe değerde uyarı veya kritik seviyeye ulaşıldığını gösterir. Sayfanın altında pod bazlı özet tablo yer alır.

Sekme içerikleri “lazy build” mantığıyla çalışır: sadece tıklandıklarında grafikler oluşturulur. Bu sayede rapor binlerce veri noktası barındırsa bile ilk açılış hızlı kalır.
Birden Fazla Ortamı Karşılaştırma
Rapor artık tek bir ortam için üretildiğinden, iki ortamı karşılaştırmak istediğinizde her bir ortam için ayrı bir rapor üretip HTML dosyalarını yan yana açmanız yeterlidir:8-) Sorun Giderme
HATA: 401 Unauthorized — ENV_ID değerini kontrol edin.
ENV_ID yanlış veya başka bir ortamın ID’si girilmiş. API Manager → Ortamlar menüsünden doğru ortama ait ID’yi yeniden alın.
HATA: Worker'a ulaşılamadı ({WORKER_URL})
Worker adresine TCP düzeyinde erişim yok. Ağ kuralları, Ingress/NodePort tanımı veya proxy ayarları kontrol edilmelidir. curl -v "${WORKER_URL}/apinizer/diagnostics/all?internal=true" ile manuel bir istek atarak hızlıca doğrulama yapılabilir.
HATA: ORTAM_ADI, WORKER_URL ve ENV_ID zorunlu.
monitor.sh argümansız veya eksik argümanla çalıştırılmış. Script başındaki DEFAULT_* değerlerini doldurmadıysanız üç argümanı da komut satırında geçirmeniz gerekir.
HATA: <ortam>-worker-jvm-YYYYMMDD.jsonl yok. monitor.sh <ortam> ... çalışıyor mu?
make-report.sh belirttiğiniz ortama ait JSONL dosyası arar. Toplayıcı henüz başlatılmamış, başka bir ortam adıyla çalıştırılmış ya da başka bir dizinde çalışıyor olabilir. Toplayıcı script ile rapor üretici aynı dizinde çalışmalıdır.
UYARI: En az 3 kayıt olsun, grafikler anlamlı çıksın.
Toplayıcı yeni başlatılmışsa, henüz yeterli örnekleme birikmemiş olabilir. Varsayılan 120 saniyelik aralıkta en az 6 dakika beklemek anlamlı bir rapor için yeterlidir.
Raporda bazı pod’lar hiç görünmüyor.
Worker Deployment’ı birden fazla replica ile çalışıyorsa, bir Service veya Ingress üzerinden gelen istekler farklı pod’lara dağıtılır. Toplayıcı her istek için rastgele bir pod’a düşebilir; kısa süreli izlemelerde bazı pod’ların örneklenme şansı düşük olur. Pod başına izleme yapmak için her pod’u ayrı ayrı hedefleyen (ör. headless service veya pod DNS ile) ek toplayıcılar çalıştırılabilir.
