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: - Prometheus aktivman mande sèvis pou mezi yo. Rale modèl - Sèvis pouse mezi yo nan yon entèmedyè, ki Prometheus Lè sa a, kolekte. Pouse modèl (Pushgateway) Ann kraze yo. Rale modèl Nan a, Prometheus mezi nan aplikasyon w lan atravè HTTP (egzanp, ). modèl rale aktivman pran 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 (egzanp, konte demann HTTP): Defini mezi ou yo 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", }) pwen final : Ekspoze yon /metrics import ( "net/http" "github.com/prometheus/client_golang/prometheus/promhttp" ) func main() { http.Handle("/metrics", promhttp.Handler()) } nan : Konfigure Prometheus pou grate mezi nan sèvis ou a prometheus.yml scrape_configs: - job_name: "example_service" static_configs: - targets: ["localhost:8080"] Koulye a, Prometheus pral otomatikman rechèch chak kèk segonn pou kolekte done. http://localhost:8080/metrics Poukisa Modèl Pull la Prefere? - Prometheus kontwole orè a grate ak frekans. Senplisite - Pa bezwen yon sèvis adisyonèl pou resevwa mezi. Mwens pwen echèk - Si yon sèvis sispann reponn, Prometheus tou senpleman sispann resevwa done, evite mezi rasi. Netwayaj otomatik Pouse Modèl (Apwòch Pushgateway) Nan a, yon sèvis mezi li yo nan yon sèvis entèmedyè ki rele , ki estoke yo jiskaske Prometheus chache yo. modèl pouse voye Pushgateway Ki jan li fonksyone (Pouse Modèl) Aplikasyon ou nan Pushgateway: a pouse mezi yo 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 itil? aktyèlman ki fini anvan Prometheus ka grate yo. Travay ki dire kout (travay pakèt, travay cron) kote Prometheus pa ka jwenn aksè dirèkteman nan sèvis la. Restriksyon rezo (aparèy IoT, API ekstèn) ki pa ka grate dirèkteman. Sous done ekstèn 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 rezoud kèk pwoblèm (egzanp, pwosesis ki dire kout ki fini anvan Prometheus grate yo), li : Pushgateway 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 oswa konfigirasyon règleman ekspirasyon. push.Delete(...) Konpleksite adisyonèl Olye de yon lyen dirèk , kounye a ou gen . Sèvis → Prometheus 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, a se pi bon chwa-li senp, efikas, epi asire done fre san konpleksite adisyonèl. Sepandan, si w ap travay ak tankou fonksyon Lambda oswa travay pakèt, a atravè Pushgateway ka itil pou pran mezi anvan pwosesis la soti. modèl rale pwosesis ki dire lontan modèl pouse Chwazi bon apwòch la asire pi bon obsèvasyon ak antretyen nan sistèm ou an. Pran swen!