Les événements de sécurité peuvent contenir routes, identités, IP et règles. Traitez-les comme des données sensibles.
Redaction
{
"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
{
"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
npm install @opentelemetry/api{
"observability": {
"otel": {
"enabled": true,
"serviceName": "orders-api",
"emitAllowedRequests": false
}
}
}Dhal utilise le provider OpenTelemetry de l’application hôte.
Webhooks signés
{
"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
const snapshot = protection.getRuntimeSnapshot();Surveillez blocked, wouldBlock, internalErrors, overBudget, les erreurs de listeners et les livraisons en attente, échouées ou abandonnées.
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.