Before you start, you need two values.
- Your base endpoint — shown on Get Started in the dashboard. These
pages write it as
$OIQ_ENDPOINT. - A license key — created in Settings → License Keys, starting
oiq_. Requires the Admin role. See Create a license key. These pages write it as$OIQ_LICENSE_KEY.
docker ps should succeed.
Why a collector rather than exporting directly
Your application can export straight to aiAxonIQ, and for one container on a laptop that is fine. On a host running several containers, the collector earns its place for three reasons: the license key stops being duplicated into every container’s environment, host and container metrics become available at all (an instrumented app cannot see the machine it runs on), and batching and retry are configured once instead of per service.1. Write the config
Save this asconfig.yaml. It receives OTLP on 4317/4318, scrapes host
metrics, and exports to aiAxonIQ.
config.yaml
2. Run the collector
3. Confirm it started
Everything is ready. Begin running and processing data. is the success signal.
You will also see two warnings, and both are expected:
'Using the 0.0.0.0 address exposes this server to every network interface'
'Using the 0.0.0.0 address exposes this server to every network interface'
Correct and intentional here. The collector must accept connections from
other containers, which it cannot do bound to loopback.On a host reachable from an untrusted network, do not publish
4317/4318
with -p. Put the collector and your applications on a shared Docker
network instead and let them reach it by container name — nothing needs to
be published to the host at all.'No root_path config set when running in docker environment'
'No root_path config set when running in docker environment'
This one changes what your data means, so it is worth acting on.The
hostmetrics receiver inside a container sees the container’s
filesystem, not the host’s. Disk and filesystem metrics will describe the
collector container — which is small, idle and not what you wanted to
monitor.To report real host metrics, mount the host root read-only and tell the
receiver where it is:4. Point your applications at it
Applications on the same host export to the collector rather than to aiAxonIQ. They carry no license key — that is the point.Verify
The collector publishes its own metrics on port8888. Three counters separate
the two things that can be wrong:
Accepted rising while sent stays flat is the classic signature of a wrong
endpoint or a missing key in the exporter block. It is worth checking before
anything else, because from inside your application everything looks fine.
Expected output shortly after start, with host metrics flowing:
send_failed at zero and sent climbing is a working install.
Then confirm it landed: open Logs or Infrastructure, set the range to
the last 15 minutes, and look for your host. Full detail in
Verify your data arrived.
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.
The container exits immediately
The container exits immediately
Almost always a config error — the collector refuses to start on an invalid
configuration rather than running degraded.Validate before running, which reports the problem without starting
anything:Exit code
0 and no output means the config is valid.Disk and filesystem metrics look wrong or tiny
Disk and filesystem metrics look wrong or tiny
You are seeing the collector container’s own filesystem. Mount the host root
and set
root_path — see the root_path warning above.Applications cannot reach the collector
Applications cannot reach the collector
Confirm which name they should use. On a shared Docker network it is the
container name (
aiaxoniq-collector); from the host it is localhost; from
inside another container reaching the host it is host.docker.internal,
which does not exist on Linux without --add-host.Test from inside the application container rather than from your shell:Next
Docker Compose
The same collector as a service in your stack.
Instrument your application
Zero-code setup per language.
Verify your data
Confirm it landed.