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:
- Rale modèl - Prometheus aktivman mande sèvis pou mezi yo.
- 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)
Enstale bibliyotèk ki nesesè yo:
go get github.com/prometheus/client_golang/prometheus go get github.com/prometheus/client_golang/prometheus/promhttp
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", })
Ekspoze yon pwen final
/metrics
:import ( "net/http" "github.com/prometheus/client_golang/prometheus/promhttp" ) func main() { http.Handle("/metrics", promhttp.Handler()) }
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)
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)
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) } }
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 :
- 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.
- 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è.
- 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.
- 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!