Métricas de Prometheus en Go: creación y exportación de métricas en Golang

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Métricas de Prometheus en Go (Golang): guía completa



Prometheus es un potente sistema de monitoreo y alerta de código abierto que se ha convertido en el estándar de facto en el mundo de las aplicaciones en la nube. Para el lenguaje Go (Golang), existe el cliente oficial prometheus/client_golang, que permite agregar métricas fácilmente a su aplicación. En este artículo, analizaremos en detalle cómo instalar la biblioteca, crear los tipos principales de métricas (counter, gauge, histogram) y exportarlas a través de HTTP.



1. Instalación de la biblioteca



Para trabajar con Prometheus en Go, es necesario instalar el paquete prometheus/client_golang. Ejecute el comando:



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


El primer paquete contiene los tipos principales de métricas, el segundo contiene el manejador HTTP para exportar métricas en el formato que entiende el servidor Prometheus.



2. Tipos principales de métricas



Prometheus admite cuatro tipos principales de métricas. Veamos los tres más populares:



  • Counter — un contador que solo aumenta (por ejemplo, el número de solicitudes).
  • Gauge — un valor que puede tanto aumentar como disminuir (por ejemplo, el número de conexiones activas).
  • Histogram — un histograma que mide la distribución de valores (por ejemplo, el tiempo de respuesta).


3. Ejemplo: Counter (contador de solicitudes)



Creemos un servidor HTTP simple que cuente el número de solicitudes procesadas:



package main

import ( "fmt" "net/http" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp")

var ( requestsTotal = prometheus.NewCounter( prometheus.CounterOpts{ Name: "http_requests_total", Help: "Total number of HTTP requests.", }, ))

func init() { prometheus.MustRegister(requestsTotal)}

func handler(w http.ResponseWriter, r *http.Request) { requestsTotal.Inc() fmt.Fprintf(w, "Hello, you are visitor #%d", requestsTotal)}

func main() { http.HandleFunc("/", handler) http.Handle("/metrics", promhttp.Handler()) http.ListenAndServe(":8080", nil)}


En este ejemplo:

  • prometheus.NewCounter crea un contador con el nombre http_requests_total.
  • prometheus.MustRegister registra la métrica en el registro global.
  • requestsTotal.Inc() incrementa el contador en 1 en cada solicitud.
  • promhttp.Handler() exporta todas las métricas registradas en la ruta /metrics.


4. Ejemplo: Gauge (conexiones activas)



Gauge es ideal para rastrear el estado actual, por ejemplo, el número de gorutinas activas:



var (    activeGoroutines = prometheus.NewGauge(        prometheus.GaugeOpts{            Name: "active_goroutines",            Help: "Current number of active goroutines.",        },    ))

func monitorGoroutines() { for { activeGoroutines.Set(float64(runtime.NumGoroutine())) time.Sleep(5 * time.Second) }}

func main() { prometheus.MustRegister(activeGoroutines) go monitorGoroutines() // ... resto del código}


Aquí, Set() establece el valor actual, mientras que Inc() y Dec() permiten aumentar o disminuir el gauge en uno.



5. Ejemplo: Histogram (tiempo de respuesta)



Histogram recopila observaciones y las distribuye en segmentos (buckets) configurables:



var (    requestDuration = prometheus.NewHistogram(        prometheus.HistogramOpts{            Name:    "http_request_duration_seconds",            Help:    "Histogr                    

Recommendations