Identificação
Resumo
A aula 10 fecha o módulo trazendo o tema de observabilidade: o sistema construído ao longo de 9 aulas precisa, agora, conseguir se explicar em produção. Estudamos a diferença entre monitoring (saber o que perguntar) e observability (descobrir a pergunta certa quando a falha é nova) e detalhamos os 3 pilares: logs estruturados, métricas (RED + USE) e traces distribuídos.
A prática é em grupo: ligar Serilog com saída JSON na API .NET, expor 3 métricas custom via OpenTelemetry e instrumentar 1 endpoint do Recommendation Service com 1 trace de 3 spans. Documentamos tudo em docs/observability.md e abrimos um Merge Request por equipe. Não há ponderada — a tarde é fechada com a retrospectiva do módulo.
Objetivos de aprendizagem
- OA-1Distinguir monitoring de observability e justificar por que arquiteturas SOA exigem observability.
- OA-2Explicar os 3 pilares (logs, métricas, traces), citando granularidade, custo e uso típico de cada um.
- OA-3Implementar logs estruturados em JSON com Serilog, incluindo enriquecimento com TraceId e MachineName.
- OA-4Implementar métricas custom RED (Rate, Errors, Duration) usando OpenTelemetry no Recommendation Service.
- OA-5Instrumentar um endpoint com trace distribuído de pelo menos 3 spans, usando
ActivitySource. - OA-6Definir SLO/SLI realistas para o MVP e listar pelo menos 3 alertas de sintoma (não de causa).
Pré-requisitos
- Aulas 1–9 concluídas: Recommendation Service rodando como serviço SOA na nuvem (aula 9).
- API .NET com endpoints de recomendação funcionando localmente.
- Acesso ao repositório do grupo com permissão de criar branch e abrir MR.
- Docker Desktop instalado (necessário para a Excelência ⭐).
Cronograma do dia
📚 Bloco 1 · Autoestudo
10h00 — 12h00Estudo individual orientado pelo material da aula 10.
- Leitura completa do Material da Aula 10.
- Listar 3 perguntas operacionais que hoje o MVP do grupo não consegue responder em 1 minuto.
- Ler o capítulo de SLO do Google SRE Book e anotar a definição de error budget em uma frase própria.
- Caderno de bordo: dúvidas concretas sobre instrumentação em .NET.
📚 Leituras sugeridas:
- Observability Engineering — Charity Majors, Liz Fong-Jones, George Miranda
- Google SRE Book — capítulo de SLO
- OpenTelemetry · Documentação oficial
- Serilog · structured logging para .NET
- charity.wtf — Charity Majors blog
- W3C Trace Context — spec do header
traceparent
🎓 Bloco 2 · Instrução PE — Aula em metodologia ativa
14h00 — 16h00Encontro síncrono com o professor especialista. Última aula do módulo.
- 14h00 — 14h15 · Daily.
- 14h15 — 14h55 · Teoria de observabilidade · 3 pilares · stack canônica.
- 14h55 — 16h00 · Atividade prática em sala (1h05) · grupo no repositório do projeto.
🍴 Intervalo · Almoço
12h00 — 14h00Janela livre.
🛠️ Bloco 3 · Continuidade da prática + Retrospectiva do módulo
16h00 — 18h00Janela final do módulo.
- 16h00 — 17h00 · Continuidade da atividade prática · merge dos MRs · ⭐ Excelência (stack
docker-composecom Prometheus + Grafana + Jaeger). - 17h00 — 18h00 · Retrospectiva do módulo 6: o que funcionou nas 10 aulas, o que ficou de débito técnico, o que cada aluno leva para a Sprint Review do parceiro Aventura.
Detalhamento da instrução PE (14h00 — 16h00)
14h15
DailyDaily de abertura · último da trilha
Cada aluno em 1 minuto: 1 incidente que vivi (no projeto ou em estágio) / 1 métrica que sinto falta no MVP / o que tem hoje no projeto pra debugar?. A equipe que mais sofreu no módulo abre.
14h25
TalkMonitoring × Observability
Exposição (10 min) sobre a diferença entre monitoring (perguntas conhecidas) e observability (qualquer pergunta, sem deploy). Exemplo motivador: bug novo em SOA. Citação do livro Observability Engineering (Charity Majors).
14h40
TalkOs 3 pilares · Logs · Métricas · Traces
Tabela comparativa (granularidade, custo, retenção, uso típico). Logs estruturados em JSON com Serilog · Métricas RED+USE com OpenTelemetry · Distributed tracing com OTel + Jaeger.
14h55
TalkDashboards, alertas e custo
SLO/SLI/error budget · alerta de sintoma vs. causa · cardinality explosion · sampling de traces · retenção em camadas (hot 7d / warm 30d / cold 1y) · header W3C traceparent e correlação log×métrica×trace.
15h05
AtivaBriefing da atividade prática
Apresentação dos 4 critérios da prática (Serilog JSON · 3 métricas RED via OTel · 1 trace de 3 spans · docs/observability.md com prints) e da Excelência ⭐ (docker-compose com Prom + Grafana + Jaeger). Cada grupo divide tarefas entre devs em paralelo.
15h55
CodingAtividade prática em grupo
Trabalho síncrono no repositório do projeto. Cada dev pega 1 dos 3 pilares. O professor circula entre as mesas atendendo dúvidas pontuais. Branch feat/observability, MR aberto antes do fim.
16h00
AtivaSíntese · "a aula 10 me ensinou que..."
Cada aluno escreve em uma frase o que leva da aula. Anuncia-se a continuidade às 16h e a retrospectiva do módulo às 17h.
Estratégias de metodologia ativa
- Observabilidade aplicada ao próprio MVP — em vez de exemplo abstrato, o grupo instrumenta o Recommendation Service que vem construindo desde a aula 1. O sistema vira o laboratório.
- Divisão por pilar dentro do grupo — cada dev pega 1 dos 3 pilares (logs, métricas ou trace). Trabalho paralelo + integração no MR força a comunicação entre as instrumentações.
- Retrospectiva com lente de produção — o fechamento do módulo acontece com o sistema observável: durante a retrô o grupo já consegue ver o próprio MVP em 3 dimensões, o que muda o tom da reflexão.
Sistema sem observabilidade não é produto — é maquete. A diferença entre rodar e funcionar em produção é poder responder uma pergunta nova em segundos, sem deploy.
Recursos e ferramentas
| Categoria | Recurso | Uso |
|---|---|---|
| Slides | slides/slide-lesson-10.html | Exposição na instrução PE |
| Material | materials/lesson-10-material.html | Autoestudo |
| Linguagem | C# / .NET 8 | API e Recommendation Service |
| Logs | Serilog.AspNetCore + JsonFormatter | Logs estruturados em JSON |
| Métricas | System.Diagnostics.Metrics + OpenTelemetry.Exporter.Prometheus.AspNetCore | Métricas RED custom |
| Traces | OpenTelemetry.Trace + OpenTelemetry.Exporter.Jaeger | Distributed tracing |
| Stack ⭐ | docker-compose · Prometheus · Grafana · Jaeger | Visualização local (Excelência) |
| Documento | docs/observability.md | Como rodar local + prints + alertas |
Verificação de aprendizagem
Esta aula não tem atividade ponderada. A verificação é feita pela qualidade do MR de grupo e pela participação na retrospectiva.
- CR-1Habilitou Serilog com saída JSON estruturada na API .NET, com TraceId e MachineName enriquecidos.
- CR-2Adicionou pelo menos 3 métricas custom (RED) via OpenTelemetry em pelo menos 1 endpoint.
- CR-3Instrumentou 1 endpoint do Recommendation Service com 1 trace de 3 spans com tags úteis.
- CR-4Documentou
docs/observability.mdcom prints (1 de log, 1 de métrica, 1 de waterfall) e 3–5 alertas de sintoma sugeridos para o MVP. - CR-5Abriu Merge Request
feat/observabilityno repositório do grupo antes das 17h00. - CR-⭐(Excelência) Subiu stack local com
docker-compose(Prometheus + Grafana + Jaeger) e exportou 1 dashboard JSON.
Grupo que sair às 18h sem ao menos logs JSON + 1 métrica + 1 trace mergeados no repositório do projeto está em débito técnico para a Sprint Review do parceiro Aventura.
Conexão com o módulo 7 / próxima sprint avaliativa
O módulo 6 termina aqui. Próxima parada: Sprint Review final do parceiro Aventura. Tudo o que foi construído em 10 aulas — da matemática da filtragem colaborativa (aulas 1–2) à arquitetura SOA (aulas 3, 9), passando por banco (aulas 4–5), mobile (aula 6), POO + TDD (aulas 7–8) e observabilidade (aula 10) — precisa virar uma demo de 5 minutos que conta uma história completa.
- O Recommendation Service de hoje é o coração do que será apresentado.
- Os logs, métricas e traces que vocês ligaram nesta aula tornam a demo robusta: dá para mostrar o sistema funcionando e mostrar como ele se comporta sob carga.
- No módulo 7 (próximo trimestre) o foco sai do produto único e passa para integração entre múltiplos serviços — observabilidade vai ser pré-requisito, não diferencial.
O recomendador saiu da matemática e virou produto observável em produção. Saímos do "isso roda?" e chegamos no "isso aguenta?". Boa Sprint final — façam a demo curta, façam a demo honesta.