129 lectures

Supervisió dels serveis de Golang amb Prometheus: escollir entre models pull i push

per Ilia Ivankin5m2025/03/02
Read on Terminal Reader

Massa Llarg; Per llegir

Prometheus és un potent sistema de monitorització que recopila i processa dades numèriques (mètriques) d'aplicacions. Us ajuda a fer un seguiment d'indicadors clau com ara: nombre de sol·licituds gestionades pel vostre servei. Temps de resposta per a cada petició. Ús de memòria i CPU. Errors que es produeixen al sistema.
featured image - Supervisió dels serveis de Golang amb Prometheus: escollir entre models pull i push
Ilia Ivankin HackerNoon profile picture
0-item
1-item

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:

  1. Model d'extracció : Prometheus consulta activament els serveis per les seves mètriques.
  2. Model Push (Pushgateway) : els serveis transmeten les seves mètriques a un intermediari, que Prometheus recull.


Anem a trencar-los.


Model de tirada

En el model d'extracció , Prometheus obté mètriques de manera activa de la vostra aplicació mitjançant HTTP (p. ex., http://your-service:8080/metrics ).

Aquest és el mètode predeterminat i el més utilitzat.

Configuració de Prometheus amb Golang (model pull)

  1. Instal·leu les biblioteques necessàries:

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


  2. Definiu les vostres mètriques (p. ex., comptant les sol·licituds 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. Exposa un punt final /metrics :

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


  4. Configureu Prometheus per esborrar mètriques del vostre servei a prometheus.yml :

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


Ara, Prometheus consultarà automàticament http://localhost:8080/metrics cada pocs segons per recollir dades.

Per què es prefereix el model Pull?

  • Simplicitat : Prometheus controla el programa i la freqüència de raspat.
  • Menys punts d'error : no cal un servei addicional per rebre mètriques.
  • Neteja automàtica : si un servei deixa de respondre, Prometheus simplement deixa de rebre dades, evitant mètriques obsoletes.



Model Push (Enfocament Pushgateway)

empeny!


En el model push , un servei envia les seves mètriques a un servei intermediari anomenat Pushgateway , que les emmagatzema fins que Prometheus les recupera.

Com funciona (model push)

  1. La vostra aplicació envia mètriques a 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. Configura Prometheus per recopilar dades de Pushgateway:

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

Quan és realment útil el model Push?

  • Feines de curta durada (tasques per lots, tasques de cron) que es completen abans que Prometheus pugui rascar-les.
  • Restriccions de xarxa on Prometheus no pot accedir directament al servei.
  • Fonts de dades externes (dispositius IoT, API externes) que no es poden eliminar directament.


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 Pushgateway resol alguns problemes (per exemple, processos de curta durada que finalitzen abans que Prometheus els raspegi), introdueix diversos problemes nous :


  1. 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 push.Delete(...) o configurar polítiques de caducitat.


  2. Complexitat addicional
    • En lloc d'un enllaç directe Servei → Prometheus , ara teniu Servei → Pushgateway → Prometheus .

    • Pushgateway és una dependència addicional que augmenta la sobrecàrrega de manteniment.


  3. 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.


  4. 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 model d'extracció és la millor opció: és senzill, eficient i garanteix dades noves sense complexitat addicional. Tanmateix, si treballeu amb processos de curta durada, com ara funcions Lambda o treballs per lots, el model push mitjançant Pushgateway pot ser útil per capturar mètriques abans que el procés surti.


L'elecció de l'enfocament adequat garanteix una millor observabilitat i manteniment del vostre sistema.


Cuida't!

Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks