Dashboards

Put the metrics you watch on one page.

Chart request latency next to heap usage next to CPU, from the OpenTelemetry metrics your services already report. Variables filter every widget at once, and a copied link opens the same view for anyone on the project. Every project also opens on an overview of its health.

Six visualizations
Time series, stats, bars, pies and tables
Variables
One selection filters every widget
Formulas
Combine queries, such as A / B
Shared by link
Same range, services and variable values
#variables

Filter every widget at once

A new dashboard comes with $service, $env, $version and $route. Pick values in a chip and every widget whose metric carries that attribute narrows to them.

  • Up to 8 variables, each tied to one attribute your metrics carry
  • A widget filter can use $service as a value, and drops it when nothing is selected
  • Selections live in the URL as var.service=api, so a link keeps them
#widgets

Build a widget against live data

The widget editor previews the chart with the current time range and services while you pick a metric, an aggregation, a group by and filters. Aggregations follow the metric type, so a histogram starts on P95 and a counter on rate per second.

  • Time series, stat, sparkline, bars, pie and table visualizations
  • Up to 6 queries per widget, each drawing its 10 largest groups
  • Drag and resize on a 12-column grid, or move widgets with the arrow keys
#formulas

Ratios and percentages from formulas

Formulas combine a widget's queries by letter into one series, such as A / B for a ratio or A * 100 for a percentage. An assistant can build the same widget through the MCP server.

  • Up to 4 formulas per widget, each with its own legend
  • Numbers, +, -, *, / and parentheses between query letters
  • Values format as numbers, durations, percentages or bytes, or follow the metric's unit
add_widget.json
{
  "project": "storefront",
  "dashboardId": 2,
  "title": "Heap used of limit",
  "type": "chart",
  "queries": [
    {
      "metric": "v8js.memory.heap.used",
      "aggregation": "max",
      "filters": [{ "key": "service.name", "values": ["$service"] }]
    },
    {
      "metric": "v8js.memory.heap.limit",
      "aggregation": "max",
      "filters": [{ "key": "service.name", "values": ["$service"] }]
    }
  ],
  "display": {
    "values": "percent",
    "formulas": [{ "expression": "A / B", "legend": "heap used" }],
    "hideQueries": true
  }
}
#add-to-dashboard

Keep a chart you found in Metrics

Add to dashboard on a metric's page turns the chart into a time series widget with the same aggregation, grouping and filters. Pick an existing dashboard or name a new one.

  • The widget keeps the chart style, line, area or bars
  • Filters other than "is" are listed as not carried over
  • A new dashboard and its first widget are saved together
#sharing

Shared with the project, changed by its creator

Every dashboard is visible to everyone who can view its project. Only its creator and org admins can rename it, edit its widgets or delete it. Everyone else sees it read-only, with Duplicate to make their own copy.

  • Copy link keeps the range, environment, services and variable values
  • Copy link to this exact window pins the start and end for everyone
  • Delete has an Undo that brings the dashboard back with its widgets
#overview

An overview for every project

Each project opens on an overview that needs no setup. It reads the traces your services send and tells whoever is on call whether the app is healthy and what to look at first.

  • Alerts, uptime, incidents and new issues in one strip, refreshed every 30 seconds
  • Eight cards with a sparkline and the change against the previous period
  • Traffic and latency charts with deployment markers, then the slowest endpoints and queries
#faq

Questions

Try it on your own stack.

Every feature is on every plan, priced by the telemetry you send.