Sabes cuándo algo falla.
No sabes cuándo algo nunca terminó.

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 error te despierta. El silencio no hace ruido.

Martes, 11:40 p.m.

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.

01

La historia está partida en tres

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.

02

"Se tardó" — pero ¿dónde?

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.

03

Y encima estás amarrado

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

Declaras lo que esperas. Estiaje vigila el resto.

Sin cronómetros en tu código, sin flujos que registrar, sin alertas que afinar.

1

Emite lo que ya emites

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.

2

Declara la expectativa una vez

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.

3

Entérate del silencio

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.

El identificador se hereda solo

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',
  }),
})

Ver el viaje completo, de punta a punta →

No te casas con nadie — ni con nosotros

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

Un clic. Cinco servicios. Un solo identificador que se hereda.

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 vendedor tocó guardar. Sigue el hilo.

No los unes tú: se heredan

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.

La distancia es el tiempo

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.

Y si el final no llega, te avisa

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

Y cuando algo va mal, esto es lo que abres

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.

Latencia p95 por caso de uso últimas 24 h · el más lento primero

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.

La cascada de un viaje un solo 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.

Y lo que ninguna gráfica te enseña: lo que falta

Ningún panel del mundo tiene una barra para "el pedido que nunca se completó". Estiaje la calcula sola y te la pone enfrente.

pedido AND-8821 · sin completar hace 47 min
pedido AND-8834 · sin completar hace 31 min
tarea T-2290 · sin cerrar hace 6 h

Lo que nos hace distintos

Un tablero te dice el número. Esto te da la sensación.

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.

Dentro del río

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.

El flujo entre servicios

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 hábitat

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

Todavía no tengo clientes. Tengo algo mejor: código que puedes verificar.

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.

npm i @estiaje/sdk ✓ publicado en npm MIT · sin dependencias · Node 18+ Ver en npmjs.com →
0 dependencias

Nada entra a tu node_modules. Un SDK de telemetría no debería traer un árbol de paquetes que auditar.

0 excepciones

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.

1 línea

Para cambiar de proveedor de logs. La declaración se queda; el destino es una variable de entorno.

Construido instrumentando producción, no un ejemplo

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.

Y las decisiones difíciles ya están tomadas

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

Cuándo no deberías usar Estiaje

Prefiero que no entres a la lista a que entres esperando otra cosa.

  • Si necesitas un APM completo con perfiles de CPU, flamegraphs y trazas distribuidas de mil servicios. Eso es Datadog, y es muy bueno en eso.
  • Si tu equipo ya vive feliz en su herramienta y el costo no te duele. Cambiar de observabilidad sin un dolor concreto no vale la molestia.
  • Si solo quieres logs bonitos con búsqueda. Eso ya lo tienes, y probablemente gratis. Estiaje empieza a valer cuando quieres saber qué no pasó.
  • Si tu producto no tiene procesos con principio y final. Sin expectativas que declarar, te queda un buen visor de logs — y hay muchos.

Precios

Así van a ser los 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

Déjame tu correo y te aviso cuando abra

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.