Objetivo
Tornar o sistema construído ao longo do módulo 6 observável em produção: capaz de responder, em segundos, perguntas operacionais como "qual endpoint está mais lento?", "essa requisição passou por quais serviços?" e "o erro de agora bate com o pico de latência da última hora?".
Pontos-chave
- Monitoring × Observability: monitoring responde perguntas conhecidas; observability deixa fazer perguntas novas em produção sem deploy.
- 3 pilares: logs (o que aconteceu), métricas (quanto/com que frequência), traces (por onde a requisição passou).
- Logs estruturados em JSON: Serilog em .NET com
JsonFormattere enriquecimento deTraceId,UserId,MachineName. - Métricas RED + USE: RED (Rate, Errors, Duration) para serviços; USE (Utilization, Saturation, Errors) para recursos.
- Distributed tracing: OpenTelemetry,
ActivitySource, propagation via headertraceparent(W3C Trace Context). - SLO/SLI/Error budget: alerta de sintoma (afeta usuário), não de causa; quando o budget queima, congela feature e foca em estabilidade.
- Custo: cardinality explosion, sampling de traces (head/tail-based), retenção em camadas (hot 7d / warm 30d / cold 1y).
Stack canônica usada na aula
- Logs:
Serilog.AspNetCore+Serilog.Formatting.Json - Métricas:
System.Diagnostics.Metrics+OpenTelemetry.Exporter.Prometheus.AspNetCore - Traces:
OpenTelemetry.Trace+OpenTelemetry.Exporter.Jaeger - Visualização: Prometheus + Grafana (métricas) · Jaeger / Tempo (traces) · Loki / ELK (logs)
Atividade prática (em sala — 90 min, em grupo)
- Habilitar Serilog (ou equivalente) com saída JSON estruturada na API .NET do projeto.
- Adicionar 3 métricas custom com OpenTelemetry: chamadas/seg, latência p95, taxa de erro.
- Adicionar 1 trace com 3 spans em um endpoint do Recommendation Service.
- Documentar em
docs/observability.md: como rodar local, prints dos logs/métricas/traces e a lista de alertas que fariam sentido para o MVP.
Entrega: Merge Request no repositório do grupo, com prints anexados.
⭐ Excelência: subir um stack local (docker-compose com Prometheus + Grafana + Jaeger) e exportar 1 dashboard JSON com as 3 métricas RED.
Atenção: esta aula não tem ponderada. A atividade é prática boa em sala; serve para fechar o módulo com o sistema observável.
Bibliografia
- Observability Engineering — Charity Majors, Liz Fong-Jones, George Miranda · O'Reilly, 2022
- Google SRE Book — capítulo de Service Level Objectives
- OpenTelemetry · Documentação oficial
- Serilog · structured logging para .NET
- charity.wtf — Charity Majors blog
- W3C Trace Context · especificação do header
traceparent
Encerramento desta etapa
Esta é a última aula desta etapa do módulo 6 — o módulo continua com outro professor. Em 10 encontros saímos da matemática da filtragem colaborativa (aulas 1–2), passamos por SOA e RNF (aula 3), banco e procedures (aulas 4–5), mobile e MVVM (aula 6), POO + TDD e testes de integração (aulas 7–8), cloud (aula 9) e fechamos com observabilidade (aula 10). O recomendador saiu da matemática e virou produto observável em produção. Próxima parada: Sprint Review do parceiro Aventura — tudo o que foi construído precisa virar uma demo de 5 minutos.