Prometheus Nedir ve Neden İhtiyacınız Var? Prometheus, uygulamalardan sayısal verileri (ölçümleri) toplayan ve işleyen güçlü bir izleme sistemidir. Aşağıdakiler gibi temel göstergeleri izlemenize yardımcı olur: Servisinizin işlediği istek sayısı. Her talebe verilen yanıt süresi. Bellek ve CPU kullanımı. Sistemde oluşan hata sayısı. Prometheus'u kullanarak şu gibi kritik sorulara cevap bulabilirsiniz: "Servisim verimli bir şekilde çalışıyor mu?" "Performans darboğazları nelerdir?" "Altyapımızı büyütmemiz gerekiyor mu?" Peki Prometheus Metrikleri Nasıl Topluyor? Prometheus'un veri toplamasının iki temel yolu vardır: – Prometheus, metrikleri için servislere aktif olarak sorgu gönderir. Çekme modeli – Hizmetler kendi ölçümlerini bir aracıya iletir ve Prometheus da bu ölçümleri toplar. İtme modeli (Pushgateway) Bunları parçalayalım. Çekme Modeli , Prometheus HTTP aracılığıyla uygulamanızdan ölçümleri (örneğin, ). Çekme modelinde etkin bir şekilde alır http://your-service:8080/metrics Bu, varsayılan ve en sık kullanılan yöntemdir. Prometheus'u Golang ile Kurma (Çekme Modeli) Gerekli kütüphaneleri kurun: go get github.com/prometheus/client_golang/prometheus go get github.com/prometheus/client_golang/prometheus/promhttp (örneğin, HTTP isteklerini sayma): Metriklerinizi tanımlayın import ( "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promauto" ) var httpRequestsTotal = promauto.NewCounter(prometheus.CounterOpts{ Name: "http_requests_total", Help: "Total number of HTTP requests", }) uç noktasını : /metrics açığa çıkarın import ( "net/http" "github.com/prometheus/client_golang/prometheus/promhttp" ) func main() { http.Handle("/metrics", promhttp.Handler()) } Prometheus'u dosyasında : prometheus.yml hizmetinizden ölçümleri toplayacak şekilde yapılandırın scrape_configs: - job_name: "example_service" static_configs: - targets: ["localhost:8080"] Artık Prometheus, veri toplamak için her birkaç saniyede otomatik olarak sorgulayacaktır. http://localhost:8080/metrics Çekme Modeli Neden Tercih Ediliyor? – Prometheus, kazıma programını ve sıklığını kontrol eder. Basitlik – Metrikleri almak için ek bir hizmete gerek yok. Daha az hata noktası – Bir hizmet yanıt vermeyi durdurursa, Prometheus basitçe veri almayı durdurur ve böylece eski ölçümlerden kaçınır. Otomatik temizleme İtme Modeli (Pushgateway Yaklaşımı) , bir servis ölçümlerini adlı bir aracı servise ve bu servis bunları Prometheus alana kadar depolar. Push modelinde Pushgateway gönderir Nasıl Çalışır (İtme Modeli) Uygulamanız : metrikleri Pushgateway'e gönderir import ( "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/push" ) func main() { registry := prometheus.NewRegistry() jobCounter := prometheus.NewCounter(prometheus.CounterOpts{ Name: "job_execution_count", Help: "Number of executed jobs", }) registry.MustRegister(jobCounter) jobCounter.Inc() err := push.New("http://localhost:9090", "my_service_or_job"). Collector(jobCounter). Grouping("instance", "worker_1"). Push() if err != nil { panic(err) } } Prometheus'u Pushgateway'den veri toplayacak şekilde yapılandırın: scrape_configs: - job_name: "pushgateway" static_configs: - targets: ["localhost:9091"] Push Modeli Ne Zaman Faydalıdır? Aslında Prometheus onları kazıyamadan önce tamamlanan . kısa ömürlü işler (toplu görevler, cron işleri) Prometheus'un servise doğrudan erişemediği . ağ kısıtlamaları Doğrudan kazınamayan (IoT cihazları, harici API'ler). harici veri kaynakları Hangi Modeli Kullanmalısınız? Yöntem En iyisi... Artıları Eksileri Çek (Önerilen) Web servisleri, API'ler, uzun süre çalışan uygulamalar Basit kurulum, daha az bağımlılık, otomatik temizleme Çok kısa süreli görevler için uygun değildir İtme (Pushgateway) Toplu işler, istikrarlı ağ erişimi olmayan görevler Kısa ömürlü işlerden veri gönderilmesine izin verir Bayat veriler, ekstra karmaşıklık, darboğaz riski İtme Modeli Neden İdeal Değildir? bazı sorunları çözse de (örneğin, Prometheus onları silmeden önce sonlanan kısa ömürlü işlemler), : Pushgateway birkaç yeni sorun ortaya çıkarır Eski verileri yönetmek zor Bir hizmet sona ererse, eski ölçümleri Pushgateway'de kalır. Prometheus'un hizmetin hala çalışıp çalışmadığını bilmesinin bir yolu yok. Güncelliğini yitirmiş ölçümleri kullanarak manuel olarak silmeli veya son kullanma politikalarını yapılandırmalısınız. push.Delete(...) Ek karmaşıklık Doğrudan bir bağlantısı yerine artık bağlantısına sahipsiniz. Service → Prometheus Service → Pushgateway → Prometheus Pushgateway, bakım yükünü artıran ekstra bir bağımlılıktır. Potansiyel darboğazlar Birçok hizmetin sık sık ölçüm göndermesi durumunda, Pushgateway bunalabilir. Doğrudan Prometheus kazımalarının aksine (yükü dağıtır), tüm istekler tek bir Pushgateway örneğine ulaşır. Veri tutarlılığı sorunları Birden fazla hizmet aynı adı taşıyan ancak farklı değerlere sahip ölçümleri iletirse, veriler üzerine yazılabilir ve bu da yanlış sonuçlara yol açabilir. Çözüm Prometheus, izleme hizmetleri için güçlü ve güvenilir bir araçtır. Çoğu uygulama için en iyi seçimdir; basit, verimlidir ve ek karmaşıklık olmadan yeni veriler sağlar. Ancak, Lambda işlevleri veya toplu işler gibi çalışıyorsanız, Pushgateway aracılığıyla , süreç sona ermeden önce ölçümleri yakalamak için yararlı olabilir. çekme modeli kısa ömürlü süreçlerle itme modeli Doğru yaklaşımı seçmek, sisteminizin daha iyi gözlemlenebilirliğini ve sürdürülebilirliğini sağlar. Dikkatli ol!