Monitoramento de aplicações Go: métricas e alertas de A a Z
\n\nNo desenvolvimento de software moderno, o monitoramento não é um luxo, mas uma necessidade. Para aplicações em Go (Golang), que são frequentemente usadas em microsserviços de alta carga e projetos de infraestrutura, um monitoramento bem configurado permite detectar problemas a tempo, otimizar o desempenho e garantir uma operação estável. Neste artigo, vamos abordar como configurar o monitoramento de aplicações Go do zero: desde a coleta de métricas básicas até a configuração de alertas e visualização no Grafana.
\n\nPor que o monitoramento é importante para aplicações Go?
\n\nGo é uma linguagem compilada com suporte nativo a concorrência. Aplicações em Go frequentemente operam em sistemas críticos: desde gateways de API até bancos de dados. Sem monitoramento, você corre o risco de:
\n- \n
- Perder um vazamento de memória ou goroutines \n
- Não perceber a degradação do desempenho \n
- Perder dados devido a erros não tratados \n
- Ter indisponibilidade por falta de recursos \n
O monitoramento adequado fornece uma visão completa da saúde da aplicação: desde o uso de CPU e memória até o tempo de resposta e a taxa de erros.
\n\nMétricas principais para monitoramento de Go
\n\nAntes de passarmos para as ferramentas, vamos definir quais métricas são críticas para aplicações Go:
\n\nMétricas do sistema
\n- \n
- CPU usage — uso da CPU \n
- Memory usage — consumo de memória (incluindo heap e stack) \n
- Goroutines count — número de goroutines ativas \n
- GC stats — estatísticas do coletor de lixo (tempo, número de ciclos) \n
- Open file descriptors — número de descritores de arquivo abertos \n
Métricas de negócio
\n- \n
- Request latency — tempo de resposta (p50, p95, p99) \n
- Request rate — número de requisições por segundo \n
- Error rate — percentual de erros \n
- Database connection pool — estado do pool de conexões \n
Ferramentas para monitoramento de Go
\n\nA stack padrão para monitoramento de aplicações Go inclui:
\n- \n
- Prometheus — sistema de coleta e armazenamento de métricas \n
- Grafana — visualização e dashboards \n
- Alertmanager — gerenciamento de alertas \n
- Bibliotecas cliente Go — para exportação de métricas \n
Configuração da coleta de métricas em Go com Prometheus
\n\nVamos começar com a prática. Para exportar métricas de uma aplicação Go, usaremos a biblioteca oficial prometheus/client_golang.
Passo 1: Instalação das dependências
\ngo get github.com/prometheus/client_golang/prometheus\ngo get github.com/prometheus/client_golang/prometheus/promhttp\n\nPasso 2: Servidor HTTP básico com métricas
\n\npackage 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 httpRequestsTotal = prometheus.NewCounterVec(\n prometheus.CounterOpts{\n Name: "http_requests_total",\n Help: "Total number of HTTP requests",\n },\n []string{"method", "endpoint", "status"},\n )\n\n httpRequestDuration = prometheus.NewHistogramVec(\n prometheus.HistogramOpts{\n Name: "http_request_duration_seconds",\n Help: "Histogram of HTTP request durations",\n Buckets: prometheus.DefBuckets,\n },\n []string{"method", "endpoint"},\n )\n)\n\nfunc init() {\n prometheus.MustRegister(httpRequestsTotal)\n prometheus.MustRegister(httpRequestDuration)\n}\n\nfunc main() {\n http.Handle("/metrics", promhttp.Handler())\n \n http.HandleFunc("/api/users", func(w http.ResponseWrit