Métricas Prometheus em Go: criação e exportação de métricas em Golang

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Métricas Prometheus em Go (Golang): guia completo



Prometheus é um poderoso sistema de monitoramento e alerta de código aberto, que se tornou o padrão de facto no mundo das aplicações em nuvem. Para a linguagem Go (Golang), existe o cliente oficial prometheus/client_golang, que permite adicionar métricas facilmente à sua aplicação. Neste artigo, vamos detalhar como instalar a biblioteca, criar os principais tipos de métricas (counter, gauge, histogram) e exportá-las via HTTP.



1. Instalação da biblioteca



Para trabalhar com Prometheus em Go, é necessário instalar o pacote prometheus/client_golang. Execute o comando:



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


O primeiro pacote contém os tipos básicos de métricas, o segundo contém o manipulador HTTP para exportar métricas no formato compreendido pelo servidor Prometheus.



2. Principais tipos de métricas



Prometheus suporta quatro tipos principais de métricas. Vamos considerar os três mais populares:



  • Counter — um contador que apenas aumenta (por exemplo, número de requisições).
  • Gauge — um valor que pode tanto aumentar quanto diminuir (por exemplo, número de conexões ativas).
  • Histogram — um histograma que mede a distribuição de valores (por exemplo, tempo de resposta).


3. Exemplo: Counter (contador de requisições)



Vamos criar um servidor HTTP simples que conta o número de requisições processadas:



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)}


Neste exemplo:

  • prometheus.NewCounter cria um contador com o nome http_requests_total.
  • prometheus.MustRegister registra a métrica no registro global.
  • requestsTotal.Inc() incrementa o contador em 1 a cada requisição.
  • promhttp.Handler() exporta todas as métricas registradas no endpoint /metrics.


4. Exemplo: Gauge (conexões ativas)



Gauge é ideal para monitorar o estado atual, por exemplo, o número de goroutines ativas:



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() // ... código restante}


Aqui, Set() define o valor atual, enquanto Inc() e Dec() permitem aumentar ou diminuir o gauge em uma unidade.



5. Exemplo: Histogram (tempo de resposta)



Histogram coleta observações e as distribui em segmentos configuráveis (buckets):



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

Recommendations