OpenTelemetry export
Nora can export its agent telemetry under the OpenTelemetry GenAI semantic conventions (gen_ai.*), so per-agent token usage, estimated cost, and runtime resource metrics flow into the Datadog / Grafana / Langfuse / Honeycomb stack you already operate — no Nora-specific agent or scraper required.
It is disabled by default and fail-open: a collector outage or misconfiguration never affects chat or any other request path.
What gets exported
Spans (OTLP only): onechat span per recorded LLM exchange, with gen_ai.operation.name=chat, gen_ai.request.model, gen_ai.system (provider), gen_ai.usage.input_tokens / output_tokens, gen_ai.conversation.id (session), and nora.agent.id / nora.runtime.family / nora.sandbox.profile / nora.source. The span is bracketed around the runtime call, so its duration reflects real latency.
Metrics (OTLP and/or Prometheus):
This guide covers Nora’s own backend-level telemetry — the exchange-granularity spans and
metrics above, exported from the control plane to your observability stack. Per-LLM-call and
per-tool-call sub-spans are a separate, OpenClaw-specific capability: agents push real
OpenTelemetry traces into Nora’s own native OTLP receiver, where they’re stored, searched, and
shown in the Traces lens on
/app/logs — see the logging
guide. This isn’t available on Nora-managed agents yet: it needs a
newer OpenClaw than Nora currently deploys. It’s
OpenClaw-only (Hermes has no equivalent OTel export) and doesn’t currently forward into the
external stack this guide configures — the two systems are independent today. A2A Agent Cards
remain on the roadmap.Enable it
Set the master switch and at least one exporter, then restart the backend:http://<backend-host>:9464/metrics.
Cost accuracy
Thenora.agent.cost.usd counter is emitted unrounded per exchange (sub-cent values accumulate accurately), using COST_PER_1K_TOKENS and the optional per-model COST_MODEL_RATES_JSON map — see environment variables. Configure those rates to match your providers for meaningful cost dashboards.
Verify
With Prometheus enabled:sandbox_profile=nemoclaw; the export should show nora.runtime.family=openclaw and nora.sandbox.profile=nemoclaw without any API-key labels.
