Apinizer Gateway için Prometheus Kurulumu ve Scraping Yapılandırması
Prometheus Kurulumu ve Scraping Yapılandırması
Prometheus, belirli hedeflerden metrikleri çekerek zaman serisi verisi olarak saklayan bir izleme sistemidir. Scraping, Prometheus’un hedef servislerden metrikleri periyodik olarak topladığı süreçtir. Apinizer Gateway'in metrikleri 9091 portu üzerinden sağlanır ve Prometheus, bu metrikleri iki farklı yöntemle çekebilir:
Constant Scraping (Sabit Kazıma):
Sabit scraping yönteminde, izlenecek servisler önceden belirlenmiş sabit IP adresleri veya DNS isimleriyle static_configs altında tanımlanır. Prometheus, bu servisleri düzenli aralıklarla sorgular. Bu yöntem, servis adreslerinin değişmediği veya manuel olarak tanımlanabildiği durumlarda kullanışlıdır.Dynamic Scraping (Dinamik Kazıma):
Dinamik scraping yönteminde, Prometheus, servisleri Kubernetes gibi bir servis keşif mekanizması aracılığıyla otomatik olarak keşfeder. kubernetes_sd_config veya benzeri yapılandırmalar sayesinde, servisler değiştikçe Prometheus yapılandırmasını güncellemeye gerek kalmaz. Bu yöntem, mikro hizmet mimarilerinde ve sürekli değişen altyapılarda büyük avantaj sağlar.
Bu iki yöntem, kullanım senaryosuna göre tercih edilerek Prometheus’un Apinizer Gateway’den metrikleri çekmesini sağlar.
Sabit (Constant) Scraping Yapılandırması:
Apinizer Gateway’in metrikleri 9091 portu üzerinden yayınlayabilmesi için ilgili container’a environment variable olarak -name: METRICS_ENABLED=TRUE parametresi tanımlanmalıdır.
Constant Scraping yapılandırmasında, Prometheus'un metrikleri kazıyacağı servis adının belirtilmesi gerekmektedir. Bu nedenle, Apinizer Worker bileşeninin 9091 portuna yönlendirme yapacak bir servis oluşturulmalıdır.
apinizer-prometheus-svc.yaml
Apinizer Gateway’in 9091 portundan Prometheus’a metrik sağlaması için, Prometheus'un scraping yapılandırmasının ConfigMap üzerinden yapılması gerekir. Prometheus'un worker-prometheus-service adlı servisi belirlenen adreste static_configs içine tanımlanarak constant scraping yapılandırması gerçekleştirilir.
Dinamik (Dynamic) Scraping Yapılandırması:
Dinamik scraping yöntemi, Prometheus’un Kubernetes içindeki podları otomatik olarak keşfetmesini sağlar. Bu yöntem sayesinde, her yeni pod için manuel scraping yapılandırması yapmak gerekmez. Prometheus, pod’lara eklenen belirli anotasyonları kullanarak metrikleri otomatik olarak çeker.
Gateway metriklerinın Prometheus tarafından toplanabilmesi için Ağ Geçidi Ortamları(Gateway Environments) sayfasında Deployments & Services bölümünde Worker edit deployment seçeneği seçilerek METRICS_ENABLED=TRUE değişkeni eklenmelidir.

Kubernetes yönetimi Apinizer ile yapılmıyor ise
Prometheus’un Worker podlar'ından metrik toplamasını sağlamak için ilgili Deployment manifestine spec.template.metadata.annotations bölümüne ilgili anotasyonlar eklenmelidir. Buna ek olarak, Apinizer Gateway’in metrikleri 9091 portu üzerinden yayınlayabilmesi için ilgili container’a environment variable olarak -name: METRICS_ENABLED=TRUE parametresi tanımlanmalıdır. Bu sayede metrik servisi 9091 portu üzerinden dışa aktarılacaktır ve Prometheus, 9091 portunda çalışan Apinizer Gateway pod’unu otomatik olarak keşfedecek ve metrikleri kazıyacaktır.
Prometheus Scraping Konfigürasyonu
Pod'lardaki anotasyonları keşfedebilmesi için Prometheus'un ConfigMap yapılandırmasında kubernetes_sd_configs kullanılarak dynamic scraping etkinleştirilmelidir.
Aşağıdaki ConfigMap örneği, Prometheus’un Kubernetes podlarını dinamik olarak keşfetmesini sağlar: Bu yapılandırma, Prometheus’un Kubernetes podlarını otomatik olarak keşfetmesini ve sadece prometheus.io/scrape: "true" anotasyonu olan podlardan metrik toplamasını sağlar. Böylece, Apinizer Gateway'e dinamik scraping uygulanarak manuel hedef tanımlamaya gerek kalmadan metrikler Prometheus tarafından toplanabilir.
Prometheus'un Kurulumu
Persistent Storage Yapılandırması
Prometheus'un metrikleri Kubernetes cluster'ındaki bir node üzerinde depolanacağı için PersistentVolume (PV) ve PersistentVolumeClaim (PVC) tanımlamalarının yapılması gerekmektedir. Bu yapılandırma, Prometheus'un kapanma veya yeniden başlatılma durumlarında verilerini korumasını sağlar.
Yukarıdaki PersistentVolume (PV) ve PersistentVolumeClaim (PVC) yapılandırması, Prometheus’un verilerini belirli bir node üzerinde saklamasını sağlar. Ancak burada kullanılan hostPath, Prometheus'un çalıştığı belirli bir node'un yerel dosya sistemine bağımlıdır.
Bu nedenle:
- Prometheus pod’ları farklı bir node’a taşınırsa, yeni node üzerinde aynı hostPath dizini olmadığı sürece verilerini kaybedecektir.
- Pod’ların her zaman aynı node üzerinde çalışmasını garanti altına almak için nodeAffinity veya nodeSelector kullanarak pod'ları belirli node'lara sabitlemek gerekir.
Alternatif olarak, verilerin node bağımsız bir şekilde saklanması için NFS, Ceph, Longhorn veya bir bulut tabanlı depolama çözümü kullanılabilir.
Aşağıdaki Prometheus Deployment YAML dosyasını sistemlerinize uygun olacak şekilde değiştirerek Kubernetes Cluster'ınıza yükleyin.
Prometheus için Kubernetes Servisi oluşturulur.
Prometheus Kubernetes üzerinde deploy olurken prometheus-service isminde ve NodePort tipinde bir Kubernetes servisi oluşturur. Bu servis kubernetes dışından Prometheus'a erişim için gereklidir. Ancak siz bu servis yerine Ingress veya kurumunuzda bağlantı yöntemi için hangi yapıyı kullanıyorsanız ona göre uyarlayabilirsiniz.