Rokad
Toda la documentación
Documentación de dhal

Observabilidad y ciclo de vida

Configura redacción, eventos, OpenTelemetry, webhooks firmados, salud y apagado.

Ver repositorio
Documentación de dhal
Página 7 de 9

Los eventos de seguridad pueden contener rutas, identidades, IP y reglas. Trátalos como datos sensibles.

Redacción

json
{
  "observability": {
    "redaction": {
      "enabled": true,
      "ip": "mask",
      "identity": "hash",
      "userAgent": "full"
    }
  }
}

Para IP e identidad están disponibles none, mask, hash y omit. El user agent puede ser full u omit.

Correlación, logs y eventos

json
{
  "observability": {
    "correlation": {
      "headers": ["x-request-id", "x-correlation-id", "traceparent"]
    },
    "logs": { "enabled": true, "format": "json" },
    "events": { "enabled": true }
  }
}

Los fallos de listeners de aplicación se aíslan de las decisiones y aparecen en el snapshot de ejecución.

OpenTelemetry

bash
npm install @opentelemetry/api
json
{
  "observability": {
    "otel": {
      "enabled": true,
      "serviceName": "orders-api",
      "emitAllowedRequests": false
    }
  }
}

Dhal utiliza el proveedor OpenTelemetry de la aplicación host.

Webhooks firmados

json
{
  "observability": {
    "webhooks": {
      "enabled": true,
      "urls": ["https://security.example.com/dhal/events"],
      "timeoutMs": 750,
      "emitAllowedRequests": false,
      "signing": {
        "enabled": true,
        "secretEnv": "DHAL_WEBHOOK_SECRET",
        "signatureHeader": "x-dhal-signature",
        "timestampHeader": "x-dhal-timestamp",
        "idHeader": "x-dhal-event-id"
      }
    }
  }
}

El receptor debe verificar timestamp, ID y firma HMAC, rechazar replays y responder 2xx solo tras aceptar el evento. Las colas son acotadas; las respuestas no 2xx cuentan como fallos.

Salud y apagado

ts
const snapshot = protection.getRuntimeSnapshot();

Monitoriza blocked, wouldBlock, internalErrors, overBudget, errores de listeners y entregas pendientes, fallidas o descartadas.

ts
async function shutdown() {
  await protection.close(5_000);
  process.exit(0);
}

flush() drena telemetría sin cerrar. close() impide nuevas inspecciones, drena telemetría y elimina listeners.