Skip to content
runlot
ObservabilityDashboards

Dashboards

Built-in dashboards for every project, your own dashboards from queries and metrics, dashboards kept in your repository, and read-only public links.

Built-in dashboards

Every project has these, defined by the platform and read-only: Overview, APM, Database, Infrastructure, Errors, Crons, and one for each Durable Object class.

Your own

Create a dashboard under Observability → Dashboards. Each widget is a query, a metric, or a reference to something else in the project.

WidgetSource
timeseries, query_value, top_list, heatmap, distributionA calculations query, or a metric
tableAny query, or a metric
log_streamAn events or invocations query
issue_listRunlot Errors issues, by search and sort
sloOne SLO
monitor_statusMonitors by ID or tag
service_mapThe project's service map
markdownText

A metric widget reads overview, memory, infra or custom (a custom metric by name, with tags and a group-by). Every timeseries carries deploy markers.

Template variables narrow every widget at once. A variable names a tag key — env, version, route, region, or one of your own — and a widget uses it by writing "$name" as a filter value. The dashboard's time range overrides any range in a widget's query.

A dashboard holds up to 50 widgets and 10 variables. Free has 3 custom dashboards per project; Pro has no limit.

Dashboards as code

Every .json file in .runlot/dashboards/ is applied when the deployment goes live:

.runlot/dashboards/checkout.json
{
  "key": "checkout",
  "title": "Checkout",
  "variables": [{ "name": "version", "key": "version", "default": "*" }],
  "widgets": [
    {
      "type": "timeseries",
      "title": "Checkout p99",
      "query": {
        "view": "calculations",
        "filters": [
          { "key": "$route", "op": "eq", "value": "/checkout" },
          { "key": "$deployment.version", "op": "eq", "value": "$version" }
        ],
        "calculations": [{ "op": "p99", "key": "$wall_ms" }]
      }
    },
    {
      "type": "top_list",
      "title": "Failure reasons",
      "metric": { "metric": "custom", "params": { "name": "log.checkout.failed", "groupBy": ["reason"] } }
    },
    { "type": "service_map" }
  ]
}
  • key is the dashboard's stable name: lower case, digits, - and _, and it may not start with builtin. A later deploy updates the dashboard with the same key, and removes a repository dashboard whose file is gone.
  • Each file is at most 128 KiB, and a deployment carries at most 50 dashboards. A malformed file fails the deploy instead of silently not appearing.
  • A repository dashboard is read-only in the dashboard UI. Export on any dashboard, built-in ones included, gives you the file to commit.

Sharing

Every dashboard has a URL that any member of the organization can open.

A public read-only link needs two switches. First an admin turns on public dashboard links for the project; it is off by default, and while it is off every public link of the project answers 404. Then Share on a dashboard makes a link. The token is shown once and stored hashed; making a new one replaces the old one, and you can revoke it. A public link serves charts and numbers only — log streams, issue lists and event tables are never served through it.

On this page