How aiAxonIQ works
What happens to a span, log line, or metric sample between your service and the dashboard — and the two rules that follow from it.
aiAxonIQ ingests OpenTelemetry logs, metrics, and traces, plus Prometheus remote-write. You point an exporter at an endpoint, authenticate with a license key, and the data becomes queryable in the dashboard.
This page describes the path your data actually takes. It is worth five minutes because two properties of that path — where your tenant is stamped, and which store answers which question — explain most of what you will run into later.
The write path
Every signal follows the same five steps.
- Your service's OpenTelemetry SDK or collector exports to the aiAxonIQ receiver, over OTLP.
- The receiver authenticates the request against your license key, applies rate limits, and stamps every record with your tenant ID.
- Records are published to Kafka, partitioned by tenant.
- A worker batches them and writes to ClickHouse, the telemetry store. Logs are additionally indexed into OpenSearch for full-text search.
- Materialised views roll metrics up into one-minute and one-hour tables as they land, so a query over a long window does not scan raw samples.
The receiver returns 202 Accepted as soon as the batch is published to Kafka. That is an acknowledgement of receipt, not of storage — a 202 means your data is in the pipeline, and it becomes queryable a short time later once the worker has flushed a batch.
Your tenant ID is assigned, never sent
The receiver derives your tenant from the license key on the request and stamps it onto every record. Nothing your SDK sends can set or change it.
This matters in one practical way: there is no attribute you can add to route data into a different tenant. If you want to separate staging from production, separate them with a resource attribute such as deployment.environment and filter on it at query time, or use two accounts. Sending a tenant.id attribute does nothing.
Which store answers which question
You do not query these directly — the dashboard and API do it for you — but knowing the split explains why some queries offer options others do not.
- ClickHouse holds logs, spans, and metric samples. It backs the Logs Explorer, traces, metrics, and every dashboard chart. Its query syntax supports field filters and boolean operators.
- OpenSearch holds a full-text index of your logs, per tenant, per day. It backs the fuzzy log-search API.
- PostgreSQL holds the control plane — your account, users, alert rules, dashboards, and license-key metadata. No telemetry lives here.
The consequence worth remembering: log search and the Logs Explorer are backed by different engines with different query languages. The syntax documented in Searching logs is the Logs Explorer's.
What you need to send data
Three things, in order:
- A license key — created in the dashboard, sent as the
X-License-Keyheader. See Create a license key. - An endpoint — the receiver's OTLP/HTTP address. See Send data with OpenTelemetry.
- An exporter — any OpenTelemetry SDK or the OpenTelemetry Collector. aiAxonIQ speaks standard OTLP, so there is no aiAxonIQ-specific SDK to install and nothing to rewrite if you later point the same exporter somewhere else.