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:
- Çəkmə modeli – Prometheus öz ölçüləri üçün xidmətləri aktiv şəkildə sorğulayır.
- Push model (Pushgateway) – Xidmətlər öz ölçülərini Prometeyin topladığı vasitəçiyə itələyir.
Gəlin onları parçalayaq.
Çəkmə Modeli
Çəkmə modelində Prometheus HTTP vasitəsilə tətbiqinizdən metrikləri aktiv şəkildə alır (məsələn, 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
Metriklərinizi müəyyənləşdirin (məsələn, HTTP sorğularının hesablanması):
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", })
/metrics
son nöqtəsini ifşa edin :import ( "net/http" "github.com/prometheus/client_golang/prometheus/promhttp" ) func main() { http.Handle("/metrics", promhttp.Handler()) }
prometheus.yml
də 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 http://localhost:8080/metrics
sorğusu göndərəcək.
Nə üçün Pull Modelinə üstünlük verilir?
- Sadəlik - Prometey qırıntı cədvəlinə və tezliyinə nəzarət edir.
- Daha az uğursuzluq nöqtəsi – Metrikləri qəbul etmək üçün əlavə xidmətə ehtiyac yoxdur.
- Avtomatik təmizləmə – 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.
Push Model (Pushgateway Approach)
Təkan modelində xidmət öz ölçülərini Pushgateway adlı vasitəçi xidmətə göndərir və bu xidmət onları Prometey onları alana qədər saxlayır.
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 Faydalı Nə Zamandır?
- 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 xarici məlumat mənbələri (IoT cihazları, xarici API-lər).
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?
Pushgateway 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), 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.
push.Delete(...)
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.
- Əlavə mürəkkəblik
Birbaşa Xidmət → Prometheus linki əvəzinə indi sizdə Xidmət → Pushgateway → Prometheus var.
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 çəkmə modeli ə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 qısamüddətli proseslərlə işləyirsinizsə, Pushgateway vasitəsilə təkan modeli proses bitməzdən əvvəl ölçüləri tutmaq üçün faydalı ola bilər.
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!