Noções Básicas de Observabilidade
10 exemplos para você começar com Observabilidade - 7 básicos e 3 intermediários.
Busque em todas as páginas da documentação
10 exemplos para você começar com Observabilidade - 7 básicos e 3 intermediários.
uv venv && source .venv/bin/activate
uv pip install "structlog>=24.0" "prometheus-client>=0.21" "opentelemetry-sdk>=1.29"Logs JSON são pesquisáveis em Loki, CloudWatch e ELK.
import json
import logging
logging.basicConfig(level=logging.INFO, format="%(message)s")
log = logging.getLogger("api")
log.info(json.dumps({"event": "order_created", "order_id": "ord_1", "ms": 42}))order_id) e não apenas strings de mensagemRelacionado: Logging Estruturado - configuração do structlog
Vincule linhas de log a uma única requisição HTTP.
import uuid
from contextvars import ContextVar
request_id: ContextVar[str] = ContextVar("request_id", default="-")
def set_request_id() -> str:
rid = str(uuid.uuid4())
request_id.set(rid)
return ridX-Request-ID do gateway ou gere na bordarequest_id em cada registro de log nessa requisiçãoRelacionado: Rastreamento Distribuído - IDs de trace
Conte eventos para dashboards de taxa e proporção de erros.
from prometheus_client import Counter
ORDERS_CREATED = Counter("orders_created_total", "Pedidos criados")
def create_order() -> None:
ORDERS_CREATED.inc()_total no nome é convenção do Prometheus/metrics para scrapingRelacionado: Métricas - histogramas e gauges
Meça quanto tempo as operações levam.
import time
start = time.perf_counter()
# ... trabalho ...
elapsed_ms = (time.perf_counter() - start) * 1000perf_counter é monotônico para duraçõesRelacionado: Monitoramento de Desempenho (APM) - SLOs de latência
Balanceadores de carga precisam de uma resposta OK barata.
from fastapi import FastAPI
app = FastAPI()
@app.get("/health/live")
def live():
return {"status": "ok"}Relacionado: Saúde e Prontidão - design de probes
Use níveis para separar sinal de ruído.
import logging
log = logging.getLogger("worker")
log.debug("detalhe para dev")
log.info("tarefa concluída")
log.warning("tentando novamente")
log.error("falhou permanentemente")Relacionado: Melhores Práticas de Observabilidade - regras de logging
Capture stack traces com contexto.
import logging
log = logging.getLogger("api")
try:
risky()
except Exception:
log.exception("pagamento falhou", extra={"order_id": "1"})log.exception inclui o traceback automaticamenteextra (o formatador JSON deve incluí-lo)Relacionado: Rastreamento de Erros - Sentry
Taxa, Erros, Duração por endpoint.
# Taxa: contador requests_total
# Erros: contador requests_failed_total
# Duração: histograma request_duration_secondsRelacionado: Métricas - buckets de histograma
Um ID de trace, múltiplos spans entre serviços.
[Span da API] -> [Span do DB] -> [Span de publicação SQS]
Relacionado: Rastreamento Distribuído - OpenTelemetry
Fluxo de incidente: alerta de métrica → logs com request_id → cascata de trace.
# 1. Alerta: taxa_erro > 1%
# 2. Consulta de log: request_id="abc" E level=ERROR
# 3. UI de Trace: trace_id do campo de logtrace_id, request_id) entre os pilaresRelacionado: Melhores Práticas de Observabilidade - higiene de plantão
Versões da Stack: Esta página foi escrita para Python 3.14.0 (estável 3.14, manutenção 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+ e uv 0.6+.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026