Diagnostics SDK

What data is collected

A field-by-field inventory of what the SDK sends, what is masked, and what is never collected.

What data is collected

An inventory of everything the SDK can send, with its default state. "Masked" means the value passes the always-on secret-redaction pipeline before it is written to the local spool or the network.

Always collected (when enabled)

FieldSourceMasked
App name, version, build id, git commit, environmentenv vars, assembly metadatano
Exception type and stack tracethe exceptionno
Exception message, including the inner chainthe exceptionyes
Fingerprint (a hash, no payload data)computedno
OS type and description, host nameruntimeno
Process id, executable name, runtime version, uptime, bitnessruntimeno
Memory working set and heap statisticsruntimeno
Container id, Kubernetes pod and namespacecgroup and env, when presentno
Trace and span idActivity.Current (W3C), .NETno
Breadcrumbs (recent log events, Information/info and above)ILogger in .NET; pino/winston in Node.jsyes
HTTP URL and query, method, status, User-AgentASP.NET Core middleware or Express middlewareyes (URL and query)
SDK name and versionthe SDKno

Opt-in only

FieldEnabled byMasked
Request body (size-capped, truncated flag)TICKETMAN_DIAG_CAPTURE_REQUEST_BODY=trueyes
User id, username, tenant, rolesTICKETMAN_DIAG_CAPTURE_USER=trueno
Minidump (thread stacks and module list, no full heap)TICKETMAN_DIAG_ENABLE_DUMPS=trueno; raw memory cannot be masked, so enable only where acceptable

Never collected

  • Full heap dumps. A heap contains unmaskable secrets, so this is deliberately unsupported.
  • Response bodies.
  • Request headers other than User-Agent. Authorization and Cookie are never captured, not even masked.
  • Anything at all when TICKETMAN_DIAG_ENDPOINT is not configured. The SDK is then fully inert.

Masking rules

Masking is applied to every masked field: known secret key names in JSON pairs, form and query key=value pairs, connection strings (password, secret, token, apikey, authorization, cookie, accesskey, credential and more, extendable via TICKETMAN_DIAG_MASK_EXTRA_KEYS), plus JWT-shaped tokens anywhere in the text. If masking cannot complete on pathological input, the whole value is replaced. Masking cannot be turned off.

Retention on the client

Reports wait in the local spool directory until delivered, capped by TICKETMAN_DIAG_SPOOL_MAX_MB with the oldest evicted first. Delivered and rejected reports are deleted immediately after the server responds.