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:
| 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_totalon/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?
- Block import phases: run with
--debug.logslowblock 0and read theSlow blocklines; they give verify, senders, execution, commit and history time for each block. See the receive and slow-block log fields. - RPC latency per method: the per-method latency and outcome series on
/metrics(PR #953); for alerting see ten metrics to alert on. - Before-and-after numbers: measure-node.sh.
How does this compare with other clients?
| 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
This article describes the source and evidence at its review date. Check the linked repository for current implementation and qualification status.
Explore the engineering evidenceEdit this page on GitHub opens the Markdown source (content/blog/xone-otlp-tracing/index.md). GitHub may ask you to sign in. Report a correction opens a prefilled GitHub issue for this page.