Troubleshooting

I'm seeing duplicate spans

This is expected when both eBPF and SDK instrumentation are active for the same service. Each source captures the same LLM call independently — you'll see one span from eBPF and one from the SDK. Both are correct; cost is not double-counted. When groundcover detects an SDK span for the same call, eBPF cost and token data is excluded from aggregations.


I don't see AI data

Work through the path you're using.

AI coding-tool integrations (Claude Code, Claude Cowork, Codex)

AI Observability shows GenAI traces — spans with gen_ai.* attributes. The Claude Code, Claude Cowork, and Codex data-source integrations ship tool-usage telemetry (logs, plus metrics for Claude Code), not GenAI traces, so they don't appear here. See AI Tools Observability for where to find the data.

eBPF Path

  • Unsupported provider. eBPF auto-detects OpenAI, Anthropic, and AWS Bedrock only. Calls to Vertex AI, Azure OpenAI, Cohere, or a self-hosted model appear as regular HTTP spans, not in AI Observability. Check Supported Providers for the current list. If your provider isn't listed, add SDK instrumentation instead, or contact usarrow-up-right to request eBPF support for your provider.

  • API gateway or proxy in the path. If your service calls a cloud-hosted gateway (OpenRouter, Azure OpenAI Service, LiteLLM Cloud) instead of OpenAI, Anthropic, or AWS Bedrock directly, eBPF doesn't recognize the hostname and the call appears as regular HTTP. Self-hosted proxies (LiteLLM, Portkey running in your cluster) are not affected — eBPF sees both hops. To get GenAI visibility through an unsupported gateway, add SDK instrumentation to your calling service. Contact usarrow-up-right to request native support for your gateway.

  • Sensor version. eBPF provider support ships in sensor releases. Check that you're running a current version — Installation & Updating.

SDK Path

  • Missing required attributes. Your SDK must emit gen_ai.operation.name for spans to appear in AI Observability. Valid values: chat, text_completion, embeddings, invoke_agent, execute_tool, create_agent. See required attributes and use the Data Sourcesarrow-up-right page for setup instructions specific to your SDK.

  • OTel exporter not configured. Confirm your service's OTLP exporter points to groundcover's collector endpoint. The Data Sourcesarrow-up-right page has your endpoint and setup steps.

  • SDK not listed. Check the Data Sourcesarrow-up-right page for supported SDKs. If yours isn't listed, contact usarrow-up-right — we're actively expanding SDK support.


Spans Disappeared

Check whether a kill-switch rule is active in Traces Pipeline Settingsarrow-up-right. A set(drop, true) rule on protocol_type == "gen_ai" drops all GenAI spans before storage. See Disable GenAI Data Collection.


No Content in Spans

  • eBPF: Content is captured automatically. If it's missing, check for a content-reduction or kill-switch rule in Traces Pipeline Settingsarrow-up-right.

  • SDK: Check whether OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=false is set in your environment. With this flag off, spans arrive with all performance metadata but no content. Remove it or set it to true to restore content capture. See Metadata-Only Mode for details.


Cost Shows Unpriced

The gc.llm_cost.status attribute shows unpriced when groundcover doesn't have pricing for the model in its pricing table. This typically happens with newly released models, fine-tuned models, or custom model names. Cost will populate automatically once the pricing table is updated. See groundcover Enrichment for details.

Last updated