Before you start. You need a license key, and
either a service instrumented with OpenTelemetry or
curl to send a test
payload.Endpoints
The receiver exposes one path per signal over OTLP/HTTP:POST /v1/logsPOST /v1/metricsPOST /v1/traces
Both forms carry the
/otlp prefix because nginx serves OTLP under it and
strips it before forwarding, so the receiver still sees /v1/logs. Dropping the
prefix is the most common setup mistake: the request reaches the dashboard
instead of the receiver and comes back as an HTML 404 rather than an ingest
error.
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.Authenticate
Every ingest request needs your license key in theX-License-Key header. For
SDKs, set it through the standard headers variable:
OTEL_SERVICE_NAME is not required by the receiver, but set it anyway — without
it every signal arrives attributed to an unknown service and the service-level
views have nothing to group by.
Send a first request
The fastest way to prove the path end to end, before touching your application’s instrumentation, is a single OTLP/JSON log record.Encodings and compression
The receiver accepts both OTLP encodings over HTTP:application/jsonapplication/x-protobuf— also accepted asapplication/octet-stream
Content-Encoding. OpenTelemetry SDKs default to gzip, which works without
configuration.
OTLP over gRPC
The receiver itself does implement OTLP over gRPC on port 4317, registering the standard logs, metrics and trace services. It is reachable only where an operator has deliberately exposed it — that is, on a self-hosted deployment whose reverse proxy has been configured to carry gRPC. Where it is available, it takes the same license key as HTTP — a key created in Settings → License Keys works on both transports:x-license-key rather than
X-License-Key. Everything else — rate limits, plan quotas, per-signal
entitlements — is enforced identically on both transports.
The gRPC base endpoint is always a separate value from the HTTP one, because a
reverse proxy terminating HTTP/1.1 cannot also carry gRPC on the same listener.
Where a deployment serves both, Get Started shows both.
Confirm it arrived
Two checks, in order:- Did the receiver accept it? A
202response means yes. A401means the key was missing, malformed or revoked; a400means the payload did not decode. - Did it land? Open the Logs Explorer and search for the service name you
sent — for the curl example above,
service:docs-smoke-test. See Searching logs for the query syntax.
202 and nothing appears after a minute, the problem
is downstream of ingest rather than in your instrumentation, which is a useful
thing to know before you start rereading your exporter config.
Troubleshooting
The collector starts, then logs 'Exporting failed. Will retry'
The collector starts, then logs 'Exporting failed. Will retry'
Read the
error field on that line — it names the cause exactly.no such host— the endpoint hostname does not resolve. Check$OIQ_ENDPOINTagainst the value on Get Started.connection refused— the host resolves but nothing is listening on that port.401 Unauthorized— the key is missing, malformed or revoked.404— the endpoint already ends in/v1/…. It must be the base URL; the collector appends the signal path itself.
Nothing at all in the logs after 'Everything is ready'
Nothing at all in the logs after 'Everything is ready'
The collector is running and receiving nothing. That is an application-side
problem, not a collector one — your services are not exporting to it.Check that your application’s
OTEL_EXPORTER_OTLP_ENDPOINT points at the
collector’s OTLP port (4318 for HTTP, 4317 for gRPC), not at aiAxonIQ.401 with a key you know is correct
401 with a key you know is correct
Two causes that are not about the key’s value:
- A trailing newline. A key read from a file created by a shell heredoc,
or a Kubernetes Secret made with
--from-file, carries the newline as part of the value. Use--from-literal, orprintfrather thanecho. - A validation outage. If the receiver cannot reach the service that
validates keys it fails closed and returns the same
401. A sudden401across every service at once, with a key you have not changed, is far more likely to be this. Check$OIQ_ENDPOINT/healthfirst.
Config changes appear to do nothing
Config changes appear to do nothing
The collector reads its configuration only at startup. Restart it after any
edit, and confirm the file you edited is the one mounted into the process —
a bind mount pointing at a path that does not exist silently yields the
image’s default config rather than an error.
Next
Instrument your application
Zero-code setup, per language.
Verify your data
Confirm it landed.
Endpoints and errors
Every status code and limit.