Desafio 006: Investigue um Incidente de Observabilidade de Agente¶
Cenário¶
O agente de suporte da OutdoorGear teve um pico de latência e uma requisição falhou. Você recebe uma pequena exportação de traces com spans raiz do agente e spans filhos de ferramentas/LLM. O analisador atual calcula métricas sobre os spans errados e reporta a causa raiz errada.
Sua tarefa é corrigir o analisador para que um engenheiro de plantão identifique o trace com falha, a dependência causadora, a taxa de erro e a latência p95.
Objetivo¶
Corrija starter_observability.py para que ele resuma o incidente corretamente e gere um código de validação.
Seu analisador final deve:
- Isolar spans raiz de requisições do agente
- Calcular taxa de erro apenas sobre requisições raiz
- Calcular p95 por nearest-rank sobre requisições raiz
- Identificar o trace raiz com falha
- Atribuir causa raiz ao span de dependência com falha
Arquivos Iniciais¶
Salve estes arquivos em uma pasta chamada challenge-006/:
| Arquivo | Finalidade | Download |
|---|---|---|
traces.json |
Exportação mock de traces do agente | Download |
starter_observability.py |
Analisador de incidente quebrado | Download |
test_observability.py |
Testes de aceite | Download |
validate_observability.py |
Gera o código final de conclusão | Download |
Briefing do Desafio¶
Você recebe spans de trace e um analisador quebrado. Não há walkthrough: decida quais spans contam como requisições, como calcular métricas de SRE e como atribuir o incidente à dependência filha correta.
Restrições¶
- Use apenas a biblioteca padrão do Python em
starter_observability.py. - Não hardcode o dicionário final de resumo.
- Métricas devem ser calculadas a partir dos spans.
- Spans filhos podem explicar causa raiz, mas não devem inflar contagens de requisições.
Critérios de Aceite¶
Sua solução está completa quando:
python -m pytest test_observability.pypassa- As requisições raiz são
tr-001,tr-002,tr-003etr-004 - A taxa de erro é
25.0 - A latência p95 é
2200 - O trace do incidente é
tr-003 - A causa raiz é
inventory_api_timeout
Validação¶
Quando sua implementação estiver pronta, execute:
Digite o código de conclusão impresso por validate_observability.py:
Dicas¶
Dica 1 — Separe spans de requisição de spans filhos
Métricas de requisições raiz não devem contar cada ferramenta ou span de LLM.
Dica 2 — A causa raiz geralmente está abaixo da raiz
O span do agente diz que a requisição falhou; a dependência filha normalmente diz por quê.
Dica 3 — p95 tem uma definição
Use p95 por nearest-rank neste desafio.
Rubrica¶
| Área | Pontos | Como fica bom |
|---|---|---|
| Filtragem de spans | 25 | Requisições raiz do agente são isoladas corretamente |
| Métricas | 30 | Taxa de erro e p95 usam o denominador certo |
| Causa raiz | 25 | Falha de dependência é identificada corretamente |
| Resumo do incidente | 10 | Saída concisa e acionável |
| Simplicidade | 10 | Análise local determinística |