129 lekti

Siveyans sèvis Golang ak Prometheus: Chwazi ant modèl Pull ak Pouse

pa Ilia Ivankin5m2025/03/02
Read on Terminal Reader

Twò lontan; Pou li

Prometheus se yon sistèm siveyans pwisan ki kolekte epi trete done nimerik (mestik) ki soti nan aplikasyon yo. Li ede ou swiv endikatè kle yo tankou: kantite demann okipe pa sèvis ou a. Tan repons pou chak demann. Itilizasyon memwa ak CPU. Erè ki fèt nan sistèm nan.
featured image - Siveyans sèvis Golang ak Prometheus: Chwazi ant modèl Pull ak Pouse
Ilia Ivankin HackerNoon profile picture
0-item
1-item

Ki sa ki Prometheus ak poukisa ou bezwen li?

Prometheus se yon sistèm siveyans pwisan ki kolekte epi trete done nimerik (mestik) ki soti nan aplikasyon yo. Li ede w swiv endikatè kle yo tankou:


  • Kantite demann ki okipe pa sèvis ou a.
  • Tan repons pou chak demann.
  • Itilizasyon memwa ak CPU.
  • Nimewo a nan erè ki fèt nan sistèm nan.


Lè w itilize Prometheus, ou ka reponn kesyon enpòtan tankou:

  • "Èske sèvis mwen an fonksyone avèk efikasite?"

  • "Ki sa ki obstak pèfòmans yo?"

  • "Èske nou bezwen ogmante enfrastrikti nou an?"


Ak ki jan Prometheus kolekte metrik?

Gen de fason prensipal Prometheus rasanble done:

  1. Rale modèl - Prometheus aktivman mande sèvis pou mezi yo.
  2. Pouse modèl (Pushgateway) - Sèvis pouse mezi yo nan yon entèmedyè, ki Prometheus Lè sa a, kolekte.


Ann kraze yo.


Rale modèl

Nan modèl rale a, Prometheus aktivman pran mezi nan aplikasyon w lan atravè HTTP (egzanp, http://your-service:8080/metrics ).

Sa a se metòd la default ak pi souvan itilize.

Mete kanpe Prometheus ak Golang (Pull Model)

  1. Enstale bibliyotèk ki nesesè yo:

     go get github.com/prometheus/client_golang/prometheus go get github.com/prometheus/client_golang/prometheus/promhttp


  2. Defini mezi ou yo (egzanp, konte demann HTTP):

     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", })


  3. Ekspoze yon pwen final /metrics :

     import ( "net/http" "github.com/prometheus/client_golang/prometheus/promhttp" ) func main() { http.Handle("/metrics", promhttp.Handler()) }


  4. Konfigure Prometheus pou grate mezi nan sèvis ou a nan prometheus.yml :

     scrape_configs: - job_name: "example_service" static_configs: - targets: ["localhost:8080"]


Koulye a, Prometheus pral otomatikman rechèch http://localhost:8080/metrics chak kèk segonn pou kolekte done.

Poukisa Modèl Pull la Prefere?

  • Senplisite - Prometheus kontwole orè a grate ak frekans.
  • Mwens pwen echèk - Pa bezwen yon sèvis adisyonèl pou resevwa mezi.
  • Netwayaj otomatik - Si yon sèvis sispann reponn, Prometheus tou senpleman sispann resevwa done, evite mezi rasi.



Pouse Modèl (Apwòch Pushgateway)

pouse li!


Nan modèl pouse a, yon sèvis voye mezi li yo nan yon sèvis entèmedyè ki rele Pushgateway , ki estoke yo jiskaske Prometheus chache yo.

Ki jan li fonksyone (Pouse Modèl)

  1. Aplikasyon ou a pouse mezi yo nan Pushgateway:

     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) } }


  2. Konfigure Prometheus pou kolekte done ki soti nan Pushgateway:

     scrape_configs: - job_name: "pushgateway" static_configs: - targets: ["localhost:9091"]

Ki lè Modèl Pouse a aktyèlman itil?

  • Travay ki dire kout (travay pakèt, travay cron) ki fini anvan Prometheus ka grate yo.
  • Restriksyon rezo kote Prometheus pa ka jwenn aksè dirèkteman nan sèvis la.
  • Sous done ekstèn (aparèy IoT, API ekstèn) ki pa ka grate dirèkteman.


Ki modèl ou ta dwe itilize?

Metòd

Pi bon pou...

Avantaj

Dezavantaj

Rale (Rekòmande)

Sèvis entènèt, API, aplikasyon ki dire lontan

Senp konfigirasyon, mwens depandans, netwayaj otomatik

Pa apwopriye pou travay trè kout

Pouse (Pushgateway)

Travay pakèt, travay san aksè rezo ki estab

Pèmèt pouse done ki soti nan travay ki dire kout

Done rasi, konpleksite siplemantè, risk pou anbouteyaj

Poukisa Pouse Modèl pa Ideyal?

Malgre ke Pushgateway rezoud kèk pwoblèm (egzanp, pwosesis ki dire kout ki fini anvan Prometheus grate yo), li prezante plizyè nouvo pwoblèm :


  1. Li difisil pou jere done rasi
    • Si yon sèvis mouri, ansyen mezi li yo rete nan Pushgateway.

    • Prometheus pa gen okenn fason pou konnen si sèvis la toujou ap fonksyone.

    • Ou dwe manyèlman efase mezi demode lè l sèvi avèk push.Delete(...) oswa konfigirasyon règleman ekspirasyon.


  2. Konpleksite adisyonèl
    • Olye de yon lyen dirèk Sèvis → Prometheus , kounye a ou gen Sèvis → Pushgateway → Prometheus .

    • Pushgateway se yon depandans siplemantè, ogmante antretyen anlè.


  3. Potansyèl blokaj
    • Si anpil sèvis pouse mezi souvan, Pushgateway ka vin akable.

    • Kontrèman ak scrapes dirèk Prometheus (ki distribye chay la), tout demann frape yon sèl egzanp Pushgateway.


  4. Pwoblèm konsistans done yo
    • Si plizyè sèvis pouse mezi ak menm non men valè diferan, done yo ka ranplase, sa ki lakòz rezilta kòrèk.



Konklizyon

Prometheus se yon zouti pwisan ak serye pou kontwole sèvis yo. Pou pifò aplikasyon, modèl rale a se pi bon chwa-li senp, efikas, epi asire done fre san konpleksite adisyonèl. Sepandan, si w ap travay ak pwosesis ki dire lontan tankou fonksyon Lambda oswa travay pakèt, modèl pouse a atravè Pushgateway ka itil pou pran mezi anvan pwosesis la soti.


Chwazi bon apwòch la asire pi bon obsèvasyon ak antretyen nan sistèm ou an.


Pran swen!

Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks