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:

  1. Apinizer Gateway: API trafiği, harici bağlantılar, JVM sağlığı ve sistem kaynakları ile ilgili metrikleri toplar
  2. 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 MetrikleriLink to 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ı MetrikleriLink to 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 MetrikleriLink to 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 MetrikleriLink to 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 MetrikleriLink to Ö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 MetrikleriLink to API Metrikleri

  • API istek sayıları
  • API yanıt süreleri
  • API hata sayıları

JVM ve Sistem MetrikleriLink to 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ştirilmesiLink to 1. Apinizer Bileşenlerinde Metriklerin Etkinleştirilmesi

Apinizer Gateway için:Link to 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:Link to 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"
TEXT

2. Prometheus’un Metrik Toplamak için YapılandırılmasıLink to 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) ScrapingLink to 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
YML

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']
YML

Kubernetes Service Discovery ile Dinamik ScrapingLink to 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"
YML

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ı...
YML

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
YML

Ö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)
YML

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]))
YML

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: