Overview

June 25, 2026 · View on GitHub

title: Overview description: The Observability landing dashboard - eight KPI cards, fifteen charts across six sections, and a live activity grid summarising every other tab's headline number.

Overview

Overview dashboard populated after a multi-turn chat session - eight KPI cards along the top (Calls, Tokens, Cost USD, Error rate, p95 latency, Heap used, Process CPU, Active LLM ops), the Request rate chart below showing per-minute spikes, followed by sections for LLM, Tokens & Cost, Tools / MCP, Vector / RAG, System, Logs & outcome, and a recent activity grid

Overview after a brief chat session - one card or chart per concern, with every section linking conceptually to the dedicated tab that owns it. The eight KPI cards at the top stay visible regardless of activity; the charts below fill in as data accumulates.

Route - sidebar → top item → observability?tab=overview

Purpose - single-page summary of every other tab's headline number. Open it first when you don't yet know what you're looking for.

When to look here

  • "Has anything changed in the last 30 minutes?" - every KPI has a sparkline showing the trend across the window.
  • "Where do I drill in?" - every section header links conceptually to a dedicated tab (Tokens & Cost, MCP Servers, etc.). Spot the anomaly here, then jump.
  • "What's the system doing right now?" - heap, CPU, active LLM ops gauges live on this page.
  • "Last 10 traces" - the activity grid at the bottom shows the most recent traces; click any row to open Trace Detail.

Controls

All dashboards share the Observability global settings - time window (LAST_5M · LAST_10M · LAST_20M · LAST_30M · LAST_1H · LAST_3H, default LAST_30M), refresh interval, custom From/To range. Sparklines and charts retick to the selected window. Overview adds no tab-specific controls.

KPI cards (eight)

Each headline metric carries a 60-sample sparkline showing the trend:

CardShowsSource
CallsTotal chat turns in the windowTraceRecord count
TokensSum of input + output tokensTraceRecord.totalTokens (falls back to inputTokens + outputTokens when total is null)
Cost (USD)Total cost across the windowModelPricingService.cost() × token counts
Error ratePercentage of traces with status=ERRORTraceRecord.status
p95 latency95th-percentile turn durationObservabilityTimeSeries.compute().p95LatencyMs
Heap usedCurrent JVM heap utilisation (live gauge)MeterRegistry jvm.memory.used (heap area)
Process CPUCurrent process CPU percentage (live gauge)MeterRegistry process.cpu.usage
Active LLM opsNumber of in-flight Spring AI operationsMeterRegistry LongTaskTimer active counts (ChatClient + Advisor + Vector store)

Charts - six sections, fifteen charts

Each section maps to one dedicated tab.

LLM section → AI Models

ChartTypeReading
Request rateLine, calls / min - drag to zoomBursts indicate batch workloads or runaway loops
Latency p50 / p95 / p99Multi-line, msp95 - p50 gap widening means tail-latency regression
Provider mixDonut, by call countSanity check that the configured provider is actually receiving traffic
Top modelsHorizontal bar (top 6)Spot accidental model drift if an unfamiliar model appears

Tokens & Cost section → Tokens & Cost

ChartTypeReading
Tokens (input + output)Stacked bar, 2-seriesDisproportionate output → verbose model; disproportionate input → context-stuffing

Tools / MCP section → Tool Studio · MCP Servers

ChartTypeReading
Tool calls / minuteLineSpike → agent in a tool-heavy phase (e.g. multi-step research)
Transport mixDonut - in-process / stdio / Streamable HTTP / SSEIf one transport dominates unexpectedly, the agent is rerouting through it
Top toolsHorizontal bar (by call count)"Which tool is the agent reaching for most"
Top MCP serversHorizontal bar (excludes in-process)"Which external dependency is busiest"

Vector / RAG section → Vector Database

ChartTypeReading
Vector ops / minuteLine - db.vector.client.operation spansDrop to zero → RAG offline; sustained high → expensive retrieval
top_k distributionHorizontal barSanity-check the top_k parameter spread; outliers indicate misconfigured agents

System section → Host

ChartTypeReading
Heap used (MB)Rolling line - 60-sample historyClimbing without GC drop → leak suspicion
Process CPU (%)Rolling line - 60-sample historySustained high CPU during quiet periods → background work issue

Logs & outcome section → Logs · Traces

ChartTypeReading
Logback events by levelHorizontal bar - lifetime totalsSudden growth in ERROR/WARN → drill into Logs tab
Outcome mixStacked bar - OK / Error per bucketVisualises trend rather than absolute level

Recent activity table

The bottom of the page is a grid of the most recent 10 traces, refreshed in real time from the ring buffer's live stream:

ColumnSource
TimeTraceRecord.startEpochMs (HH:mm format)
ConvTraceRecord.conversationId (truncated to 10 chars)
ProviderTraceRecord.provider (from gen_ai.system)
ModelTraceRecord.model (from gen_ai.response.model or gen_ai.request.model)
In / OutInput and output tokens, slash-separated
DurationTraceRecord.durationMs, human-formatted
StatusOK / ERROR / CANCELLED

Click any row → opens the Trace Detail dialog. This is the fastest path from "something looks off in the overview" to the full span timeline. The same dialog is reachable from the Traces tab.

Cross-references