Check it in one command
python3 compat.py verify --service checkout (copy
compat.py
next to your app; stdlib only).
verify reads AUTTER_ENDPOINT and AUTTER_RUNTIME_KEY, sends one test span
with an error and one log record through the real path, reads them back, and
stops at the first step that fails, with what to do:
The test event is stored under environment
verify and never opens an
issue, sends an alert or counts as a request. Exit codes: 0 delivered, 1
a step failed, 2 unreachable; --json for the full report.
doctor is the quicker check that sends nothing: versions, active features,
storage readiness and the key (key: not checked without one).
What is sampled
Errors are never head-sampled. Healthy traffic is.
Suppression rules (set in Autter) and loop collapse act at the ingester; both
are counted.
When it arrives
From the call in your code to stored data, with a healthy ingester:
A serverless function that is frozen after it answers should
await runtime.shutdown() before it returns.
What the SDKs tell you
@autter/runtime-node and the relay print one line, once per process:
- No key. Without
apiKeythe SDK usesAUTTER_RUNTIME_KEY; with neither, it says so at startup and sends nothing. The relay answers500 {"error": "relay has no ingest key"}. - The wrong kind of key (client or upload key on the server).
- The first refusal: the first 401, 403, 404 or 400, with the ingester’s
reason, for example
refused the ingest key on /v1/traces (401: invalid ingest key). - Version mismatches, one warning per feature (compatibility).
What the ingester tells you
x-autter-ingeston every accepted response says what was stored:spans=3 occurrences=1 metric_points=2 suppressed=0 collapsed=0 truncated_values=0 rejected=0. An empty{"partialSuccess": {}}means nothing was rejected.partialSuccessnames what was rejected and why when something was.- Refusals carry
{"error": "…"}. Invalid browser events getissueswith the field path, from the ingester and from the relay. GET /v1/verify(with your server key) returns this key’s last accepted and last refused request, and storage readiness./healthzsays whether storage accepts writes and counts drops by reason.
Behind a firewall or proxy
Node’s HTTP client, which the OTLP exporter uses, ignores
HTTPS_PROXY.
Where outbound traffic must go through a proxy, allow the ingester’s host
directly or run an OpenTelemetry Collector inside the network.
