Since PR #1087 (2026-11-15) an xOneRS node on main can send traces to an OpenTelemetry collector: set --tracing.otlp to the collector's OTLP/HTTP address, and closed spans are posted as OTLP JSON. The export can never slow the node: spans go through a bounded queue, and a full queue drops and counts them. One limit matters more than the rest: when we read the code, no part of xOne created a span, so there is nothing of xOne's own to export yet. We filed that as issue #1153. None of this is in v0.1.0.

For metrics and logs, which do work today, see monitoring an XDC node with xOne.

How do I turn it on?

xone --network apothem --tracing.otlp http://127.0.0.1:4318

From the flag table in bin/xone/src/flags.rs and the module observe/otlp.rs:

REFERENCE TABLEScroll to explore all columns →
Flag Default Meaning
--tracing.otlp <url> empty (off) The collector, http:// or https://. Without a path, /v1/traces is used.
--tracing.otlp.queue <n> 1024 Spans held for export. When full, a span is dropped and counted.
  • A URL with a user name or password (https://user:pass@host) is refused before any network call, and the error does not repeat it. Put credentials in the configuration of a local collector instead.
  • Dropped spans are counted in xone_otlp_spans_dropped_total on /metrics.
  • Port 4318 is the usual OTLP/HTTP port of an OpenTelemetry Collector. Run the collector next to the node and let it forward to Jaeger, Tempo or another backend.

What does the node send today?

Every span the node's tracing subscriber sees close. The exporter is complete and tested: the tests check that a closed span is posted as OTLP JSON, that a full queue drops and counts, that the path defaults to /v1/traces, and that credentials in the URL are refused.

But we searched every Rust file on main for code that creates a span (span!, info_span! and its siblings, #[instrument], .entered()), and found none outside the exporter itself. Issue #179, which #1087 closed, had asked for spans for block import (fetch, verify, execute, commit), for each RPC request, and for BFT vote and timeout handling. Those spans are not there yet. Until #1153 is done, expect a collector to receive nothing from xOne, or only spans that a library creates on its own. We did not test this against a collector.

What can I use instead today?

How does this compare with other clients?

REFERENCE TABLEScroll to explore all columns →
Client As stated by the client xOneRS on main
reth --tracing-otlp, with a shipped Grafana dashboard (reth monitoring docs) --tracing.otlp exporter; no xOne spans yet (#1153)

Issue #179 also named geth, BSC, Bor and Besu as having OTLP export, with file links at the commits it audited.

Frequently asked questions

How do I send xOne traces to Jaeger or Tempo?

Run an OpenTelemetry Collector with an OTLP/HTTP receiver, start xOne with --tracing.otlp http://127.0.0.1:4318, and point the collector at your backend. Expect no xOne spans until issue #1153 adds them.

Can the OTLP exporter slow down block import?

No. Spans go through a bounded queue of 1,024 by default; a full queue drops the span and counts it, and nothing waits for the collector.

Can I put an API key in the --tracing.otlp URL?

No. A URL with credentials is refused. Use a local collector that adds them.

Does --tracing.otlp export metrics?

No. It sends traces only. Metrics stay on the Prometheus /metrics endpoint.

Sources