> ## Documentation Index
> Fetch the complete documentation index at: https://neuraltrust-92b43583-develop.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Metrics worker

> How TrustGate records a per-request metrics event and ships it off the hot path through an asynchronous worker — no scraping, no request-path overhead.

TrustGate captures a **structured metrics event for every proxied request** — model,
tokens, cost, latency breakdown, routing attempts, and the policy chain — and publishes it
through an **asynchronous worker** so measurement never blocks request handling.

<Note>
  There is **no Prometheus `/metrics` scrape endpoint**. TrustGate is a data-plane proxy: it
  *emits* a rich event per request over **OpenTelemetry** rather than exposing scrape-style
  counters. See [Telemetry](/trustgate/observability/telemetry) for export configuration and
  event shape.
</Note>

## How it works

1. A proxy middleware opens a **request trace** at the start of each request and records
   timings, routing attempts, and per-policy decisions as the request flows.
2. When the response finishes (including after a fully-streamed SSE response), the trace is
   handed to an in-memory **worker queue** — never inline on the response path.
3. Worker goroutines drain the queue, build the event, and **export it** to the configured
   OpenTelemetry collectors (and, for playground requests, a short-lived trace store).

Because the build-and-export step runs on background workers, a slow or unavailable
collector never adds latency to or fails a user request.

## Configuration

| Variable                 | Default | Meaning                                                  |
| ------------------------ | ------- | -------------------------------------------------------- |
| `TELEMETRY_ENABLED`      | `true`  | Master switch — records and emits the per-request event. |
| `METRICS_QUEUE_SIZE`     | `1000`  | Capacity of the in-memory event queue.                   |
| `METRICS_WORKER_COUNT`   | `1`     | Worker goroutines draining the queue.                    |
| `METRICS_FLUSH_INTERVAL` | `5s`    | How often workers flush buffered events.                 |

Trace depth is tuned with `TELEMETRY_ENABLE_REQUEST_TRACES` and
`TELEMETRY_ENABLE_PLUGIN_TRACES` (both default `true`).

## What the event carries

Each event is a single record with identity, request, response, usage, **cost**, a
**latency breakdown** (total / provider / policies / routing / gateway), per-registry
routing **attempts**, and the **policy chain**. The exact schema and how to export it are
documented in [Telemetry](/trustgate/observability/telemetry).

For interactive inspection in the product UI:

* **Playground** — generate a request under a consumer.
* **Activity** — request/response/policy detail for past traffic.
* **Analytics** — aggregates (volume, cost, policy actions).
* Getting started **result** step — first-trace summary after onboarding.
