Choose an interface
MCP is optional. It is useful for agent-driven investigation, but the dashboard, SDK, and REST API expose deployment observability without it.
What you can see, by provider
Request, latency, token, cost, and engine telemetry (queue depth, KV-cache usage) work identically everywhere — they come from the request path and the engine, not the hardware. The GPU hardware snapshot (per-GPU utilization, memory used/total, power draw, temperature, plus aggregates) rides the replica heartbeat and depends on what the serving agent can reach on each provider’s boxes:
Two design contracts worth knowing: the snapshot is fail-soft (a box where no GPU library works simply omits the readings — GPU telemetry can never break the heartbeat that liveness monitoring depends on), and it is vendor-neutral in shape — NVIDIA and AMD boxes emit the identical schema, so dashboards and Prometheus queries never branch on vendor.
Verify observability end to end
1. Select a serving deployment
id and export it for the REST examples:
2. Generate buffered and streaming traffic
Send a regular request with the Veri CLI:include_usage gives Veri authoritative token counts for the stream. Veri requests it automatically when traffic passes through the deployment proxy, but setting it explicitly makes the test self-documenting.
3. Inspect the dashboard
Open Analytics in the Veri dashboard and select the deployment. Choose Past hour, then click refresh. After the two requests finish, expect:- Request and token volume to be non-zero.
- The recent requests table to contain both requests.
- End-to-end latency samples for successful buffered and streaming requests.
- TTFT and TPOT samples for the streaming request.
- A zero or near-zero error rate.
- Cost-efficiency values once the window contains successful requests with output tokens.
4. Verify with the Python SDK
datetime values are serialized as RFC 3339 timestamps. You can also pass RFC 3339 strings directly.
A minimal automated smoke test can assert:
5. Verify with REST
Lifetime counters:from and to are omitted:
Scope results to a single replica
Themetrics/timeseries, metrics/engine-timeseries, and requests endpoints accept an optional replica_id query parameter. List replica IDs with GET /v1/deployments/$DEPLOYMENT_ID/replicas:
replica_id is set, buckets, the window summary, engine gauges (queue depth and KV-cache utilization), and recent requests are scoped to that replica. Cost efficiency becomes replica-scoped as well: window cost is the replica’s own active interval multiplied by its per-box GPU rate. Scoped metrics responses echo replica_id at the top level. The ID must be a replica of the deployment; unknown IDs return 404. Omit the parameter to keep deployment-wide aggregates.
See the interactive API reference for complete response schemas.
Request traces
Request telemetry (above) records that requests happened; traces additionally capture the full request and response bodies so you can see exactly what was asked and what the model answered. Traces are opt-in per deployment and off by default, because enabling them stores your end users’ prompt and completion content. Opt in at create time:client.deployments.create(..., trace_bodies=True).
Browse traces from the deployment page in the dashboard, the CLI, or the API:
- Cross-linking. Every trace’s
metadata.veri_request_idmatches an id fromdeployments.requests(), so you can join body-level traces with the timing, token, and error telemetry for the same request. - Model version identity. When the request was answered by a registered
model version (an adapter alias on a fleet, or a fleet built from a
registered model),
metadata.model_version_idcarries that version’s id — the same value as the request log’smodel_version_id— so per-version quality can group traces by identity instead of by a serve-name string that moves on every promote. - Retention.
basetraces are deleted after 14 days,extendedafter 400. - Pricing. The first 5,000 base-retention traces per workspace each month are free; beyond that, 5.00 per 1k at extended, metered from credits at month end.
- Never in the request path. Capture is asynchronous and drop-tolerant: if the trace store is unavailable, requests are unaffected and the affected traces are dropped.
- Streaming. Bodies of streamed (
stream: true) responses are not captured yet; those requests still appear in request telemetry.
Export metrics to Prometheus
GET /v1/metrics/export returns your account’s deployment and replica metrics in Prometheus text exposition format (text/plain; version=0.0.4). Authenticate with your API key as a Bearer credential, exactly like every other endpoint. The response covers your deployments only.
Exposed metrics
Per-deployment metrics carrydeployment_id and model labels:
Per-replica metrics add
replica_id, gpu_type, and region labels. Only live replicas (queued, provisioning, serving, unhealthy, or draining) are exported:
Metrics only appear when the underlying data exists: a replica that has not reported a heartbeat yet exports no series, and GPU series are absent where the agent has no hardware telemetry backend (see What you can see, by provider — NVIDIA boxes use NVML, ROCm boxes use amdsmi/rocm-smi, and docker-isolated providers omit them for now).
Prometheus scrape configuration
prometheus.yml
Grafana Cloud
Grafana Alloy forwards the scrape to your Grafana Cloud Prometheus instance:config.alloy
Datadog agent
Use the OpenMetrics check:conf.d/openmetrics.d/conf.yaml
Example alert rule
Alert when requests queue up faster than a replica drains them, and when telemetry goes stale:alerts.yml
Investigate with MCP
Set up Veri MCP by following Model Context Protocol. In read-only mode, all observability tools remain available; only tools that create, cancel, stop, or rescore resources are removed. Useful deployment tools:
Try these prompts:
Inspect deployment dep_... over the past hour. Summarize request volume, p50/p95/p99 TTFT and end-to-end latency, token throughput, error rate, and cost efficiency. Then list failed requests and group them by error category. Do not modify resources.
Compare the past 24 hours with the preceding 24 hours for deployment dep_.... Identify latency, error-rate, throughput, or cost regressions and cite the metric values behind each conclusion.
Review deployment dep_... and my billing overview. Explain whether request volume, output-token efficiency, errors, or the current GPU burn rate is the main cost risk. Do not modify resources.
Agent responses are only as complete as the telemetry window. Include the deployment ID and an explicit period in prompts when you need reproducible results.
Metric semantics
Request timing
TTFT and TPOT are most meaningful for streaming responses. TPOT is only calculated when the upstream engine reports usage. Latency percentiles use successful requests so application and transport failures do not distort the serving-latency distribution.
Traffic and errors
Each terminal request record can include:- Prompt, cached prompt, and completion tokens.
- Request and response byte counts.
- HTTP status and finish reason.
- Whether the response streamed and whether usage was reported.
- A bounded error category and diagnostic message.
- Client cancellation or disconnection state.
- Request start and completion timestamps.
error_category and message.
Cost efficiency
The dashboard and time-series response derive:- Cost per successful request.
- Cost per million output tokens.
- Tokens per dollar.
- Total deployment cost for the selected window.
usage_reported when investigating missing efficiency data.
Engine health
Replica heartbeats provide:- Running and waiting requests.
- KV-cache utilization.
- Prefix-cache hit rate.
- Generation token throughput.
- Active replica count.
- GPU hardware telemetry: utilization, memory used and total, power draw, and temperature.
GPU hardware telemetry
Each replica reports NVML readings with its heartbeat.GET /v1/deployments/$DEPLOYMENT_ID/replicas returns the latest snapshot per replica:
The
metrics/engine-timeseries endpoint adds gpu_utilization (mean across reporting replicas) and gpu_memory_used_bytes (summed) to each bucket and to each per-replica series. All GPU fields are absent or null when a replica does not report telemetry, for example on hardware without NVML.
GPU utilization is a debugging metric, not a scaling signal: it measures the share of time any kernel was resident on the chip, not how much load the engine is under. Scale on queue depth (waiting requests) and KV-cache utilization instead.
Troubleshooting
Where to go next
MCP setup
Let an agent query deployment, training, and billing context.
Deployment commands
Generate traffic, benchmark an endpoint, and inspect recent requests.
API reference
Integrate metrics and request history into your own systems.
Deployment billing
Understand hourly GPU billing and scale-to-zero behavior.

