Saltar al contenido principal

Logs y Trazas

Swisblade provee observabilidad integrada para cada proyecto. Los logs y trazas distribuidas se recopilan automaticamente, sin necesidad de cambios en el codigo.

Logs

Recopilacion automatica

El stdout/stderr de cada contenedor se captura y almacena automaticamente. No necesitas configurar una libreria de logging ni un sistema de reenvio de logs.

Ver logs

Ve a Proyecto -> Logs en el dashboard para ver:

  • Streaming de logs en tiempo real para contenedores en ejecucion
  • Logs historicos filtrables por servicio
  • Logs de despliegue con salida de compilacion

Formato de logs

Los logs de tu aplicacion se capturan tal cual. Para mejores resultados, usa logging estructurado (JSON):

console.log(JSON.stringify({
level: "info",
message: "Order created",
orderId: "12345",
userId: "user-789"
}));

Los logs estructurados son mas faciles de buscar y filtrar en el dashboard.

Trazas distribuidas

Que son las trazas?

Una traza sigue una peticion individual mientras fluye a traves de tus servicios. Por ejemplo, una peticion a la API que consulta una base de datos y publica un mensaje en una cola crea una traza con tres spans:

API (150ms)
├── PostgreSQL query (12ms)
└── RabbitMQ publish (3ms)

Instrumentacion automatica

Swisblade inyecta instrumentacion OpenTelemetry en tu aplicacion automaticamente segun el campo runtime:

RuntimeQue se rastrea
nodePeticiones HTTP, consultas a base de datos, comandos Redis, operaciones de cola de mensajes
pythonPeticiones HTTP, consultas a base de datos, comandos Redis, operaciones de cola de mensajes
javaPeticiones HTTP, JDBC, Redis, mensajeria

No se necesitan cambios en el codigo ni dependencias adicionales. La instrumentacion se ejecuta como sidecar e intercepta las llamadas de librerias estandar.

Ver trazas

Ve a Proyecto -> Trazas en el dashboard para ver:

  • Lista de trazas recientes con duracion y estado
  • Vista de cascada mostrando la linea de tiempo de los spans
  • Detalles del span (metodo HTTP, codigo de estado, sentencia de base de datos, etc.)
  • Trazas con errores resaltadas en rojo

Contexto de trazas

Las trazas estan limitadas a tu proyecto. Cada traza lleva el slug de tu proyecto como parte del nombre del servicio:

{project-slug}/{service-name}

Esto asegura que las trazas de diferentes proyectos nunca se mezclen.

Retencion

DatosPeriodo de retencion
Logs24 horas
Trazas24 horas

Los logs y trazas con mas de 24 horas se eliminan automaticamente.

nota

Los periodos de retencion podrian aumentar con planes de pago en el futuro.

Buenas practicas

Logging estructurado

Usa logs JSON con campos consistentes:

import json, logging

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

# Good: structured
logger.info(json.dumps({"event": "user_signup", "user_id": "123"}))

# Bad: unstructured
logger.info(f"User 123 signed up")

Nombres de servicio descriptivos

Elige nombres de servicio descriptivos en stack.json. Estos aparecen en las trazas y logs:

"services": {
"api-gateway": { ... }, // ✓ Claro
"payment-worker": { ... }, // ✓ Claro
"svc1": { ... } // ✗ No es util
}

Manejo de errores

Las trazas capturan automaticamente excepciones y codigos de estado de error. Retorna codigos de estado HTTP apropiados desde tu API para que los errores sean visibles en la vista de trazas:

// Returns a trace span with status: ERROR
app.get("/order/:id", (req, res) => {
const order = db.find(req.params.id);
if (!order) return res.status(404).json({ error: "Not found" });
res.json(order);
});