Apinizer’ın Prometheus ve Grafana Entegrasyonu: Kapsamlı Bir Rehber
Günümüzün mikroservis mimarisinde, sistem performansını ve davranışını izlemek optimal operasyonları sürdürmek için hayati önem taşır. Güçlü bir API yönetim platformu olan Apinizer, Prometheus ve Grafana gibi endüstri standardı izleme araçlarıyla entegre edilebilen sağlam metrik toplama özellikleri sunar. Bu makale, API gateway ve önbellek performansınız hakkında değerli içgörüler elde etmek için Apinizer’ın metrik özelliklerinden nasıl yararlanabileceğinize dair detaylı bir rehber sunmaktadır.
Apinizer’ın Metrik Sistemine Genel Bakış
Apinizer’ın metrik sistemi, Micrometer üzerine inşa edilmiştir. Platform, iki ana bileşen üzerinden geniş bir metrik yelpazesi toplar:
- Apinizer Gateway: API trafiği, harici bağlantılar, JVM sağlığı ve sistem kaynakları ile ilgili metrikleri toplar
- Apinizer Cache: Önbellek işlemlerini, API isteklerini, JVM performansını ve sistem sağlığını izler
Bu metrikler, API yönetim altyapınızın performansı ve sağlığı hakkında kapsamlı görünürlük sağlayarak, darboğazların proaktif olarak tanımlanmasını, sorunların giderilmesini ve kapasite planlamasını mümkün kılar.
Apinizer Tarafından Toplanan Metrikler
Apinizer Gateway Metrikleri
Gateway bileşeni çeşitli kategorilerde metrikler toplar:
API Trafik Metrikleri
Bu metrikler Apinizer Gateway üzerinden geçen istekleri takip eder:
- Toplam API trafik istekleri
- Başarılı/başarısız/engellenen API istekleri
- İstek işleme süreleri (pipeline, yönlendirme, toplam)
- İstek ve yanıt boyutları
- Önbellek isabet istatistikleri
Her metrik iki formda mevcuttur:
- Toplam metrikler (örn., tüm API’ler genelinde toplam API istekleri)
- Detaylı boyutlara sahip etiketli metrikler (örn., API Kimliği, API adı başına istekler)
Harici Bağlantı Metrikleri
Bunlar harici servislere yapılan bağlantıları takip eder:
- Toplam harici istekler
- Harici hata sayısı
- Harici yanıt süreleri
JVM Metrikleri
Bunlar Java Sanal Makinesi hakkında içgörüler sağlar:
- Bellek kullanımı (heap, non-heap)
- Garbage collection istatistikleri
- Thread sayıları ve durumları
Sistem Metrikleri
Bunlar altta yatan sistemi izler:
- CPU kullanımı
- İşlemci sayısı
- Sistem yük ortalaması
- File descriptor sayıları
Apinizer Cache Metrikleri
Cache bileşeni şunları toplar:
Önbellek İşlem Metrikleri
- Önbellek get/put sayıları
- Önbellek boyutu ve giriş sayıları
- Önbellek işlem gecikmeleri
- Önbellek girişleri tarafından bellek kullanımı
API Metrikleri
- API istek sayıları
- API yanıt süreleri
- API hata sayıları
JVM ve Sistem Metrikleri
Gateway’e benzer şekilde, Cache bileşeni de JVM performansını ve sistem kaynak kullanımını takip eder.
Prometheus Entegrasyonunun Kurulumu
1. Apinizer Bileşenlerinde Metriklerin Etkinleştirilmesi
Apinizer Gateway için:
Apinizer arayüzünde Gateway Environments sayfasına gidin ve “Prometheus Metric Server” seçeneğini etkinleştirin. Bu, 9091 portu üzerinden metrik yayınlamayı aktif hale getirir.
Apinizer Cache için:
Cache deployment’ını düzenleyin ve METRICS_ENABLED=TRUE
ortam değişkenini ekleyin. Bu şu yollarla yapılabilir:
Apinizer arayüzü üzerinden: Gateway Environments > Deployments & Services > Cache > Edit deployment yolunu izleyin
Kubernetes CLI üzerinden:
kubectl edit deploy -n <namespace> cache
# Aşağıdaki ortam değişkenini ekleyin
- name: METRICS_ENABLED
value: "true"
2. Prometheus’un Metrik Toplamak için Yapılandırılması
Prometheus’u Apinizer bileşenlerinden metrik toplamak için iki farklı yöntemle yapılandırabilirsiniz:
Sabit (Constant) Scraping
Apinizer bileşenlerini 9091 portunda hedefleyen bir servis oluşturun:
apiVersion: v1
kind: Service
metadata:
name: cache-prometheus-service # veya gateway-prometheus-service
namespace: <NAMESPACE>
spec:
ports:
- port: 9091
protocol: TCP
targetPort: 9091
selector:
app: cache # veya Gateway için worker
type: ClusterIP
Ardından Prometheus’u bu servislerden metrik toplayacak şekilde yapılandırın:
scrape_configs:
- job_name: 'apinizer-components'
static_configs:
- targets: ['cache-prometheus-service.<NAMESPACE>.svc.cluster.local:9091', 'worker-prometheus-service.<NAMESPACE>.svc.cluster.local:9091']
Kubernetes Service Discovery ile Dinamik Scraping
Daha esnek yapılandırmalar için pod anotasyonları ile Kubernetes servis keşfini kullanabilirsiniz:
1.Deployment’a anotasyonlar ekleyin:
template:
metadata:
annotations:
prometheus.io/port: "9091"
prometheus.io/scrape: "true"
2. Prometheus’u Kubernetes servis keşfini kullanacak şekilde yapılandırın:
scrape_configs:
- job_name: 'kubernetes-pods'
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
action: keep
regex: true
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_port, __meta_kubernetes_pod_ip]
action: replace
regex: (\d+);((([0-9]+?)(\.|$)){4})
replacement: $2:$1
target_label: __address__
# Ek relabeling yapılandırmaları...
PromQL ile Apinizer Metriklerinin Analizi
Prometheus Apinizer bileşenlerinden metrik toplamaya başladıktan sonra, verileri analiz etmek için PromQL (Prometheus Query Language) kullanabilirsiniz. İşte bazı faydalı sorgular:
Gateway API Trafik Analizi
# Son saatteki toplam API istekleri
sum(increase(apinizer_api_traffic_total_count_total[1h]))
# Son 5 dakikada API başına istekler
sum by (api_name) (increase(apinizer_api_traffic_total_count_tagged_total[5m]))
# Son 10 dakikada API başarı oranı (%)
(sum(increase(apinizer_api_traffic_success_count_total[10m])) / sum(increase(apinizer_api_traffic_total_count_total[10m]))) * 100
# API başına ortalama yanıt süresi (milisaniye)
sum by (api_name) (rate(apinizer_api_traffic_total_time_tagged_seconds_sum[5m])) / sum by (api_name) (rate(apinizer_api_traffic_total_time_tagged_seconds_count[5m])) * 1000
Önbellek Performans Analizi
# Son saatteki toplam önbellek get işlemleri
sum(increase(cache_gets_total[1h]))
# Önbellek isabet oranı (%)
(sum(increase(cache_gets_total[5m])) - sum(increase(apinizer_cache_api_errors_total[5m]))) / sum(increase(cache_gets_total[5m])) * 100
# Mevcut önbellek girişleri
sum(cache_size)
JVM Analizi
# Bellek kullanımı (%)
(sum(jvm_memory_used_bytes{application="apinizer-cache"}) * 100) / sum(jvm_memory_max_bytes{application="apinizer-cache"})
# Çöp toplama süresi
sum(rate(jvm_gc_pause_seconds_sum[5m]))
Grafana Dashboard’larının Oluşturulması
Grafana’da Prometheus’u veri kaynağı olarak ayarladıktan sonra, Apinizer metriklerini görselleştirmek için dashboard’lar oluşturabilirsiniz. İşte bazı panel önerileri:
API Trafik Dashboard’u
Panel 1: Türe Göre API İstek Hacmi
- Metrikler:
- Toplam istekler:
sum(rate(apinizer_api_traffic_total_count_total[5m]))
- Başarılı istekler:
sum(rate(apinizer_api_traffic_success_count_total[5m]))
- Başarısız istekler:
sum(rate(apinizer_api_traffic_error_count_total[5m]))
- Görselleştirme: Zaman serisi
Panel 2: Trafiğe Göre En Çok Kullanılan API’ler
- Metrik:
topk(5, sum by (api_name) (increase(apinizer_api_traffic_total_count_tagged_total[5m])))
- Görselleştirme: Bar grafiği
Panel 3: API İşlem Süresi Dağılımı
- Metrikler:
- İstek pipeline:
sum(rate(apinizer_api_traffic_request_pipeline_time_seconds_sum[5m])) / sum(rate(apinizer_api_traffic_request_pipeline_time_seconds_count[5m])) * 1000
- Yönlendirme:
sum(rate(apinizer_api_traffic_routing_time_seconds_sum[5m])) / sum(rate(apinizer_api_traffic_routing_time_seconds_count[5m])) * 1000
- Yanıt pipeline:
sum(rate(apinizer_api_traffic_response_pipeline_time_seconds_sum[5m])) / sum(rate(apinizer_api_traffic_response_pipeline_time_seconds_count[5m])) * 1000
- Görselleştirme: Zaman serisi
Panel 4: İstek/Yanıt Boyutu
- Metrikler:
- İstek boyutu:
sum(rate(apinizer_api_traffic_request_size_bytes_sum[5m])) / sum(rate(apinizer_api_traffic_request_size_bytes_count[5m]))
- Yanıt boyutu:
sum(rate(apinizer_api_traffic_response_size_bytes_sum[5m])) / sum(rate(apinizer_api_traffic_response_size_bytes_count[5m]))
- Görselleştirme: Zaman serisi
Önbellek Performans Dashboard’u
Panel 1: Önbellek İşlemleri
- Metrikler:
- Get işlemleri:
rate(cache_gets_total[5m])
- Put işlemleri:
rate(cache_puts_total[5m])
- Görselleştirme: Zaman serisi
Panel 2: Önbellek İsabet Oranı
- Metrik:
(sum(increase(cache_gets_total[5m])) -sum(increase(apinizer_cache_api_errors_total[5m]))) / sum(increase(cache_gets_total[5m])) * 100
- Görselleştirme: Gösterge
Panel 3: Önbellek Bellek Kullanımı
- Metrik:
sum(cache_entry_memory_bytes)
- Görselleştirme: İstatistik veya gösterge
Sistem Sağlık Dashboard’u
Panel 1: JVM Bellek Kullanımı
- Metrik:
sum by (area)(jvm_memory_used_bytes) / sum by (area)(jvm_memory_max_bytes) * 100
- Görselleştirme: Gösterge veya zaman serisi
Panel 2: CPU Kullanımı
- Metrik:
sum(system_cpu_usage{pod=~".*"}) by (pod) * 100
- Görselleştirme: Zaman serisi
Panel 3: Aktif İş Parçacıkları
- Metrik:
sum(jvm_threads_live_threads)
- Görselleştirme: İstatistik veya gösterge
Best Practices
1. Metrik Saklama Süresi
İhtiyaçlarınıza göre Prometheus’ta uygun saklama sürelerini yapılandırın. Varsayılan yapılandırma 7 gün veri saklar:
- "--storage.tsdb.path=/prometheus"
- "--storage.tsdb.retention.time=7d"
Daha uzun saklama için uzak depolama entegrasyonlarını düşünün veya bu değerleri ayarlayın.
2. Alarm Yapılandırması
Prometheus AlertManager veya Grafana’da kritik metrikler için alarm kurun:
- Yüksek API hata oranları:
(sum(increase(apinizer_api_traffic_error_count_total[5m])) / sum(increase(apinizer_api_traffic_total_count_total[5m]))) * 100 > 10
- Yüksek bellek kullanımı:
sum(jvm_memory_used_bytes) / sum(jvm_memory_max_bytes) * 100 > 85
- Yavaş yanıt süreleri:
sum(rate(apinizer_api_traffic_total_time_seconds_sum[5m])) / sum(rate(apinizer_api_traffic_total_time_seconds_count[5m])) > 1
3. Dashboard Organizasyonu
Grafana dashboard’larınızı mantıksal olarak düzenleyin:
- Gateway ve Cache bileşenleri için ayrı dashboard’lar oluşturun
- İlgili metrikleri bir araya getirin
- Namespace, pod veya API’ye göre filtrelemeye izin veren değişkenler kullanın
4. Etiket Kullanımı
Daha etkili sorgulama için Prometheus etiketlerinden yararlanın:
api_name
etiketini kullanarak belirli API'lere göre filtreleme yapın- Namespace veya pod’a göre metrikleri analiz edin
- Farklı ortamlar arasında performans karşılaştırması yapın
Sonuç
Apinizer’ı Prometheus ve Grafana ile entegre etmek, API yönetim altyapınız için güçlü izleme yetenekleri sağlar. Metrik toplama işlemini doğru şekilde yapılandırarak, bilgilendirici dashboard’lar oluşturarak ve alarmlar uygulayarak optimal performansı sağlayabilir, sorunları hızlıca tespit edebilir ve API ekosisteniniz hakkında veri odaklı kararlar alabilirsiniz.
Bu entegrasyon her bileşenin güçlü yönlerinden yararlanır:
- Apinizer’ın kapsamlı metrik toplama özelliği
- Prometheus’un verimli zaman serisi veritabanı ve güçlü sorgu dili
- Grafana’nın esnek ve güzel görselleştirmeleri
API gateway ve önbellek performansı hakkında daha derin içgörüler elde etmek için bugün Apinizer dağıtımınızı izlemeye başlayın.
Kaynaklar
Daha fazla bilgi için:
- Apinizer’ın Metrik Sistemine Genel Bakış
- Apinizer Tarafından Toplanan Metrikler
- Apinizer Gateway Metrikleri
- Apinizer Cache Metrikleri
- Prometheus Entegrasyonunun Kurulumu
- PromQL ile Apinizer Metriklerinin Analizi
- Gateway API Trafik Analizi
- Önbellek Performans Analizi
- JVM Analizi
- Grafana Dashboard’larının Oluşturulması
- API Trafik Dashboard’u
- Önbellek Performans Dashboard’u
- Sistem Sağlık Dashboard’u
- Best Practices
- 1. Metrik Saklama Süresi
- 2. Alarm Yapılandırması
- 3. Dashboard Organizasyonu
- 4. Etiket Kullanımı
- Sonuç
- Kaynaklar