Monitoramento de aplicações Go: métricas e alertas em nível avançado

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

Monitoramento de aplicações Go: métricas e alertas em nível avançado

\n

As aplicações Go modernas exigem não apenas alto desempenho, mas também um monitoramento confiável. A coleta básica de métricas (CPU, memória, requisições) é apenas o primeiro passo. Em um nível avançado, é necessário implementar métricas personalizadas, configurar alertas com base na lógica de negócios e garantir a tolerância a falhas. Neste artigo, veremos como implementar um monitoramento abrangente de aplicações Go usando Prometheus, Grafana e alertas personalizados.

\n\n

1. Coleta avançada de métricas em Go com Prometheus

\n

A biblioteca prometheus/client_golang permite coletar não apenas métricas padrão, mas também métricas personalizadas. Vejamos um exemplo de configuração de um coletor de métricas personalizado para um servidor HTTP.

\n\n
package main\n\nimport (\n    "net/http"\n    "github.com/prometheus/client_golang/prometheus"\n    "github.com/prometheus/client_golang/prometheus/promhttp"\n)\n\nvar (\n    requestDuration = prometheus.NewHistogramVec(\n        prometheus.HistogramOpts{\n            Name:    "http_request_duration_seconds",\n            Help:    "Tempo de execução das requisições HTTP.",\n            Buckets: prometheus.DefBuckets,\n        },\n        []string{"method", "path", "status"},\n    )\n    activeRequests = prometheus.NewGauge(\n        prometheus.GaugeOpts{\n            Name: "http_active_requests_total",\n            Help: "Número atual de requisições ativas.",\n        },\n    )\n)\n\nfunc init() {\n    prometheus.MustRegister(requestDuration)\n    prometheus.MustRegister(activeRequests)\n}\n\nfunc metricsMiddleware(next http.Handler) http.Handler {\n    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n        activeRequests.Inc()\n        defer activeRequests.Dec()\n\n        timer := prometheus.NewTimer(prometheus.ObserverFunc(func(v float64) {\n            requestDuration.WithLabelValues(r.Method, r.URL.Path, "200").Observe(v)\n        }))\n        defer timer.ObserveDuration()\n\n        next.ServeHTTP(w, r)\n    })\n}\n\nfunc main() {\n    mux := http.NewServeMux()\n    mux.Handle("/metrics", promhttp.Handler())\n    mux.Handle("/api", metricsMiddleware(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n        w.Write([]byte("Hello, Go!"))\n    })))\n    http.ListenAndServe(":8080", mux)\n}
\n\n

Neste exemplo, criamos um histograma para a duração das requisições e um gauge para requisições ativas. O uso de labels (rótulos) permite detalhar as métricas por métodos, caminhos e status.

\n\n

2. Configuração de alertas com base na lógica de negócios

\n

Os alertas devem ser não apenas técnicos (alta carga de CPU), mas também de negócios. Por exemplo, exceder o tempo de resposta para um endpoint crítico ou uma queda no número de transações bem-sucedidas. Configuração de alertas no Prometheus (arquivo alerts.yml):

\n\n
groups:\n  - name: go_app_alerts\n    rules:\n      - alert: HighRequestLatency\n        expr: http_request_duration_seconds{job="go-app"} > 1.0\n        for: 5m\n        labels:\n          severity: critical\n        annotations:\n          summary: "Alta latência de requisição ({{ $value }}s)"\n          description: "O endpoint {{ $labels.path }} tem latência superior a 1 segundo por 5 minutos."\n\n      - alert: ActiveRequestsSurge\n        expr: http_active_requests_total{job="go-app"} > 100\n        for: 2m\n        labels:\n          severity: warning\n        annotations:\n          summary: "Pico de requisições ativas ({{ $value }})"\n          description: "O número de requisições ativas excedeu 100 em 2 minutos."\n\n      - alert: ErrorRateHigh\n        expr: rate(http_requests_total{status=~"5.."}[5m]) > 0.1\n        for: 10m\n        labels:\n          severity: critical\n        annotations:\n          summary: "Alta taxa de erros 5xx"\n          description: "A taxa de erros excede 10% nos últimos 10 minutos."
\n\n

Observe o uso

Blogs

Book Recommendations