Què és Prometeu i per què el necessites? Prometheus és un potent sistema de monitorització que recopila i processa dades numèriques (mètriques) d'aplicacions. T'ajuda a fer un seguiment d'indicadors clau com ara: El nombre de peticions gestionades pel vostre servei. El temps de resposta per a cada sol·licitud. Ús de memòria i CPU. El nombre d'errors que es produeixen al sistema. Mitjançant l'ús de Prometheus, podeu respondre preguntes crítiques com: "El meu servei funciona de manera eficient?" "Quins són els colls d'ampolla del rendiment?" "Hem d'augmentar la nostra infraestructura?" I com recull Prometheus mètriques? Hi ha dues maneres principals en què Prometheus recopila dades: : Prometheus consulta activament els serveis per les seves mètriques. Model d'extracció : els serveis transmeten les seves mètriques a un intermediari, que Prometheus recull. Model Push (Pushgateway) Anem a trencar-los. Model de tirada En el , Prometheus de la vostra aplicació mitjançant HTTP (p. ex., ). model d'extracció obté mètriques de manera activa http://your-service:8080/metrics Aquest és el mètode predeterminat i el més utilitzat. Configuració de Prometheus amb Golang (model pull) Instal·leu les biblioteques necessàries: go get github.com/prometheus/client_golang/prometheus go get github.com/prometheus/client_golang/prometheus/promhttp (p. ex., comptant les sol·licituds HTTP): Definiu les vostres mètriques 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", }) punt final : Exposa un /metrics import ( "net/http" "github.com/prometheus/client_golang/prometheus/promhttp" ) func main() { http.Handle("/metrics", promhttp.Handler()) } a : Configureu Prometheus per esborrar mètriques del vostre servei prometheus.yml scrape_configs: - job_name: "example_service" static_configs: - targets: ["localhost:8080"] Ara, Prometheus consultarà automàticament cada pocs segons per recollir dades. http://localhost:8080/metrics Per què es prefereix el model Pull? : Prometheus controla el programa i la freqüència de raspat. Simplicitat : no cal un servei addicional per rebre mètriques. Menys punts d'error : si un servei deixa de respondre, Prometheus simplement deixa de rebre dades, evitant mètriques obsoletes. Neteja automàtica Model Push (Enfocament Pushgateway) En el , un servei les seves mètriques a un servei intermediari anomenat , que les emmagatzema fins que Prometheus les recupera. model push envia Pushgateway Com funciona (model push) La vostra aplicació a Pushgateway: envia mètriques 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) } } Configura Prometheus per recopilar dades de Pushgateway: scrape_configs: - job_name: "pushgateway" static_configs: - targets: ["localhost:9091"] Quan és útil el model Push? realment que es completen abans que Prometheus pugui rascar-les. Feines de curta durada (tasques per lots, tasques de cron) on Prometheus no pot accedir directament al servei. Restriccions de xarxa (dispositius IoT, API externes) que no es poden eliminar directament. Fonts de dades externes Quin model hauríeu d'utilitzar? Mètode El millor per... Pros Contres Tirar (recomanat) Serveis web, API, aplicacions de llarga durada Configuració senzilla, menys dependències, neteja automàtica No apte per a tasques de molt curta durada Push (Pushgateway) Treballs per lots, tasques sense accés estable a la xarxa Permet enviar dades de feines de curta durada Dades obsoletes, complexitat addicional, risc de colls d'ampolla Per què el model Push no és ideal? Tot i que resol alguns problemes (per exemple, processos de curta durada que finalitzen abans que Prometheus els raspegi), : Pushgateway introdueix diversos problemes nous Difícil de gestionar les dades obsoletes Si un servei mor, les seves mètriques antigues romanen a Pushgateway. Prometheus no té manera de saber si el servei encara funciona. Heu de suprimir manualment mètriques obsoletes mitjançant o configurar polítiques de caducitat. push.Delete(...) Complexitat addicional En lloc d'un enllaç directe , ara teniu . Servei → Prometheus Servei → Pushgateway → Prometheus Pushgateway és una dependència addicional que augmenta la sobrecàrrega de manteniment. Potencials colls d'ampolla Si molts serveis impulsen mètriques amb freqüència, Pushgateway es pot desbordar. A diferència dels raspats directes de Prometheus (que distribueixen la càrrega), totes les sol·licituds arriben a una única instància Pushgateway. Problemes de coherència de les dades Si diversos serveis transmeten mètriques amb el mateix nom però amb valors diferents, les dades es poden sobreescriure i es poden produir resultats incorrectes. Conclusió Prometheus és una eina potent i fiable per al seguiment dels serveis. Per a la majoria d'aplicacions, el és la millor opció: és senzill, eficient i garanteix dades noves sense complexitat addicional. Tanmateix, si treballeu amb com ara funcions Lambda o treballs per lots, el mitjançant Pushgateway pot ser útil per capturar mètriques abans que el procés surti. model d'extracció processos de curta durada, model push L'elecció de l'enfocament adequat garanteix una millor observabilitat i manteniment del vostre sistema. Cuida't!