Skip to main content
A single dashboard with every panel you actually look at during an incident. Pairs with Prometheus alerts and Production runbook: alerts page you, this dashboard tells you what is wrong, the runbook tells you how to dig.

What it covers

Eight rows, top to bottom:

Prerequisites

  • Grafana ≥ 10.0 (uses time series panels + $__rate_interval).
  • A Prometheus data source scraping the gateway’s /metrics. See Helm → Monitoring.
  • The kube-state-metrics exporter if you want the infrastructure row, it’s how we read pod CPU/memory/replica count.

Import

Save the JSON below as langwatch-gateway.json, then in Grafana: Dashboards → New → Import → Upload JSON. Set the data source to your Prometheus instance on first import; it propagates to every panel.

Reading the dashboard during an incident

The panels are deliberately ordered so an on-call engineer scans top-down:
  1. Request health: is this user-impacting? Latency + error rate together answer it.
  2. Provider health: if error rate is up, which provider? If circuit is open, we’re degraded but not down (fallback is handling it).
  3. Auth cache: if latency is up with upstreams happy, L1 miss spike points at control-plane pressure.
  4. Budgets & debits: outbox shelf > 0 for minutes means debits are failing persistently; correlate with control-plane errors.
  5. Guardrails: block spikes are either a legit policy enforcement or a regression. direction + reason disambiguate.
  6. Streaming: active streams shows concurrency; fail-open rate is the stream_chunk guardrail escape hatch firing (by design).
  7. Cache (passthrough): Anthropic cache_control discount is only visible here; a drop to near-zero hits on a prefix-heavy workload is a regression.
  8. Infrastructure: goroutines climbing monotonically is the leak signal. Replicas + CPU correlate HPA pressure to everything above.

Pairing with alerts and runbook

Use this dashboard as the landing page from each alert’s runbook_url. Example Alertmanager wiring:
When a page fires, the engineer lands on the dashboard, narrows the cause to a row, then opens the runbook recipe that matches that row.

Skipping panels you don’t have metrics for

If you haven’t deployed Redis, the L2 hit-rate line is flat at zero, harmless. If you haven’t enabled networkPolicy, the provider egress row doesn’t need a custom panel since flow is unchanged. The JSON uses label_values(...) so missing labels degrade gracefully rather than breaking the dashboard.

See also