Rokad
Toute la documentation
Documentation dhal

Observabilité et cycle de vie

Configurez la redaction, OpenTelemetry, les webhooks signés, la santé et l’arrêt.

Voir le dépôt
Documentation dhal
Page 7 sur 9

Les événements de sécurité peuvent contenir routes, identités, IP et règles. Traitez-les comme des données sensibles.

Redaction

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

Pour IP et identité : none, mask, hash ou omit. Le user agent peut être full ou omit.

Corrélation, logs et événements

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

Les erreurs des listeners applicatifs sont isolées des décisions et comptabilisées dans le snapshot.

OpenTelemetry

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

Dhal utilise le provider OpenTelemetry de l’application hôte.

Webhooks signés

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"
      }
    }
  }
}

Le récepteur doit vérifier timestamp, ID et signature HMAC, rejeter les replays et répondre 2xx seulement après acceptation. Les files sont bornées et les réponses non-2xx sont des échecs.

Santé et arrêt

ts
const snapshot = protection.getRuntimeSnapshot();

Surveillez blocked, wouldBlock, internalErrors, overBudget, les erreurs de listeners et les livraisons en attente, échouées ou abandonnées.

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

flush() vide la télémétrie sans fermer. close() interdit les nouvelles inspections, vide la télémétrie et retire les listeners.