Apinizer Gateway metriklerini Prometheus ile toplamak için gerekli kurulum ve yapılandırma adımlarını sağlar. Constant ve Dynamic scraping yöntemlerini kullanarak Gateway metriklerini Prometheus’a entegre edebilir, Kubernetes ortamında otomatik metrik toplama yapılandırması yapabilir ve Prometheus’un kurulumunu gerçekleştirebilirsiniz.
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 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 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.
Apinizer Gateway’in metrikleri 9091 portu üzerinden yayınlayabilmesi için ilgili container’a environment variable olarak 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 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 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 metriklerinin Prometheus tarafından toplanabilmesi için Gateway 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.
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 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.
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 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.
Prometheus’un pod’ları keşfetmesi ve metriklerini toplayabilmesi için gerekli izinlere sahip olması gerekir. Bunun için aşağıdaki ServiceAccount, ClusterRole ve ClusterRoleBinding tanımlamalarını yapılmalıdır:
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.