Monitor your surface

Use the surface Monitoring tab, response headers, and the rejection breakdown to see your test requests, confirm cost tracking, and learn where to look when something goes wrong.

By the end of this page, you will have seen the test requests from the previous guides appear in three places, confirming that traffic is routing, cost is being metered, and guardrail rejections are being classified correctly.

The test requests you already sent provide the traffic used in this page. No new surface configuration is required.

Prerequisites

Steps

See request traffic in the Monitoring tab

The Monitoring tab's summary cards and Surface Traffic Over Time chart, showing a real request spike and non-zero total cost

Each surface has its own Monitoring tab, scoped to that surface alone, with several more charts below the one shown here.

Under SURFACES in the sidebar, select LLM, then open the surface you created in Create your first LLM Surface. Select the Monitoring tab.

Look for the following, updated in near real time:

  • Summary cards: Main LLM, Judge, and Jury latency and token figures, plus total cost, for the selected window.
  • Surface Traffic Over Time and Error Rate Over Time: request volume and the share of requests that failed.
  • Connection Latency Over Time: response time at p50, p95, and p99.
  • Token Usage Over Time: input and output token consumption for every request this surface handled, including the test calls from the previous guides.

Because metering runs per stage, if this surface has Judge or Jury enabled, their cost and token figures appear as separate series rather than folded into one combined number for the whole request. See Cost and usage governance →.

Read cost and usage from the response headers

Send any test request again, this time with curl -i to see the response headers:

curl -k -i -X POST "https://<YOUR_APPLIANCE_HOST><YOUR_SURFACE_ROUTE>/v1/chat/completions" \
  -H "Content-Type: application/json" \
  -d '{
    "messages": [
      { "role": "user", "content": "One more test request." }
    ]
  }'

A buffered response carries x-agent-stream-* headers: trace ID, provider, model, token counts, cached-token count, cost, cache hit or miss, and the ingress wire format the caller used. A client can read cost and usage figures directly from these headers without parsing the response body. A streamed response carries the request-time subset of the same headers. See Observability → for the full signal list.

Check the rejection breakdown

The Rejections by category card, showing one real rejection currently classified as Uncategorized

Still on the Monitoring tab, find the Rejections by category card. Every guardrail block that actually rejects a request, not one that only masks or redacts a value, is classified into a stable taxonomy and charted here, per surface and stage.

The masked email request from Add guardrails and a budget does not appear here at all: masking is not a rejection. If you send a request that Prompt Guard actually rejects, expect the entry to land under Uncategorized rather than PII for now, since a built-in pattern’s rejection doesn’t yet carry a category of its own, a known gap, not a sign you’ve misconfigured anything. If you crossed the monthly cap from that guide, the 429 usage-limit rejection appears here too.

Confirm

Confirm the following three views all show data from your test traffic:

  1. The Monitoring tab’s summary cards and traffic chart show non-zero spend.
  2. The curl -i response in step 2 includes an x-agent-stream-cost-usd header.
  3. Sending a request Prompt Guard actually rejects produces an entry in the rejection breakdown (currently under Uncategorized, not PII — see the note above).

Other monitoring tools

Beyond the per-surface Monitoring tab, the appliance also offers:

  • A real-time management dashboard showing cost, tokens, latency, and throughput across every surface, with per-surface breakdowns.
  • Exports to a native Langfuse connector, OpenTelemetry OTLP, a Prometheus scrape endpoint, or a content-capturing webhook, so the same telemetry reaches tools your team already runs. See Observability →.
  • Governance records, a signed, tamper-evident transcript of what entered and left a surface, if recording is enabled. See Governance records →.

Next steps

  • Observability: The full telemetry model and how to export it to your own stack.
  • Teams and attribution: Attribute this surface’s usage to individual members and teams.
  • Governance records: The signed, tamper-evident transcript of what entered and left a surface.
  • How-to guides: Configure routing, resilience, and additional guardrail layers on your surfaces.