Skip to main content
The Collector is one binary with a pipeline: receivers take telemetry in, processors transform it, exporters send it on. This page is the reference for building that pipeline. The platform pages (Docker, Linux, Kubernetes) give you a working one to start from.

The minimum that works

config.yaml
Everything below is something you add to that.

The pipeline

Processor order is execution order, and it matters.
  • memory_limiter must be first. Its job is to reject work before the process runs out of memory, which it cannot do from the middle of a pipeline.
  • batch should be last, or as close as possible. Batching before a filter means you built batches out of records you then threw away.
  • Anything that drops data — filtering, sampling — belongs before anything expensive.
A pipeline that lists the right processors in the wrong order is valid configuration and does the wrong thing silently.
A component defined but not listed in a pipeline does nothing. This is the most common Collector configuration mistake: the processor is configured correctly, the file is valid, and it is never executed because it was not added to service.pipelines.

Processors worth adding

Without it, a traffic spike can push the Collector into the kernel’s out-of-memory killer — and on a Kubernetes node, the thing that dies may not be the Collector. Always include it, first.
The receiver rate-limits requests, not records, so batching is what keeps you inside it. send_batch_max_size also stops a batch growing past the body size limit. See Exporters.
Usually the single largest reduction available, and it costs you nothing.
Health checks and metrics scrapes are the highest-frequency, lowest-value traffic in most systems.
insert only fills a missing value; upsert overwrites what the application sent. Prefer insert unless you mean to override applications. See Resource attributes.
Telemetry pipelines are append-only, and there is no surgical delete once data has arrived. Masking in flight is the only place this is cheap.
This is the mechanism behind the warning on Data retention.
Needs read access to pods. The Kubernetes page has the working manifests.
Only on a gateway Collector, and only where every span of a trace reaches the same instance. See Sampling.

Receivers beyond OTLP

The Collector can collect as well as receive, which is where host and infrastructure telemetry comes from:
This is why a Collector is worth running even when your applications export directly. Nothing an SDK does produces host CPU, disk pressure or container restarts, and those are frequently the explanation for what the application telemetry shows.

Environment variables and secrets

Never commit a license key into a Collector configuration file. Use environment variable substitution, and supply the value from a secret store, a Kubernetes Secret, or a 0600 environment file.A configuration file with a key in it tends to end up in a repository, in a container image, and in a support ticket.

Validate before restarting

A Collector with an invalid configuration does not start. It logs the error and exits — it does not fall back to a previous configuration. On a gateway that every service exports to, that is an outage of your telemetry rather than a warning, so validate first.

Watch the Collector itself

The Collector exposes its own metrics, and two of them answer most questions: Scrape them with the prometheus receiver and send them to aiAxonIQ, so your telemetry pipeline is itself monitored. A silently failing Collector otherwise looks exactly like an application that stopped producing traffic.

Troubleshooting

Read the error field on that line — it names the cause exactly.
  • no such host — the endpoint hostname does not resolve. Check $OIQ_ENDPOINT against 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.
The collector retries with backoff and does not drop data while it retries, so a transient failure here is not a loss.
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.
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, or printf rather than echo.
  • A validation outage. If the receiver cannot reach the service that validates keys it fails closed and returns the same 401. A sudden 401 across every service at once, with a key you have not changed, is far more likely to be this. Check $OIQ_ENDPOINT/health first.
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

Exporters

Batching, retries, queueing and multiple destinations.

Sampling

Head and tail sampling, and the rule that keeps traces whole.

Kubernetes

A DaemonSet and gateway pair, with working manifests.