Estiaje junta tus logs y tus eventos de negocio en un mismo río, cose el linaje solo, y te avisa de los procesos que se quedaron a la mitad — sin una sola alerta que configurar.
El SDK ya está publicado y es real: npm i @estiaje/sdk · cero dependencias · 32 kB
Tres verbos. Eso es toda la API.
const estiaje = estiajeFromEnv({ service: 'mi-api' }); estiaje.log('db.query', { ms: 42 }); estiaje.event('order.created', { sucursal: 'polanco' }); estiaje.outcome('order.completed', { monto: 1250 });
Y con eso ya puedes declarar lo que esperas:
// "todo pedido creado debe terminar completado // dentro de los 30 minutos siguientes" { "when": "order.created", "expects": "order.completed", "match_by": "attrs.order_id", "window_min": 30 }
Los que no cierran, te los avisa Estiaje. Tu código no cambia.
El problema
Un cliente escribe que su venta del jueves pasado nunca se reflejó.
Abres los logs. No hay ningún error. Ninguna alerta sonó. El dashboard estuvo verde toda la semana.
El proceso simplemente no terminó — y nadie se enteró en cinco días.
Tu monitoreo está entrenado para detectar lo que grita: excepciones, 500s, latencia. Nada de eso pasó. La petición respondió 200, el log dice "ok", y el evento que debía llegar después… no llegó.
No es un problema de tu stack. Es que ninguna herramienta de observabilidad sabe qué se supone que debía pasar después — porque nunca se lo dijiste.
Los logs en un lado, las métricas en otro, y lo que de verdad importa —si la venta se procesó— en una consulta a la base que alguien corre a mano cuando ya se quejó el cliente.
El front dice que tardó ocho segundos. La API dice que respondió en 300 ms. Los dos tienen razón, y el pedazo que falta está en una cola que nadie está mirando.
Instrumentaste con el SDK de alguien. Subieron el precio y migrar significa tocar cada archivo donde escribiste una línea de telemetría.
Cómo funciona
Sin cronómetros en tu código, sin flujos que registrar, sin alertas que afinar.
Tus logs de siempre, más una línea cuando algo del negocio ocurre.
log para lo que pasó, event para lo que le importa
a la operación, outcome para lo que termina un proceso.
En un archivo, no en el código: "todo A debe tener su B en N minutos, emparejados por esta llave". Lo escribe quien conoce la operación, no quien escribe el endpoint.
Lo que se cumplió, se cierra solo. Lo que falló y lo dijo, se cuenta aparte. Y lo único que se anuncia es lo que se quedó callado — que es exactamente lo que hoy nadie te dice.
Lo declaras una vez, al arrancar el servicio. A partir de ahí todo lo que se emita en ese request lleva el mismo identificador — sin que ningún caso de uso lo escriba.
estiajeFromEnv({ service: 'mi-api', context: () => ({ trace_id: hiloActual(), entity: 'sucursal:polanco', }), })
La declaración dura años; el destino es configuración. Manda a Estiaje, a la consola, o a cualquier backend OTLP —Sentry, Datadog, Grafana— o a los cuatro a la vez.
# sin tocar una línea de código
ESTIAJE_SINKS=estiaje,console,otlp
Cada destino con su propia cola: si uno se cae, los demás siguen.
El viaje completo
El vendedor toca "guardar" en su teléfono. Eso cruza el front, tu API, una cola, una lambda y termina —o no— en una venta procesada.
Hoy cada servicio escribe su propio log, con su propio formato, en su propio lado.
Nada los relaciona. Cuando el cliente reclama, alguien abre cinco pestañas y
compara horas a mano.
Con Estiaje el identificador del request se hereda de un servicio al siguiente —
del navegador a la API, de la API al mensaje de la cola, del mensaje a la lambda.
Nadie lo escribe: viaja pegado. Y como los cinco terminan escribiendo el mismo,
la historia completa se arma sola en una sola pantalla.
El navegador manda su traceparent (el estándar del W3C). Tu API lo
recibe y lo hereda a todo lo que emite, y lo mete en el mensaje que encola.
La lambda lo saca de ahí. Ninguno de los cinco servicios sabe de los otros —
y aun así todos escriben el mismo identificador.
No es un diagrama bonito: cada tramo mide lo que de verdad tardó. El hueco grande salta a la vista sin que nadie lo busque.
Un viaje que se corta a la mitad no produce ningún error. Por eso las expectativas: lo que se quedó sin cerrar se anuncia solo.
Cómo lo ves
Dos pantallas resuelven casi todo: quién está lento y a dónde se fue el tiempo. Los datos de abajo son reales — salieron de instrumentar una API en producción.
Así apareció el primer hallazgo real, el mismo día que se conectó: un caso de uso del panel con 1,330 ms de p95 — más del triple que el siguiente. Nunca fallaba: solo era lento, y por eso nadie lo había visto.
trace_id · dónde se fue el tiempo
Cada barra es un paso; su ancho es lo que tardó. El tramo ámbar es la espera más larga, marcada sola. Ahí es donde se depura: no en el servicio que respondió rápido, sino en el hueco entre dos.
Ningún panel del mundo tiene una barra para "el pedido que nunca se completó". Estiaje la calcula sola y te la pone enfrente.
AND-8821 · sin completar hace 47 minAND-8834 · sin completar hace 31 minT-2290 · sin cerrar hace 6 hLo que nos hace distintos
Nadie mira un dashboard todo el día. Pero una pantalla que respira la dejas
abierta en el segundo monitor — y te enteras de que algo cambió antes de que suene
ninguna alarma. Las tres se alimentan del mismo río.
Pruébalas ahora con datos de demostración → Sube el caudal, provoca una tormenta y toca cualquier evento para ver su traza completa.
Cámara en primera persona: los eventos vienen desde el fondo hacia ti y pasan de largo. El caudal crece con tu tráfico y se vuelve tormenta cuando suben los errores.
Un carril por servicio y los eventos saltando de uno a otro, de derecha a izquierda. Se ve por dónde pasa el trabajo de verdad — no por dónde dice el diagrama que debería pasar.
El ecosistema entero: el río en el cauce, el pasto de luz, los árboles de savia y las luciérnagas. Si el sistema está sano, el hábitat florece; si se seca, se nota antes de mirar un número.
Pruebas, no promesas
No vas a encontrar aquí logos de empresas ni testimonios. Lo que sí puedes hacer es instalar el SDK ahora mismo y leerlo entero — son 18 kB de JavaScript.
Nada entra a tu node_modules. Un SDK de telemetría no debería
traer un árbol de paquetes que auditar.
El SDK jamás lanza y jamás bloquea. Si Estiaje está caído, tu código ni se entera. No necesitas envolverlo en try/catch.
Para cambiar de proveedor de logs. La declaración se queda; el destino es una variable de entorno.
Estiaje nació conectándose a una API en producción de una operación de campo real: pedidos, cobros, sincronizaciones nocturnas. No es un proyecto de fin de semana con datos de mentira.
El primer hallazgo real apareció el mismo día: un caso de uso del panel con p95 de 1,330 ms que nadie había notado porque nunca fallaba — solo era lento.
La frontera entre inquilinos sale siempre de la credencial, nunca del payload — la misma condición que encabeza el índice, así que seguridad y velocidad se resuelven con la misma línea. La cuota se cobra antes de leer el cuerpo. El ruido se borra; el negocio se queda. Nada de eso se puede agregar después.
Honestidad
Prefiero que no entres a la lista a que entres esperando otra cosa.
Precios
Todavía no cobro nada — Estiaje no está abierto. Esto es lo que estoy pensando, y si entras a la lista te pregunto antes de fijarlos.
Un plan fijo al mes, sin sorpresas en la factura. Si necesitas factura fiscal —en México o en cualquier país— la pides y se emite.
Acceso anticipado
Estoy midiendo si esto le importa a alguien más antes de montar la infraestructura. Si te interesa, decírmelo es la señal que necesito.
Listo — te aviso en cuanto abra. Gracias.
Sin spam, sin boletín. Un solo correo el día que Estiaje esté arriba.