SDKs
SDK Python
Instrumentação backend para serviços Python
import os
from obtrace_sdk import ObtraceClient, ObtraceConfig
client = ObtraceClient(
ObtraceConfig(
api_key=os.getenv("OBTRACE_API_KEY"),
tenant_id=os.getenv("OBTRACE_TENANT_ID"),
project_id=os.getenv("OBTRACE_PROJECT_ID"),
app_id="checkout-api",
service_name="checkout-api",
service_version=os.getenv("OBTRACE_SERVICE_VERSION", "2026.03.10"),
env=os.getenv("OBTRACE_ENV", "prod"),
validate_semantic_metrics=True,
debug=os.getenv("OBTRACE_DEBUG") == "1",
)
)
O SDK Python envia para:
POST /otlp/v1/logs
POST /otlp/v1/traces
POST /otlp/v1/metrics
Defina no ObtraceConfig:
service_name
env
service_version
tenant_id
project_id
app_id
Adicione region como atributo do evento quando a topologia importar:
runtime_attrs = {
"cloud.region": os.getenv("AWS_REGION", "us-east-1"),
"deployment.ring": "stable",
}
from obtrace_sdk import SemanticMetrics
client.log("info", "service.started")
client.metric(SemanticMetrics.RUNTIME_CPU_UTILIZATION, 0.42)
client.span(
"checkout.authorize",
attrs={
"feature.name": "checkout",
"db.system": "postgresql",
"cloud.region": runtime_attrs["cloud.region"],
},
)
client.flush()
from fastapi import FastAPI
from obtrace_sdk.http import fastapi_middleware
app = FastAPI()
app.middleware("http")(fastapi_middleware(client))
@app.get("/healthz")
async def healthz():
client.log("info", "healthz.request")
return {"ok": True}
- o mesmo
service, env e version aparece entre restarts
- um caminho real de request emite log e trace
- não existe
401/403 na submissao OTLP
cloud.region aparece quando o serviço é multi-região
- Guarde chaves em secret manager.
- Configure fila limitada e retry.
- Valide volume e erro após deploy.
401/403: chave inválida ou tenant/projeto incorreto.
- Sem dados: SDK não inicializado no startup.
- Perda de eventos: saturação de fila ou crash de worker.