Turn on the SDK's diagnostics
onWarn, warnings go there instead of the console.)Check the drop counters
sent: 0, queued > 0- traces are waiting; on serverless this means a missing flush (next step).dropped.byReasonnames the problem:authmeans a key issue (invalid or missingtraces:write),queue_overflowmeans the endpoint is unreachable and the bounded queue rolled over,retry_exhaustedmeans the endpoint kept failing,disabledmeans the SDK never had a usable key/endpoint to begin with.- All zeros - no trace was ever produced: tracing is disabled or sampled out (below), or your wrap point never runs.
Serverless: are you flushing?
A trace POSTs when its root settles - but Vercel, Lambda, and Workers can freeze the process right after your response, before the request leaves. Add the one-liner for your platform from the serverless matrix.
Is the key present and valid?
GLASSRAY_API_KEY must be set in the environment your agent actually runs in (not just your shell). The server’s answer tells you which problem you have:401- the key is missing, malformed, or was revoked. Re-check the env var; if the key is lost, rotate it from the source’s Configure dialog (keys are shown once and stored hashed).403- the key is real but can’t write: it lacks thetraces:writepermission, the source is disabled, or ingestion is suspended for the organization.
401/403 the SDK warns once and then mutes - fix the key, then restart the process.Is the source enabled?
In Settings → Sources, confirm the OTLP source you minted the key for is still there and enabled. A disabled source rejects writes with
403.Do the source's filters drop your traces?
A source can carry ingest filters that admit only matching trace names - non-matching traces are dropped at ingest, silently and by design. The server still returns
200 for them, so the SDK counts them as sent. Check the source’s filter rules against the names you pass to glassray.trace(name, …).Is tracing disabled or sampled out?
GLASSRAY_TRACING=falseanywhere in the environment is the kill switch - every handle becomes a no-op.enabled: falsein the constructor does the same.- A low
sampleRate/GLASSRAY_SAMPLE_RATEdrops whole traces by design - set it to1while debugging.