Skip to main content

Check it in one command

Python services: 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 apiKey the SDK uses AUTTER_RUNTIME_KEY; with neither, it says so at startup and sends nothing. The relay answers 500 {"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-ingest on 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.
  • partialSuccess names what was rejected and why when something was.
  • Refusals carry {"error": "…"}. Invalid browser events get issues with 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.
  • /healthz says 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.