Before you start. You need a license key and
something sending data — a collector, an SDK, or the
curl below.Accepted is not the same as queryable
A successful OTLP request returns200 OK with an empty body — {} over
JSON, zero bytes over protobuf. That is what the OTLP specification defines as
“everything was accepted”, and it means the batch was published to the pipeline.
It does not mean the data is in a table yet.
Between the two there is a queue and a batching consumer, which flushes when it
has 50,000 rows or after five seconds — whichever comes first. On a quiet first
install, the five seconds is what you are waiting on.
So the expected sequence for a new install is:
200from the receiver, immediately.- The record queryable, typically within a few seconds.
- Rolled-up metric views — the 1-minute and 1-hour tables the charts read for wide time ranges — populated on their own schedule.
Step 1 — send something you can recognise
Send a log line with a service name nothing else uses.Get Started in the dashboard shows the exact base endpoint for your
deployment next to a license key you create there, with copy buttons, and
then watches for your first records. Where these pages write
$OIQ_ENDPOINT, that page has the real value.timeUnixNano is built from the current clock on purpose. A hardcoded timestamp
is the single most common reason a test record is accepted and then cannot be
found: it lands wherever that timestamp falls, which may be years outside the
window you are searching.
Expected: HTTP/1.1 200 OK, with {} as the body.
Anything else is an ingest-side problem and the status code says which one — see
the full status code reference. The short
version:
Step 2 — find it in the product
Open Logs and search for the service name you used:Get Started
A live check of whether this workspace has received anything at all. The
fastest way to distinguish “nothing has ever arrived” from “something
arrived but not what I expected”.
APM → Services
Every distinct
service.name seen recently, listed per project. A service
missing here that you believe is running usually means the resource
attribute is not being set — or that you are looking at a different project
than the one it landed in.Overview
Ingest volume over time, which tells you whether data is arriving
continuously or arrived once and stopped.
Step 3 — if the collector is in the path
When an OpenTelemetry Collector sits between your services and aiAxonIQ, it can accept spans from your app and still fail to export them. Its own metrics distinguish the two:otelcol_receiver_accepted_*climbing — your app is reaching the collector.otelcol_exporter_sent_*climbing — the collector is reaching aiAxonIQ.otelcol_exporter_send_failed_*climbing — it is trying and being refused. Its logs carry the status code, which maps to the table above.
What “no data” usually turns out to be
In rough order of frequency:- The time range. Narrow it to 15 minutes before believing an empty chart.
- A hardcoded timestamp in a copied example.
- The base URL. A self-hosted deployment behind the bundled nginx serves
OTLP under
/otlpand strips the prefix; a hosted one does not. The value on Get Started is the one this deployment actually serves. - No
service.name. Records without it still arrive, but they will not appear under any service, which is where most people look first. - Signal not enabled for the plan — a
403that a fire-and-forget exporter swallowed without logging.
Next
Search your logs
The query syntax.
Set up alerting
Alert on what you are now collecting.
Nothing showed up
Stage-by-stage diagnosis.