Prometey nədir və ona niyə ehtiyacınız var? Prometheus tətbiqlərdən ədədi məlumatları (metrikalar) toplayan və emal edən güclü monitorinq sistemidir. Bu kimi əsas göstəriciləri izləməyə kömək edir: Xidmətiniz tərəfindən idarə olunan sorğuların sayı. Hər sorğu üçün cavab müddəti. Yaddaş və CPU istifadəsi. Sistemdə baş verən səhvlərin sayı. Prometheus istifadə edərək, aşağıdakı kimi kritik suallara cavab verə bilərsiniz: "Xidmətim səmərəli işləyirmi?" "Performans darboğazları nələrdir?" "İnfrastrukturumuzu genişləndirməliyikmi?" Prometey Metrikləri necə toplayır? Prometeyin məlumat toplamasının iki əsas yolu var: – Prometheus öz ölçüləri üçün xidmətləri aktiv şəkildə sorğulayır. Çəkmə modeli – Xidmətlər öz ölçülərini Prometeyin topladığı vasitəçiyə itələyir. Push model (Pushgateway) Gəlin onları parçalayaq. Çəkmə Modeli Prometheus HTTP vasitəsilə tətbiqinizdən metrikləri (məsələn, ). Çəkmə modelində aktiv şəkildə alır http://your-service:8080/metrics Bu standart və ən çox istifadə edilən üsuldur. Qolanq ilə Prometeyin qurulması (Çəkmə Modeli) Lazımi kitabxanaları quraşdırın: go get github.com/prometheus/client_golang/prometheus go get github.com/prometheus/client_golang/prometheus/promhttp (məsələn, HTTP sorğularının hesablanması): Metriklərinizi müəyyənləşdirin 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", }) son nöqtəsini : /metrics ifşa edin import ( "net/http" "github.com/prometheus/client_golang/prometheus/promhttp" ) func main() { http.Handle("/metrics", promhttp.Handler()) } də : prometheus.yml xidmətinizdən ölçüləri silmək üçün Prometheus-u konfiqurasiya edin scrape_configs: - job_name: "example_service" static_configs: - targets: ["localhost:8080"] İndi Prometheus məlumat toplamaq üçün bir neçə saniyədən bir avtomatik olaraq sorğusu göndərəcək. http://localhost:8080/metrics Nə üçün Pull Modelinə üstünlük verilir? - Prometey qırıntı cədvəlinə və tezliyinə nəzarət edir. Sadəlik – Metrikləri qəbul etmək üçün əlavə xidmətə ehtiyac yoxdur. Daha az uğursuzluq nöqtəsi – Xidmət cavab verməyi dayandırarsa, Prometheus köhnəlmiş ölçülərdən qaçaraq sadəcə məlumat qəbulunu dayandırır. Avtomatik təmizləmə Push Model (Pushgateway Approach) xidmət öz ölçülərini adlı vasitəçi xidmətə və bu xidmət onları Prometey onları alana qədər saxlayır. Təkan modelində Pushgateway göndərir Necə işləyir (Push Model) Tətbiqiniz : ölçüləri Pushgateway-ə itələyir 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) } } Pushgateway-dən məlumat toplamaq üçün Prometheus-u konfiqurasiya edin: scrape_configs: - job_name: "pushgateway" static_configs: - targets: ["localhost:9091"] Push Modeli Nə Zamandır? Faydalı Prometey onları qırmadan əvvəl tamamlanan . qısamüddətli işlər (toplu tapşırıqlar, cron işləri) Prometheusun xidmətə birbaşa daxil ola bilmədiyi . şəbəkə məhdudiyyətləri Birbaşa qırıla bilməyən (IoT cihazları, xarici API-lər). xarici məlumat mənbələri Hansı Modeldən İstifadə Etməlisən? Metod Üçün ən yaxşısı... Pros Eksiler Çək (tövsiyə olunur) Veb xidmətləri, API-lər, uzun müddət işləyən proqramlar Sadə quraşdırma, daha az asılılıq, avtomatik təmizləmə Çox qısa müddətli işlər üçün uyğun deyil Push (Pushgateway) Toplu işlər, sabit şəbəkə girişi olmayan tapşırıqlar Qısa müddətli işlərdən məlumatları itələmək imkanı verir Köhnə məlumatlar, əlavə mürəkkəblik, darboğaz riski Push Model niyə ideal deyil? bəzi problemləri həll etsə də (məsələn, Prometey onları sıyırmazdan əvvəl başa çatan qısa müddətli proseslər), : Pushgateway bir neçə yeni məsələ təqdim edir Köhnə məlumatları idarə etmək çətindir Xidmət ölürsə, onun köhnə göstəriciləri Pushgateway-də qalır. Prometeyin xidmətin hələ də işlək olub olmadığını bilmək imkanı yoxdur. istifadə edərək köhnəlmiş ölçüləri əl ilə silməli və ya müddətin bitmə siyasətlərini konfiqurasiya etməlisiniz. push.Delete(...) Əlavə mürəkkəblik Birbaşa linki əvəzinə indi sizdə var. Xidmət → Prometheus Xidmət → Pushgateway → Prometheus Pushgateway əlavə asılılıqdır və texniki xidmət yükünü artırır. Potensial darboğazlar Bir çox xidmətlər ölçüləri tez-tez təkan edərsə, Pushgateway həddindən artıq yüklənə bilər. Birbaşa Prometheus qırıntılarından (yükü paylayan) fərqli olaraq, bütün sorğular tək Pushgateway instansiyasına çatdı. Məlumatların ardıcıllığı problemləri Birdən çox xidmət eyni ada malik, lakin fərqli dəyərləri olan ölçüləri təkan edərsə, məlumatların üzərinə yazıla bilər və bu, yanlış nəticələrə səbəb ola bilər. Nəticə Prometheus monitorinq xidmətləri üçün güclü və etibarlı vasitədir. Əksər proqramlar üçün ən yaxşı seçimdir – sadə, səmərəli və əlavə mürəkkəblik olmadan təzə məlumatı təmin edir. Bununla belə, Lambda funksiyaları və ya toplu işlər kimi işləyirsinizsə, Pushgateway vasitəsilə proses bitməzdən əvvəl ölçüləri tutmaq üçün faydalı ola bilər. çəkmə modeli qısamüddətli proseslərlə təkan modeli Düzgün yanaşmanın seçilməsi sisteminizin daha yaxşı müşahidə oluna bilməsini və davamlılığını təmin edir. Diqqət edin!