Skip to content

Emitted telemetry

Every span, metric, log record, and resource attribute Elide emits on its own: names, instrumentation scopes, units, attributes, and when each is recorded.

On this page

What Elide records without code changes, once a destination is configured. Telemetry your code creates keeps the names and scopes you give it.

Resource

Every span, metric, log record, and profile from one process carries the same resource.

AttributeValue
service.nameOTEL_SERVICE_NAME, else service.name in elide.pkl, else unknown_service:elide
service.versionservice.version
service.namespaceservice.namespace
deployment.environment.nameservice.environment
telemetry.sdk.nameelide
telemetry.sdk.versionThe Elide version
anyresource in elide.pkl and OTEL_RESOURCE_ATTRIBUTES

When the same attribute is set in more than one place, flags win over variables, and variables over elide.pkl.

Instrumentation scopes

ScopeSignals
dev.elide.runtimeHTTP server and client spans, elide build, elide test, and elide install spans, runtime metrics, error records, Elide’s own log records
dev.elide.runtime.profilerGuest CPU profiles
consoleCaptured console.* output (JavaScript)
logger name, e.g. root, app.dbCaptured Python logging records

Spans

HTTP server spans

One SERVER span per request served by elide serve, a fetch handler, or a node:http server, when runtime.traces is on.

FieldValue
NameThe method (GET, POST, …), or GET /users/:id once a node:http route is known; HTTP for a nonstandard method
ParentThe caller’s traceparent, when valid; otherwise a new trace
StatusERROR for a 5xx response, an abandoned response, or a reset connection
AttributeWhen
http.request.methodAlways. Methods outside the standard nine are _OTHER.
http.request.method_originalFor _OTHER
url.schemeAlways
url.pathAlways
url.queryWhen the target has a query string. The values of AWSAccessKeyId, Signature, sig, X-Goog-Signature, X-Amz-Signature, X-Amz-Credential, and X-Amz-Security-Token are redacted; other values are exported as sent, so keep secrets out of URLs.
network.protocol.versionAlways: 1.0, 1.1, or 2
server.address, server.portFrom the Host header
user_agent.originalWhen sent
client.address, network.peer.address, network.peer.portWhen the peer is known
http.response.status_codeWhen a response was sent
http.request.body.size, http.response.body.sizeWhen nonzero or known
http.routenode:http servers, when set by the handler or a router; see Routes
error.typeabandoned, reset, or the 5xx status code
baggage.<key>For keys listed in propagation.baggage.spanAttributes

A handler that throws adds an exception event to the server span and sets its status to ERROR.

HTTP client spans

One CLIENT span per outgoing fetch request, when runtime.traces is on.

FieldValue
NameThe method: GET, POST, …
ParentThe span active where fetch was called
StatusERROR for a 4xx or 5xx response, or a failed request
AttributeWhen
http.request.method, http.request.method_originalAs for server spans
url.fullAlways
server.address, server.portFrom the URL
http.response.status_codeWhen a response arrived
network.protocol.versionWhen known
http.response.body.sizeWhen known
error.typeThe 4xx or 5xx status code, or the failure kind

Toolchain

Recorded by elide build, elide test, and elide install. The root span continues a TRACEPARENT (and TRACESTATE) from the environment.

SpanParentAttributes
elide.build, elide.test, elide.installTRACEPARENT, or a new traceelide.command, process.exit.code, elide.ci.*; ERROR status for a nonzero exit code
elide.build.<stage>Command spanelide.build.category
elide.task <name>Command spanelide.build.category, elide.build.task, elide.build.outcome, elide.build.cache_hit
elide.task.<operation>Task spansame as tasks
elide.test.file <path>, elide.test.fork <source-set>Task spanelide.test.execution.*, elide.test.shard.index/count for JS files, elide.test.count.<status>, process.exit.code
test nameExecution span (command for records without an execution)elide.test.engine, elide.test.name, elide.test.status, elide.test.suite, elide.test.file, elide.test.source_set, elide.test.failure; ERROR status on failure

Report attributes (schema version 1):

AttributeMeaning
elide.report.schema_versionInteger 1 on every report span
elide.invocation.id<trace-id>/<command-span-id>, shared by all spans in one invocation
elide.span.typecommand, build_stage, task, task_operation, test_execution, or test
elide.project.name, elide.workspace.nameManifest identities where available; member tasks override project name
elide.task.path, elide.task.typeWorkspace-qualified task key and implementation class; type may change across releases
elide.task.dependenciesArray of scheduled prerequisite task paths; edges are not parent-child span relationships
elide.task.cacheableWhether the task permits caching; separate from an actual cache hit
elide.build.workers/peak_ready/ready_wait_ns/critical_path_ns/critical_pathCommand summary: worker count, peak ready tasks, aggregate ready wait, critical-path duration and ordered task paths
elide.build.operation, thread.nameDriver region name and the thread that completed it
elide.test.execution.id/kind/pathExecution span ID, file or fork, and project-relative file or source-set name
elide.test.shard.index/countZero-based JS file index and discovered file count; indexes are local to the task
elide.test.count.<status>Counts for observed pass, fail, skip, todo, abort, and filtered results; absent means zero
elide.test.idLength-prefixed engine, nullable file, nullable source set, suite components, and test name; null encodes as -1:, strings as <UTF-16-length>:<value>
elide.test.identity.kinddisplay_path; not a native engine unique ID
elide.test.occurrenceOne-based occurrence of that identity within the execution; not a retry counter
elide.test.timing.kind, elide.test.duration_nsresult_duration and the runner’s original duration in nanoseconds

