No data is appearing
Diagnose missing traces, logs, metrics, errors, events, and replay without changing unrelated settings.
On this page
Work through these checks in order. Changing sampling, batching, and transport at the same time makes the failure harder to isolate.
Your agent reads your data back for you. Each check below says what to ask. If the agent shows you a link, open it: it is a read-only proof page for one person, issue or trace.
Ask your agent
"Run the instrumentation doctor for the last hour in my production project and tell me which signals are visible."
"Search for the log line 'anectico verification' and the trace with the same name in the last hour."
| Job | MCP tool or action | CLI command |
|---|---|---|
| Check the connection, sign-in, project and ingestion | not applicable | anectico doctor |
| Explain why traces and logs are or are not visible | instrumentation_doctor (read action) |
anectico doctor instrumentation |
| Search for a log line | search_logs |
anectico logs query |
| Search for a trace | search_traces |
anectico traces search |
| List issues | list_issues |
anectico issues list |
| Read a metric | query_metrics |
anectico metrics query <metric-name> |
| List captured event names | list_event_names |
anectico events names |
| Read one customer's timeline | get_person_timeline |
anectico persons timeline <customer-id> |
The doctor reports visible, filtered, withheld, unavailable or unknown for each signal, and
it never treats absence as proof of data loss. See
Check your instrumentation. A key needs
mcp:read and the read scope of each signal that it reads.
1. Check the project and environment
Confirm the organization, project, environment, and time window that your check uses. Development traffic does not appear while the check filters for production. Tell your agent the project and the environment, or pass them to the CLI command. A proof link always shows the project named in the link, whichever project you chose in the Console header.
2. Check the credential
- The key begins with
an_and has not been revoked. Ask your agent to list the keys (list_api_keys, oranectico apikey list), or look under API keys in the Console, in Agents and keys (/agents). - The key belongs to the intended organization and project.
- The application actually receives the environment variable at runtime.
Match the failing signal to its permission:
| Signal | Required scope |
|---|---|
| OTLP traces, logs, metrics, and captured errors | ingest:write |
Identify, group, screen, and diagnostic events sent to /api/v1/capture |
analytics:write |
| Session replay chunks | replay:write |
Feature-flag decisions from /api/v1/decide |
flags:read |
Browser or mobile flag decisions from /api/v1/flags/evaluate |
flags:evaluate on a client delivery key |
| Browser or mobile survey eligibility and responses | surveys:respond on a separate client delivery key |
An SDK that sends both telemetry and identity needs two separate purpose-bound keys with
ingest:write and analytics:write, respectively. Native structural replay additionally needs its
own replay_upload key, independent consent and current native permission.
A telemetry key (purpose native_ingest) holds only ingest:write. It does not include capture,
replay, or feature-flag permission. See Native intake keys.
Do not print the complete key while debugging.
3. Check the endpoint
The managed endpoint is https://api.anectico.com. OTLP HTTP exporters use /v1/traces, /v1/logs, and
/v1/metrics. Diagnostic events use /api/v1/capture.
Check proxy and firewall logs for DNS, TLS, 401, 403, 413, and 429 failures.
Each rejection status tells you what to change, and they are deliberately distinct — a status that says "retry" never means "your data is wrong":
| Status | Meaning | What to do |
|---|---|---|
401 / 403 |
The credential is missing, or lacks the permission for that path | Fix the key or its access preset |
400 |
The payload is permanently invalid, or a compressed body did not decompress | Fix the exporter; retrying the same bytes cannot help |
413 |
The batch is larger than a single request may carry | Send smaller batches, or export more often |
429 |
The request is throttled | Honor Retry-After when present; otherwise back off before retrying |
502 / 503 / 504 |
A gateway, request read, or dependency is temporarily unavailable | Honor Retry-After when present; otherwise back off before retrying |
For OTLP and HTTP, retry 429, 502, 503, and 504, and transient connection failures, using bounded
exponential backoff with jitter. Honor Retry-After when supplied. Other 4xx and 5xx responses,
including 400, 401, 403, and 413, require correction rather than retrying unchanged data.
Do not resend a batch after an OTLP partial-success response: inspect its rejected-row count and
error message instead. These are the OTLP retry rules;
use your exporter's retry implementation rather than wrapping it in a second retry loop. This
status-code list is specific to OTLP, not a retry contract for every REST or capture endpoint.
Also check the source clock. Each span, log, and metric point needs its required OTLP timestamp in the supported storage range (1900–2262); a missing timestamp (the Unix epoch sentinel) or an out-of-range timestamp rejects that row. Other valid rows continue to ingest, so one missing item beside healthy telemetry often indicates a timestamp problem rather than a batch-wide outage.
4. Force one recognizable signal
Create one manual span or captured error with a unique name. For metrics, emit
anectico.verification.value=1 with check=setup, wait for the export interval, and ask your agent
to query it over the last hour (query_metrics, or anectico metrics query anectico.verification.value --since 1h). Avoid relying on framework auto-instrumentation until the manual signal works.
5. Flush a short-lived process
SDKs batch telemetry. Call the documented stop, shutdown, or flush method before a command, job, or test process exits.
6. Enable debug output briefly
Turn on SDK debug logging, reproduce once, and look for exporter or authentication errors. Turn it off after diagnosis.
7. Separate ingestion from identity
If your agent finds the signal with search_logs, search_traces or list_issues, but the customer's
timeline (get_person_timeline) does not contain it, ingestion works. Continue with
Customer activity is not connecting.
Metrics are normally service-scoped and do not appear as entries on a customer timeline. Do not add customer IDs as metric labels to force that connection; investigate affected customers through traces, errors, logs, and events in the same time window.
8. Logs missing after a pipeline change
If a native_ingest source has a transform pipeline attached,
some logs going missing right after you changed it is a pipeline effect, not a transport failure —
work through steps 1–6 first only if nothing is arriving at all.
- Read the source's diagnostics (
GET .../pipeline/diagnostics, oranectico sources pipeline diagnostics <source-id>) for the active revision. A rising dropped count means an explicitdropstep is discarding matching records on purpose — check the step'swhencondition. A rising refused count names a reason code (for exampleTRANSFORM_PARSE_FAILEDwhen a step expected JSON orkey=valuetext that a particular log line does not have). Neither a dropped nor a refused record is stored; their diagnostic reasons differ. - Check the collector or exporter's own logs for the OTLP partial-success warning your library
surfaces on an otherwise-
200response; its message names counts and reason codes only (never log content) and is exactly what the diagnostics read reports in aggregate. - Preview a real sample of the log shape you expect to be affected against the active revision
(
POST .../pipeline/revisions/{revision}/preview, oranectico sources pipeline preview <source-id> <revision> --sample '<json>') to see precisely which step changes, drops or refuses it, without waiting for another export. - Roll back by activating the pipeline's previous revision (or
0to remove the pipeline entirely) if the new revision is the cause; activation is immediate to apply and drains for about fifteen seconds, not a redeploy. - A
503(Retry-Afterpresent) or gRPCUnavailablereportingintake pipeline unavailableis retryable and transient — nothing in that batch was admitted, so your exporter's normal retry delivers it once the pipeline is reachable again. This is not a sign that any specific record was rejected by the pipeline logic.
9. Using the Anectico collector
If the missing signal comes from the Anectico collector rather than an
application SDK, read its
collection health read first
(GET .../collection-health, or anectico sources collection-health <source-id>) instead of working
through steps 1–8: it classifies the source in one call as no signals, authentication rejected,
queued, parser refusal, or verified, from stored signal counts, the collector's own queue telemetry,
pipeline refusals and credential usability — so you know which of those five things to fix before
checking anything else.