Skip to content

Observability Tour

Everything the gateway does is observable: dashboards for the questions executives ask, logs for the questions engineers ask, and Prometheus metrics for the machines. This tour walks the read side of the platform — pair it with the governance tour, which generates interesting data to look at.

Mission Control is the operations dashboard in the Admin Console, organized into tabs:

Tab What it answers
Overview Health at a glance — traffic, spend, error rate and governance KPIs for the selected period.
Cost FinOps view: dollars by model, provider, resource group and modality (chat, images, speech, transcription, video).
Governance Guardrail blocks, policy decisions and enforcement outcomes — what was stopped, redacted or warned, and why.
Agents Agent activity and authorization decisions for A2A and agent-identity traffic.
Usage Requests and tokens over time, sliced by model, group and user.
Reliability Latency, error rates, provider health and throughput — the SRE view.
Alerts Fired usage and budget alerts, with their thresholds and current utilization.

Mission Control overview dashboard

Two selectors apply across tabs:

  • Time range — 24 hours, 7 days, 30 days, 90 days or All Time (persisted per browser).
  • PlaneGoverned (inline traffic the gateway proxied and enforced policy on), Observed (telemetry imported from provider admin APIs via Traffic Data Import — observability only, never enforced), or All. This keeps enforced and merely-imported numbers honest when you use both.

Mission Control alerts tab

Alerts are configured per resource group (usage thresholds, budget warning percentages) — see alerts.

Brutor writes three distinct records, and knowing which to open saves time:

Log One row per… Use it for
Proxy logs runtime request through the core proxy (LLM, MCP, A2A, skills — including blocked ones) Debugging a specific call: status, latency, model, guardrail/limit outcome, correlation ID
Usage logs metered unit of consumption (tokens, cost) Cost attribution and quota accounting — this is the billing-grade ledger
Audit logs admin/config action and governance decision “Who changed what, and who was blocked from what” — the compliance trail

Proxy logs in the Admin Console

Every runtime response carries an X-Correlation-Id header; paste it into the proxy-log search to jump straight to the matching row. For LLM calls the logged request body is the outbound body — the request actually sent to the provider, after model resolution, default injection and format translation — which is what you want when debugging “what did the provider actually see?”.

Audit logs in the Admin Console

When tenant compliance frameworks are enabled (SOC 2, EU AI Act, HIPAA, GDPR Art. 30), audit rows carry the matching framework tags, and the compliance dashboard can export evidence — see compliance.

Telemetry writes are batched and asynchronous: under extreme backpressure the gateway sheds proxy-log and metric rows before it ever delays a request, but usage rows are never dropped. The /health endpoint’s background_writes.dropped counter tells you if shedding has occurred.

You don’t have to poll a dashboard to know a budget is running out — the gateway tells the calling application. When a resource group crosses a limit’s warning threshold (by default 85% of a daily token limit, 80%/90% of a daily/monthly dollar budget), responses carry an X-Usage-Warning header:

X-Usage-Warning: Daily budget at 82%: $8.20 / $10.00

Agents and portals can surface this to users before requests start failing with 429. See limits for the thresholds and what blocks versus warns.

The core proxy exposes Prometheus metrics at GET /metrics on :8100 — request counts and latencies by proxy type and status, plus guardrail-hit counters. Scrape it like any other target:

prometheus.yml
scrape_configs:
- job_name: brutor-gateway-core
static_configs:
- targets: ["gateway-core:8100"]

The full metric reference lives in observability → metrics.

The brutor-gateway-core repository’s Docker Compose ships a complete local observability stack alongside the proxy, pre-wired for development:

Component Port Role
OpenTelemetry Collector 4317 (OTLP gRPC) / 4318 (OTLP HTTP) / 8889 (Prometheus export) Receives traces and metrics from the proxy
Prometheus 9090 Metrics store (30-day retention)
Loki 3100 Log aggregation
Grafana 3010 Dashboards over all of the above
Terminal window
cd brutor-gateway-core
docker compose up -d
# Grafana → http://localhost:3010

This stack is for development and self-hosted setups; in production you’d point the OTLP exporters and the /metrics scrape at your existing observability platform.