🧩 Exercícios: Observabilidade com Prometheus Metrics e Zap Logs
Spec Backend Com Golang E Gin • Trilha Progressiva em 4 Níveis
🎯 Nível 1: Fundamentos
Problema 17.1 — Logs Estruturados de Alto Desempenho com Uber Zap
Contexto: Logs Estruturados de Alto Desempenho com Uber Zap no contexto de Observabilidade com Prometheus Metrics e Zap Logs.
Requisitos de Execução:
- Configurar logger Zap em modo JSON com campos tipados
zap.Stringezap.Int.
Resultado Esperado
Log JSON estruturado emitido com timestamp e caller.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_17_1_SeuNome - Envie na tarefa:
Atividade Cap 17 - Observabilidade com Prometheus Metrics e Zap Logs
🔑 Gabarito de Código & Solução Comentada
// logger_zap.go
package main
import (
"go.uber.org/zap"
)
func CriarLoggerZap() *zap.Logger {
logger, _ := zap.NewProduction()
defer logger.Sync()
logger.Info("Servidor inicializado",
zap.String("versao", "1.0.0"),
zap.Int("porta", 8080),
)
return logger
}
🔍 Nível 2: Prática
Problema 17.2 — Exposição de Métricas Prometheus no Endpoint /metrics
Contexto: Exposição de Métricas Prometheus no Endpoint /metrics no contexto de Observabilidade com Prometheus Metrics e Zap Logs.
Requisitos de Execução:
- Registrar métricas
prometheus.NewCounterVeccontabilizando total de requisições por status code e expor em/metrics.
Resultado Esperado
GET /metrics -> Métricas do Prometheus expostas com formato padrão OpenMetrics.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_17_2_SeuNome - Envie na tarefa:
Atividade Cap 17 - Observabilidade com Prometheus Metrics e Zap Logs
🔑 Gabarito de Código & Solução Comentada
// metrics_prom.go
package main
import (
"github.com/gin-gonic/gin"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"
)
var reqCounter = prometheus.NewCounterVec(
prometheus.CounterOpts{Name: "http_requests_total", Help: "Total de requisições HTTP"},
[]string{"method", "status"},
)
func SetupPrometheus(r *gin.Engine) {
prometheus.MustRegister(reqCounter)
r.GET("/metrics", gin.WrapH(promhttp.Handler()))
}
⚡ Nível 3: Integração
Problema 17.3 — Histograma de Latência de Requisições HTTP
Contexto: Histograma de Latência de Requisições HTTP no contexto de Observabilidade com Prometheus Metrics e Zap Logs.
Requisitos de Execução:
- Medir tempo de resposta de cada endpoint com
prometheus.NewHistogramVecregistrando buckets de latência.
Resultado Esperado
Histograma de latência calculado por rota e método.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_17_3_SeuNome - Envie na tarefa:
Atividade Cap 17 - Observabilidade com Prometheus Metrics e Zap Logs
🔑 Gabarito de Código & Solução Comentada
// latency_histogram.go
package main
import "github.com/prometheus/client_golang/prometheus"
var LatencyHistogram = prometheus.NewHistogramVec(
prometheus.HistogramOpts{
Name: "http_request_duration_seconds",
Help: "Histograma de latência de requisições",
Buckets: []float64{0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5},
},
[]string{"path", "method"},
)
🏆 Nível 4: Desafio Corporativo
Problema 17.4 — Tracing Distribuído com OpenTelemetry (OTel)
Contexto: Tracing Distribuído com OpenTelemetry (OTel) no contexto de Observabilidade com Prometheus Metrics e Zap Logs.
Requisitos de Execução:
- Injetar trace span do OpenTelemetry no contexto Gin e propagar headers W3C Trace Context.
Resultado Esperado
Trace ID injetado e propagado em chamadas a microsserviços downstream.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_17_4_SeuNome - Envie na tarefa:
Atividade Cap 17 - Observabilidade com Prometheus Metrics e Zap Logs
🔑 Gabarito de Código & Solução Comentada
// otel_tracing.go
package main
import (
"context"
"go.opentelemetry.io/otel"
)
func CriarSpan(ctx context.Context, nome string) {
tr := otel.Tracer("gin-server")
_, span := tr.Start(ctx, nome)
defer span.End()
}