{"slug": "github-copilot-monitoring-with-opentelemetry-and-signoz", "title": "GitHub Copilot Monitoring with OpenTelemetry and SigNoz", "summary": "GitHub Copilot Chat now supports OpenTelemetry-based monitoring in VS Code 1.131 or later, enabling developers to send traces and metrics to SigNoz without additional instrumentation. The Copilot Chat extension includes a built-in OTLP exporter, and configuration requires enabling the feature in VS Code settings and pointing it to a SigNoz endpoint. This provides real-time visibility into agent turns, model routing, token usage, and tool calls, helping teams track performance and catch failures.", "body_md": "## What is GitHub Copilot Observability?\n\nGitHub Copilot observability gives you real-time visibility into how the Copilot Chat agent works inside VS Code by collecting traces and metrics with [OpenTelemetry](https://opentelemetry.io/). The Copilot Chat extension ships its own OTLP exporter, so there is no instrumentation library to install and no collector to run. Every agent turn becomes a trace whose spans follow the [OpenTelemetry GenAI semantic conventions](https://opentelemetry.io/docs/specs/semconv/gen-ai/): an `invoke_agent`\n\nroot span with `chat`\n\n, `execute_tool`\n\n, and `embeddings`\n\nspans beneath it, carrying `gen_ai.request.model`\n\n, `gen_ai.usage.input_tokens`\n\n, `gen_ai.tool.name`\n\n, and `gen_ai.conversation.id`\n\n.\n\nWith full GitHub Copilot monitoring in SigNoz, you can see which models the agent routes work to, track token spend and prompt-cache savings, measure time to first chunk as the developer actually experiences it, break down which tools the agent reaches for, and catch failing tool calls and rate limits before they slow the team down.\n\n## Prerequisites\n\n- A\n[SigNoz Cloud account](https://signoz.io/teams/)with an active ingestion key or[Self Hosted SigNoz instance](https://signoz.io/docs/install/self-host/) - VS Code 1.131 or later, which bundles GitHub Copilot Chat 0.59.0 or later\n- A GitHub Copilot subscription of any tier, including the free tier\n\n## Monitor GitHub Copilot with OpenTelemetry\n\nCopilot Chat reads its OpenTelemetry configuration from VS Code settings and applies your headers directly to its OTLP exporter, so you point it at SigNoz and reload. For more details, refer to the [VS Code guide to monitoring agents with OpenTelemetry](https://code.visualstudio.com/docs/agents/guides/monitoring-agents).\n\n**Step 1:** In VS Code, open your user settings JSON.\n\nOpen VS Code, then open the Command Palette with `Cmd+Shift+P`\n\n(`Ctrl+Shift+P`\n\non Windows and Linux) and run **Preferences: Open User Settings (JSON)**. All four steps below are performed in VS Code.\n\n**Step 2:** Add the OpenTelemetry settings to that file.\n\n```\nsettings.json\n{\n  \"github.copilot.chat.otel.enabled\": true,\n  \"github.copilot.chat.otel.exporterType\": \"otlp-http\",\n  \"github.copilot.chat.otel.protocol\": \"http/protobuf\",\n  \"github.copilot.chat.otel.otlpEndpoint\": \"https://ingest.<region>.signoz.cloud:443\",\n  \"github.copilot.chat.otel.serviceName\": \"<service_name>\",\n  \"github.copilot.chat.otel.headers\": {\n    \"signoz-ingestion-key\": \"<your-ingestion-key>\"\n  },\n  \"github.copilot.chat.otel.captureContent\": false\n}\n```\n\n**Verify these values:**\n\n`<region>`\n\n: Your[SigNoz Cloud region](https://signoz.io/docs/ingestion/signoz-cloud/overview/#endpoint).`<your-ingestion-key>`\n\n: Your SigNoz[ingestion key](https://signoz.io/docs/ingestion/signoz-cloud/keys/).`<service_name>`\n\n: The name Copilot appears under in SigNoz, for example`copilot-chat`\n\n. Give each team or rollout its own value if you want to tell them apart.\n\n`protocol`\n\ndefaults to an empty string, which means `http/json`\n\n. Setting `http/protobuf`\n\nexplicitly is what selects the protobuf exporter, so do not leave it out.\n\n**Step 3:** Save the file, then reload the VS Code window.\n\nSave `settings.json`\n\n, then open the Command Palette again and run **Developer: Reload Window**. Every one of these settings is read once at startup, so changes never apply to an already-running window.\n\n**Step 4:** Send a chat message from Copilot Chat.\n\nOnce VS Code has reloaded, open the Copilot Chat view and ask it anything. Spans start arriving in SigNoz within about 30 seconds, and metrics follow on their own export interval.\n\nEach agent turn emits a trace whose spans carry `gen_ai.operation.name`\n\n(`invoke_agent`\n\n, `chat`\n\n, `execute_tool`\n\n, `embeddings`\n\n) along with model, token usage, and tool attributes. OpenTelemetry batches data before sending, so allow a few seconds after a chat turn for it to appear in SigNoz.\n\n## View GitHub Copilot Traces in SigNoz\n\nOnce configured, Copilot Chat automatically emits traces for every agent turn.\n\nTraces are available in SigNoz under the Traces tab:\n\nWhen you click on a trace in SigNoz, you'll see a detailed view of the trace, including all associated spans, along with their events and attributes. The `invoke_agent`\n\nspan wraps one agent turn, `chat`\n\nspans are the individual model calls, and `execute_tool`\n\nspans capture each tool the agent ran.\n\n## Attributes and metrics worth knowing about\n\n### Span operations\n\n`gen_ai.operation.name` | Span kind | Emitted when |\n|---|---|---|\n`invoke_agent` | Internal | Wraps one agent turn. Root span. |\n`chat` | Client | One per model call |\n`execute_tool` | Internal | One per tool invocation |\n`embeddings` | Client | Workspace indexing |\n`execute_hook` | Internal | One per hook execution |\n\n### Attributes\n\n| Attribute | Where it appears |\n|---|---|\n`gen_ai.request.model` , `gen_ai.response.model` | `chat` , `embeddings` , `invoke_agent` |\n`gen_ai.usage.input_tokens` , `gen_ai.usage.output_tokens` | `chat` , `invoke_agent` |\n`gen_ai.usage.cache_read.input_tokens` | `chat` , `invoke_agent` |\n`gen_ai.usage.reasoning.output_tokens` | `chat` , `invoke_agent` (reasoning models only) |\n`gen_ai.response.time_to_first_chunk` | `chat` only |\n`gen_ai.response.finish_reasons` | `chat` only |\n`gen_ai.tool.name` | `execute_tool` only |\n`gen_ai.agent.name` | `chat` , `invoke_agent` |\n`gen_ai.conversation.id` | everything except `embeddings` |\n\n### Metrics\n\nCopilot emits the standard GenAI instruments (`gen_ai.client.token.usage`\n\n, `gen_ai.client.operation.duration`\n\n, `gen_ai.client.operation.time_to_first_chunk`\n\n, `gen_ai.client.operation.time_per_output_chunk`\n\n) plus Copilot-specific ones (`copilot_chat.agent.invocation.duration`\n\n, `copilot_chat.agent.turn.count`\n\n, `copilot_chat.time_to_first_token`\n\n, `copilot_chat.tool.call.count`\n\n, `copilot_chat.tool.call.duration`\n\n, `copilot_chat.session.count`\n\n, `github.copilot.mcp.server.connection.count`\n\n).\n\n## GitHub Copilot Observability Dashboard\n\nYou can also check out our custom [GitHub Copilot dashboard](https://signoz.io/docs/dashboards/dashboard-templates/github-copilot-dashboard/) which provides specialized visualizations for monitoring Copilot Chat. The dashboard includes pre-built charts for token usage and prompt-cache hit rate, per-model call volume and latency, tool activity split between MCP and built-in tools, and errors, along with import instructions to get started quickly.\n\n## Troubleshooting GitHub Copilot Observability\n\n### No traces in SigNoz\n\n- Confirm\n`github.copilot.chat.otel.enabled`\n\nis`true`\n\nin your**user** settings rather than workspace settings, then reload the window. Settings changes never apply to an already-running window. - Confirm you actually sent a chat message. Enabling the settings alone emits nothing.\n- Check that the region in the OTLP endpoint matches your SigNoz account.\n- OpenTelemetry batches data before sending, so wait 10-30 seconds after a chat turn.\n\n### Confirm whether Copilot is emitting at all\n\nSet `\"github.copilot.chat.otel.exporterType\": \"console\"`\n\n, reload the window, and check the Output panel. If spans appear there, Copilot is instrumented correctly and the problem is the endpoint, the key, or the region. Use `\"file\"`\n\nwith `github.copilot.chat.otel.outfile`\n\nto capture the same output as JSON lines.\n\n### Spans appear but metrics do not\n\nMetrics export on an interval rather than per request, so allow a minute or two.\n\n### Data goes nowhere and there is no error\n\nAn ingestion key is region scoped. A key issued for one region sent to another region's endpoint fails quietly. Re-check the ingestion key in the `signoz-ingestion-key`\n\nheader against your SigNoz Ingestion Settings, with no extra spaces or quotes, and confirm the endpoint region matches.\n\n`OTEL_EXPORTER_OTLP_HEADERS`\n\nseems to be ignored\n\nExpected if you launched VS Code from the Dock or Spotlight, since GUI-launched apps on macOS do not inherit your shell environment. Use the `github.copilot.chat.otel.headers`\n\nsetting instead, which is what this guide does.\n\n## Setup OpenTelemetry Collector (Optional)\n\n### What is the OpenTelemetry Collector?\n\nThink of the OTel Collector as a middleman between your app and SigNoz. Instead of your application sending data directly to SigNoz, it sends everything to the Collector first, which then forwards it along.\n\n### Why use it?\n\n**Cleaning up data**- Filter out noisy traces you don't care about, or remove sensitive info before it leaves your servers.** Keeping your app lightweight**- Let the Collector handle batching, retries, and compression instead of your application code.** Adding context automatically**- The Collector can tag your data with useful info like which Kubernetes pod or cloud region it came from.** Future flexibility**- Want to send data to multiple backends later? The Collector makes that easy without changing your app.\n\nSee [Switch from direct export to Collector](https://signoz.io/docs/opentelemetry-collection-agents/opentelemetry-collector/switch-to-collector/) for step-by-step instructions to convert your setup.\n\nFor more details, see [Why use the OpenTelemetry Collector?](https://signoz.io/docs/opentelemetry-collection-agents/opentelemetry-collector/why-to-use-collector/) and the [Collector configuration guide](https://signoz.io/docs/opentelemetry-collection-agents/opentelemetry-collector/configuration/).\n\n## Related integrations\n\nInstrument the other AI coding agents and assistants your team runs, using the same OpenTelemetry pipeline:\n\n[Monitor Claude Code with OpenTelemetry](https://signoz.io/docs/claude-code-monitoring/)- track token usage, cost, session activity, and tool decisions[Monitor OpenAI Codex with OpenTelemetry](https://signoz.io/docs/codex-monitoring/)- trace Codex runs from the IDE extension and the CLI[OpenCode observability with OpenTelemetry](https://signoz.io/docs/opencode-observability/)- trace OpenCode sessions, tool calls, and per-message cost[Monitor the Claude Agent SDK with OpenTelemetry](https://signoz.io/docs/claude-agent-monitoring/)- trace agent runs, subagents, and tool execution[Monitor GitHub Actions with OpenTelemetry](https://signoz.io/docs/cicd/github/github-actions-traces/)- trace the CI pipelines your agents open pull requests against\n\nBrowse [all LLM observability integrations](https://signoz.io/docs/llm-observability/) to instrument the rest of your stack.", "url": "https://wpnews.pro/news/github-copilot-monitoring-with-opentelemetry-and-signoz", "canonical_source": "https://signoz.io/docs/github-copilot-monitoring", "published_at": "2026-08-12 00:00:00+00:00", "updated_at": "2026-08-14 18:48:14.662729+00:00", "lang": "en", "topics": ["developer-tools", "ai-tools"], "entities": ["GitHub Copilot", "OpenTelemetry", "SigNoz", "VS Code"], "alternates": {"html": "https://wpnews.pro/news/github-copilot-monitoring-with-opentelemetry-and-signoz", "markdown": "https://wpnews.pro/news/github-copilot-monitoring-with-opentelemetry-and-signoz.md", "text": "https://wpnews.pro/news/github-copilot-monitoring-with-opentelemetry-and-signoz.txt", "jsonld": "https://wpnews.pro/news/github-copilot-monitoring-with-opentelemetry-and-signoz.jsonld"}}