For cross-build test comparison, use repository/service scope, workspace/project, task path, and elide.test.id. For one emitted result, use invocation ID plus execution ID plus test ID plus occurrence (or its OTLP span ID). Test children carry their execution identity and task path explicitly, so queries do not require walking the tree. See Builds and tests in CI for timing and completeness limits.

CI attributes come from the provider’s own variables:

AttributeGitHub ActionsGitLabBuildkiteCircleCI
elide.ci.providergithubgitlabbuildkitecircleci
elide.ci.pipeline.nameGITHUB_WORKFLOWCI_PIPELINE_NAMEBUILDKITE_PIPELINE_SLUG—
elide.ci.pipeline.run.idGITHUB_RUN_IDCI_PIPELINE_IDBUILDKITE_BUILD_IDCIRCLE_WORKFLOW_ID
elide.ci.pipeline.run.attemptGITHUB_RUN_ATTEMPT———
elide.ci.pipeline.run.urlbuilt from GITHUB_SERVER_URLCI_PIPELINE_URLBUILDKITE_BUILD_URLCIRCLE_BUILD_URL
elide.ci.job.nameGITHUB_JOBCI_JOB_NAMEBUILDKITE_LABELCIRCLE_JOB
elide.ci.vcs.refGITHUB_REF_NAMECI_COMMIT_REF_NAMEBUILDKITE_BRANCHCIRCLE_BRANCH
elide.ci.vcs.revisionGITHUB_SHACI_COMMIT_SHABUILDKITE_COMMITCIRCLE_SHA1
elide.ci.vcs.repositoryGITHUB_REPOSITORYCI_PROJECT_PATH——

Any other CI that sets CI gets elide.ci.provider = generic.

Span limits

A span still open when the process exits is ended and exported with elide.span.reclaimed = true. So is the oldest open span once more than 16,384 are open at the same time.

Metrics

Runtime metrics are recorded when runtime.metrics is on and some destination accepts metrics.

InstrumentKindUnitAttributes
http.server.request.durationHistogramshttp.request.method, url.scheme, network.protocol.version, http.response.status_code, error.type
http.server.active_requestsUpDownCounter{request}http.request.method, url.scheme
http.server.request.body.sizeHistogramBySame dimensions as server duration, including a known http.route
http.server.response.body.sizeHistogramBySame dimensions as server duration, including a known http.route
elide.http.server.rejected_requestsCounter{request}http.response.status_code
http.client.request.durationHistogramshttp.request.method, server.address, server.port, url.scheme, network.protocol.version, http.response.status_code, error.type
process.cpu.timeCounter (observable)scpu.mode = user, system
process.memory.usageUpDownCounter (observable)By—
process.thread.countUpDownCounter (observable){thread}—
process.unix.file_descriptor.countUpDownCounter (observable){file_descriptor}—
process.uptimeGauge (observable)s—
elide.errorsCounter{error}error.type, elide.error.origin

Process metrics are collected on Linux, macOS, and Windows. elide.http.server.rejected_requests counts requests Elide answered itself because they were malformed or unsupported; they never reach your handler.

HTTP duration histograms use the bucket boundaries 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 seconds and carry exemplars of their request span.

elide.error.origin values:

ValueRecorded for
uncaughtAn uncaught exception
rejectionAn unhandled promise rejection
handlerA request handler that threw or rejected
crashA crash of an earlier process, reported by the next one
guest_apispan.recordException(…) in your code

Log records

RecordScopeSeverityAttributes
Errordev.elide.runtime; the span’s scope for recordExceptionERRORevent.name = exception, exception.type, exception.message, exception.stacktrace, elide.error.origin
Crash reportdev.elide.runtimeFATALas above, plus elide.crash.origin, elide.crash.file, elide.crash.signature, elide.crash.exit_code, elide.crash.subcommand, elide.crash.build_id, process.pid
Elide’s own logdev.elide.runtimeat or above runtime.logselide.log.target, code.file.path, code.line.number
console.*consoleconsole.trace TRACE, debug DEBUG, log and info INFO, warn WARN, error and assert ERROR—
Python loggingthe logger’s namemapped from the record levelcode.file.path, code.function.name, code.line.number, and exception.* with exc_info

Every record emitted inside a span carries its trace id, span id, and trace flags.

Profiles

Experimental. One OTLP CPU profile per export (every 30 seconds and at exit) in the dev.elide.runtime.profiler scope, with samples/count values and a cpu/nanoseconds period. Each sample links to the span that was active on its thread. See Profiles.

Not yet recorded

  • Garbage collection and event-loop delay metrics.
  • Client spans and traceparent injection for node:http client requests and Python HTTP clients.
  • Spans for engine start, module loading, or worker threads.

Was this page helpful?