Enable tracing
Point Lasso at an OTLP receiver, such as the OpenTelemetry Collector or Grafana Alloy, then setLASSO_OTEL_ENABLED:
LASSO_OTEL_ENABLED accepts true, false, 1, or 0; any other value fails startup. The remaining variables are the standard OpenTelemetry SDK settings:
OTEL_EXPORTER_OTLP_ENDPOINTis a base URL; the exporter appends/v1/traces. UseOTEL_EXPORTER_OTLP_TRACES_ENDPOINTfor an exact trace URL.- HTTP/protobuf is the default transport and
grpcis supported. HTTP/JSON is not. - Pass receiver credentials through
OTEL_EXPORTER_OTLP_HEADERSfrom your secret store. Never put credentials in provider IDs, profile names, or resource attributes. OTEL_SDK_DISABLED=trueturns the SDK off even when the Lasso flag is on.
Sampling
Root traces sample at 1% by default. A request that arrives with a W3Ctraceparent keeps its parent’s sampling decision, so an indexer whose HTTP client propagates trace context sees Lasso’s spans inside its own traces. Because callers can send sampled parents, parent-based sampling does not cap trace volume from untrusted clients. To enforce a local policy, strip or replace incoming traceparent at your ingress. Use always_on only for short staging investigations.
Spans
traceparent. WebSocket RPC items get lasso.rpc and lasso.upstream spans with their own roots; Lasso does not create spans for long-lived sockets or subscription notifications. Health, metrics, and dashboard routes do not create spans.
Compare a lasso.rpc span’s duration with its lasso.upstream attempts: a failed attempt followed by a successful request is a recovered failover, while a failed request span means every eligible attempt was exhausted.
Span attributes include chain ID, profile and provider identifiers, transport, origin, the RPC method (unknown methods become other), outcome, and attempt count. Lasso never exports request bodies or params, wallet addresses, transaction data, upstream URLs, query strings, caller request IDs, or exception messages. Incoming baggage and tracestate are not propagated.
Log correlation
While a request is active, JSON log entries carrytrace_id and span_id. To link Loki to Tempo, add a derived field named trace_id with the regex "trace_id":"([a-f0-9]{32})". Keep trace IDs out of Loki stream labels and Prometheus labels.
In Grafana Explore, find Lasso’s client traffic with TraceQL:
Limits
Tracing is best-effort. The SDK’s batch processor drops spans under pressure or at shutdown; tune it withOTEL_BSP_MAX_QUEUE_SIZE, OTEL_BSP_SCHEDULE_DELAY_MILLIS, and OTEL_BSP_EXPORT_TIMEOUT_MILLIS. Spans still open after 60 seconds are ended by the SDK sweeper; tune it with the OTEL_SPAN_SWEEPER_* variables if your longest requests need complete traces. The final flush at shutdown can delay process exit, so allow for it in your termination grace period.
If traces stop appearing, check LASSO_OTEL_ENABLED, OTEL_SDK_DISABLED, the receiver address, protocol and credentials, the sampler, and the collector’s own export and drop metrics. An empty trace search does not show that traffic is idle; use metrics for that. To turn tracing off, set LASSO_OTEL_ENABLED=false and restart.
See the released tracing guide for a Collector pipeline example and sweeper tuning details.