The agent runs and collects nothing
The most common failure, and the hardest to spot, because everything looks right.Confirm
opening perf event: permission denied is the confirmation.
Why it happens
Above1, the kernel denies perf-event access even when CAP_PERFMON is
granted. Profiles B and C attach kprobes, so the agent acquires every
capability it asked for, passes its own gate, reports healthy — and attaches
nothing.
Fix
The agent refuses to start
The capability enforcement is working as intended: the agent will not attach partially and then report nothing. The startup message names exactly what is missing. The usual cause on Linux issetcap failing on a filesystem without extended
attribute support. systemd’s ambient capabilities still grant them, so confirm
the systemd unit is what is actually starting the process rather than a
hand-rolled invocation.
Only some services appear
Not “nothing” but “not everything” — a different problem with three distinct causes.The TLS library is not one the agent hooks
The TLS library is not one the agent hooks
The agent hooks OpenSSL’s read and write functions. Statically linked TLS,
BoringSSL,
rustls, GnuTLS and NSS are each a potential gap.Node.js bundles its own OpenSSL, and Rust’s rustls is not OpenSSL —
both are known risks rather than known failures, because the full matrix
has not been measured. This presents as “that service is missing”, never as
an error.There is no configuration fix. Where you need those services covered, add
the OpenTelemetry SDK to them — see
Zero-code and the SDK together.The agent cannot see the process
The agent cannot see the process
Host PID access again — but partially. A service in a container the agent
cannot see in its namespace produces nothing while its neighbours produce
everything.Check
--pid=host (Docker), pid: host (Compose), hostPID: true
(Kubernetes).The protocol is not decoded
The protocol is not decoded
The agent decodes a wide but finite set: HTTP/S, HTTP/2, gRPC, JSON-RPC,
common SQL databases, Redis, MongoDB, Kafka, GraphQL, MQTT, NATS, AMQP,
object storage and several GenAI APIs.A service speaking a bespoke binary protocol produces connection-level
information and no request-level spans. This is a boundary of the
technique, not a setting.
The agent only sees itself
One process discovered — its own. There is no shared PID namespace.
This is the single most common installation mistake, and it produces no error
anywhere. If your service inventory did not grow after installing, check this
before anything else.
401 Unauthorized in the agent log
The license key is missing, malformed or revoked.429 Rate limited
A DaemonSet is N exporters spending one organization’s rate-limit budget, so a fleet reaches a limit that a single host never would. Reduce volume, in order of effect:1
Confirm health and metrics endpoints are still being dropped
They are excluded by default, and a hand-edited configuration is the usual
way that stops being true. They are frequently the largest share of total
volume.
2
Add explicit route patterns
Route unification is on by default, but the heuristic is a fallback. Your
own patterns are always better — see
Metric cardinality below.
3
Narrow what is instrumented
Exclude services whose telemetry you do not use.
Metric cardinality explosion
Too many metric series, and an ingest bill to match. Almost always raw URL paths becoming labels. Route unification is on by default and reduces unknown paths heuristically — but explicit patterns always beat the heuristic:systemctl restart aiaxoniq-zerocode, or set the
patterns through the chart on Kubernetes.
See cardinality
for why this costs what it does.
Kubernetes metadata is missing
Pods, namespaces and workloads are not attached to telemetry. The agent’s cluster access islist and watch on pods, services, nodes and replicasets —
if the chart’s RBAC was modified or a policy blocks it, decoration silently
stops while spans keep flowing.
Check the agent log for authorization errors against the Kubernetes API.
Configuration changes have no effect
The second cause is editing the wrong file — a configuration generated to one path while the service reads another. Confirm with the doctor tool, which reports the configuration actually in effect.The kernel or platform is not supported
The agent instruments itself
It should not — self-exclusion is part of the shipped configuration. If the agent appears in your own service map, that block did not survive a configuration edit. Regenerate rather than patch.Still stuck
Next
Verification
The four checks that separate running from working.
Known limitations
What is absent by design, so you stop looking for it.
Platform troubleshooting
When the problem is in the pipeline rather than the agent.