Apinizer Cache için Prometheus Kurulumu ve Scraping Yapılandırması
Apinizer Cache’in metriklerini Prometheus’a entegre etmek için scraping yapılandırması yapılabilir. Prometheus, Cache’in 9091 portu üzerinden sağladığı metrikleri sabit (static) veya dinamik (Kubernetes service discovery) yöntemlerle toplayabilir. Bu sayede Cache performansını izleme, analiz etme ve görselleştirme imkanı sağlar.
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 Cache’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 Cache’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 Cache bileşeninin 9091portuna yönlendirme yapacak bir servis oluşturulmalıdır.apinizer-prometheus-svc.yaml
Apinizer Cache’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 cache-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.
Cache metriklerinin Prometheus tarafından toplanabilmesi için Gateway Ortamları (Gateway Environments) sayfasında Deployments & Services bölümünde Cache edit deployment seçeneği seçilerek METRICS_ENABLED=TRUE değişkeni eklenmelidir.
Prometheus’un Cache 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 Cache’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 Cache 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 Cache’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.
ServiceAccount ve RBAC Yapılandırması
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.