Skip to content
Last9
Book demo

Creating Dashboards

Learn how to create custom dashboards with panels, visualization types, and query configurations in Last9

Last9 Dashboard Add Panel

You can create dashboards in Last9 either from scratch or by promoting queries from the Logs and Traces explorers.

Creating a Dashboard from Scratch

  1. Navigate to Dashboards in the left sidebar
  2. Click Create Dashboard
  3. Enter a name for your dashboard
  4. Click Add Panel to add your first visualization
  5. Configure the panel query and visualization type (see below)
  6. Click Save to save the dashboard

Creating from Service Overview

You can add any performance chart from the Service Overview directly to a dashboard without writing a query. The underlying PromQL is extracted automatically.

Add to Dashboard from Service Overview

  1. Navigate to Discover > Services and open a service
  2. On the Overview tab, hover over any chart panel
  3. Click the ⋮ menu in the top-right corner of the panel
  4. Select Add to Dashboard
  5. Choose to add to an existing dashboard or create a new one
  6. Provide a panel name and click Save

The following chart types are supported:

ChartVisualization added
APDEX ScoreTime Series
Response TimeTime Series
AvailabilityTime Series
Throughput & Error RateTime Series
Error DistributionTime Series

Creating from Logs or Traces Explorer

You can promote aggregated queries from the Logs Explorer or Traces Explorer directly into dashboard panels.

  1. Build an aggregation query in the Logs Explorer or Traces Explorer
  2. Click the Add to Dashboard button
  3. Choose to create a new dashboard or add to an existing one
  4. Provide a descriptive panel name
  5. You will be redirected to the dashboard with your query added as a panel

For detailed instructions on building aggregation queries, see:

Panels

Panels are the building blocks of a dashboard. Each panel contains a query and a visualization.

Adding a Panel

  1. Open a dashboard and click Add Panel
  2. Choose a visualization type from the tabs at the top (Time Series, Bar Chart, Doughnut Chart, Gauge Chart, Stat, Table, Heatmap, or Status History)
  3. Select a telemetry type (Metrics, Logs, or Traces)
  4. Write your query using the appropriate query mode
  5. Configure panel options (legend, units, thresholds)
  6. Click Save to add the panel to your dashboard

Visualization Types

TypeDescriptionBest For
Time SeriesLine or area charts plotted over timeMonitoring trends, comparing metrics over time
Bar ChartVertical or horizontal bar charts, with optional stackingComparing categories, distribution analysis
Doughnut ChartPie/donut chart showing proportionsPercentage breakdowns, resource allocation
Gauge ChartDial indicator showing a single value against a rangeUtilization metrics, threshold monitoring
StatSingle prominent value displayKey metrics at a glance, counters
TableTabular data with sorting, filtering, and summariesDetailed breakdowns, top-N analysis
HeatmapColor-coded cells showing value density over timeLatency distributions, spotting outliers
Status HistoryDiscrete state blocks per series over timeUp/down status, pass/fail checks over time

Telemetry Types and Query Modes

Each panel supports different query modes depending on the selected telemetry type:

Metrics panels use PromQL:

rate(http_requests_total{service="api"}[5m])

Logs panels support two modes — Builder for visual query construction, and LogQL for writing queries directly:

sum by (severity) (count_over_time({service="api"} [1m]))

Traces panels use the Query Builder with filter and aggregate stages to query span data.

Query Modes

Each query can run in one of two modes:

ModeDescriptionUse Case
RangeReturns data points over a time rangeTimeseries, bar charts, heatmaps
InstantReturns a single data point at the current timeStat panels, gauge panels, tables

Panel Configuration

Chart Settings

These options are available under Chart Settings when editing a panel:

  • Unit: Set the unit format for panel values (see Units below)
  • Legend Type: Auto (uses the query name as the legend label) or Custom (lets you define your own legend label)
  • Legend Placement: Bottom, Left, or Right
  • Display Type: Line or Area (Time Series panels only)

Bar Chart Options

  • Orientation: Vertical or horizontal bars
  • Stacked: Enable stacking to show cumulative values

Table Settings

OptionDescription
TransposeSwap rows and columns (max 20 columns when transposed)
DensityCompact or comfortable row spacing
Summary FooterDisplay a summary row at the bottom
Summary TypeAggregation for summary: sum, avg, min, max, first, last, count, p50, p90, p95, p99
ThresholdsColor cells based on their values. Set a value, color, and target (Text or Background). Higher thresholds take precedence. Click + Add for multiple thresholds
Column VisibilityShow or hide individual table columns

Panel Description

Every panel has an optional Description field in the panel editor. The description is plain text and is not subject to character restrictions. It appears in the panel’s info tooltip (the ⓘ icon in the panel header) alongside the query list.

Use descriptions to document what a panel measures, the expected range, or links to relevant runbooks.

Units

Apply unit formatting to panel values. Select from the built-in units or type a custom unit:

UnitFormat
Bytes (IEC)KiB, MiB, GiB, TiB (factors of 1024)
Bytes (SI)KB, MB, GB, TB (factors of 1000)
Bytes/sec (IEC)KiB/s, MiB/s, GiB/s
Bytes/sec (SI)KB/s, MB/s, GB/s
Nanosecondsns precision
Millisecondsms precision
Secondss precision

You can also enter any custom unit (e.g., requests/s, %, ops) by typing directly into the unit field.

Threshold Bands

Gauge, Time Series, and Bar panels support configurable threshold bands. Bands are color-coded regions drawn over the chart to indicate normal, warning, and critical ranges.

Gauge panels: Configure thresholds under Gauge Settings in the panel editor. Add one or more threshold values, each with a color. The gauge arc is colored in segments from the lowest threshold to the highest. The panel defaults (previously fixed at 85% and 95%) are now editable.

Time Series and Bar panels: Configure thresholds under Thresholds in the panel editor. Each threshold is drawn as a filled band from its value to the next threshold (or to the axis edge for the topmost). On horizontal bar charts, bands are on the x-axis; on vertical charts and line charts, bands are on the y-axis.

To add a threshold:

  1. Open the panel editor and expand Thresholds (or Gauge Settings for gauge panels)
  2. Click + Add
  3. Enter the threshold value and pick a color
  4. Save the panel

Field Overrides

Field overrides let you target a specific query or series and change its display properties without altering the query data. Panel-wide settings remain the default; an override applies only to the matched series.

How Overrides Work

Each override rule has:

  • A Matcher — select by query reference (A, B, C…) or by field/series name
  • One or more Properties to override for matched series

Supported properties:

PropertyDescription
Display nameThe label shown in the legend and tooltip
UnitOverride the panel-wide unit for this series
ColorFix the series to a specific color
Axis placementLeft, Right, or Hidden
DecimalsNumber of decimal places shown
Min / MaxOverride the axis min or max for this series

Adding an Override

  1. Open the panel editor and expand Field Overrides
  2. Click + Add override
  3. Select a matcher type: Query or Field name
  4. Choose the query reference or type the field name
  5. Click + Add property and choose a property to override
  6. Set the value and repeat for additional properties
  7. Save the panel

Overrides do not mutate query data — they affect rendering only. Panel-wide defaults apply to any series not matched by an override.

Transformations

Transformations run as an ordered pipeline after queries complete and before the panel renders. Each transformation in the list receives the output of the previous one. Transformations do not affect the underlying data — they change what the panel displays.

Available Transformations

TransformationDescription
OrganizeRename, reorder, or hide fields
MergeMerge multiple query results into a single table
Calculate fieldAdd a new field computed from existing fields (e.g., sum, difference, percentage)
Rename by regexRename fields using a regex pattern and replacement
Series to columnsPivot multiple series into columns of a single table keyed by a shared time column
Series to rowsFlatten multiple series into a single table with a name column per series
Group byGroup rows by one or more fields and aggregate the rest
Join by fieldJoin multiple query results on a common field
Sort bySort table rows by a field, ascending or descending

Adding a Transformation

  1. Open the panel editor and select the Transform tab
  2. Click + Add transformation
  3. Select a transformation type from the list
  4. Configure the transformation parameters
  5. Add more transformations as needed — they execute in order, top to bottom
  6. Save the panel

Repeat Panels

Repeat panels render one panel instance per selected value of a variable. This lets you create a single panel definition and display it side-by-side for each service, host, or environment selected in a variable — without duplicating panels.

Setting Up a Repeat Panel

  1. Open the panel editor and expand Repeat
  2. Choose a Variable from the list of dashboard variables. Multi-select variables work best here
  3. Choose a Direction: Horizontal (instances side by side) or Vertical (stacked)
  4. Save the panel

When the variable selection changes, the dashboard renders or removes instances automatically. Editing the source panel updates all instances — generated instances are not independently persisted.

Per-Panel Time Override

By default, every panel uses the dashboard time range. A per-panel time override lets one panel compare a different period — for example, comparing last week’s traffic on the same dashboard as the current hour.

Relative Time

Sets a fixed lookback window for the panel, overriding the dashboard time range’s window length while keeping the dashboard’s selected end time. For example, entering 6h on a dashboard scoped to a historical range shows the 6 hours ending at that range’s end time, not the most recent 6 hours.

Time Shift

Offsets the panel’s effective time range (including any Relative Time lookback) backward from the dashboard’s end time. For example, a shift of 1w moves a “Last 1 hour” dashboard view to the equivalent hour one week ago for that panel.

Configuring a Time Override

  1. Open the panel editor and expand Time Override
  2. Enter a Relative Time duration (e.g., 1h, 7d) to fix the panel’s lookback window, or leave blank to inherit the dashboard range
  3. Enter a Time Shift duration (e.g., 1w, 24h) to offset the panel backward, or leave blank for no shift
  4. Save the panel

An active override is shown in the panel header. Dashboard-wide time controls remain the default for all other panels.

Layout

Panels can be repositioned by dragging the panel header and resized using the handles at the panel edges.

Sections

Add Section dividers to organize panels into named groups. Sections act as visual separators with a label, making it easier to navigate dashboards with many panels. You can drag panels between sections and reposition sections themselves by dragging.

Links add navigation from a dashboard to another dashboard, a runbook, or any external page. Every link opens in a new tab.

Last9 supports three link surfaces. All three use the same editor.

SurfaceWhere you configure itWhere it appears
Dashboard linksDashboard Settings > Custom LinksThe dashboard header menu
Panel linksPanel editor > Panel LinksThe panel header menu
Data linksPanel editor > Data LinksWhen you click a data point on a chart

Panel Links and Data Links in the panel editor

  1. Open the Custom Links, Panel Links, or Data Links section
  2. Click Add Link
  3. Enter a Title — the text shown in the menu
  4. Enter the URL
  5. Under Options, optionally enable Keep Time Range and Include Variables
  6. Save the dashboard or the panel

Dashboard links add a Type field with two choices. Panel links and data links are always a single URL.

  • URL: a single address. The address can contain tokens, as described in Link Tokens.
  • Dashboards with tags: a submenu that lists every other dashboard carrying all of the tags you select. The submenu is labelled with those tags. A dashboard gets its tags in Edit > Tags, and tags are case insensitive. If no dashboard matches, the link does not appear.
OptionEffect
Keep Time RangeAdds the dashboard time range to the URL as from and to parameters
Include VariablesAdds the selected dashboard variable values to the URL as parameters

Both options skip a parameter that the URL already sets. For example, if the URL ends with ?from=now-1h, then Keep Time Range does not overwrite that value.

For a Dashboards with tags link, both options apply to every dashboard the submenu opens.

A token is a placeholder that Last9 replaces with a live value. Tokens work in the Title field and in the URL field. Both ${name} and $name are accepted.

TokenResolves to
${variable}A dashboard variable value. Multiple values join with commas
${variable:queryparam}The same variable as var-name=value&var-name=value2
${__from}, ${__to}The start and the end of the dashboard time range
${__url_time_range}The full range as from=...&to=...
${__value.raw}The value of the data point you clicked
${__value.text}The same value, formatted for display
${__value.time}The timestamp of the data point you clicked, in milliseconds
${__series.name}The name of the series you clicked
${__field.labels.<label>}A label on the data point you clicked, for example ${__field.labels.service}
${__data.fields.<label>}An alias of ${__field.labels.<label>}

For example, this data link searches an internal runbook for the service behind the point you clicked, over the dashboard’s time range:

https://runbooks.internal.example.com/search?q=${__field.labels.service:percentencode}&${__url_time_range}

Use :percentencode on any value that lands inside a query parameter, so a value containing a space or a slash still produces a valid URL.

To link to a view inside Last9, open that view, copy the URL from the address bar, and replace the part you want to make dynamic with a token. The address bar is the source for those query parameters.

  • The data point tokens — ${__value.raw}, ${__value.text}, ${__value.time}, ${__series.name}, ${__field.labels.<label>}, and ${__data.fields.<label>} — resolve in data links only. Only a data link carries a clicked point. A dashboard link or a panel link that uses one of these tokens never resolves.
  • If any token in a URL does not resolve, Last9 drops the link and does not show it. A title behaves differently: an unresolved token renders as blank text, and an empty title falls back to Open link.
  • Last9 allows the http: and the https: schemes only. It checks the scheme before and after token substitution, and rejects every other scheme.

CSV Datasource

The CSV datasource lets you upload a CSV file and visualize it as a dashboard panel without ingesting it as metrics. It is intended for ad-hoc analysis of data exported from external tools.

How It Works

  • One CSV per dashboard, stored inline in the dashboard JSON (no external storage)
  • Maximum file size: 1 MB, UTF-8 encoding, header row required
  • Column types are inferred on upload and can be overridden
  • If a time column is designated, the dashboard time picker filters CSV rows by that column
  • All visualization types are supported: Time Series, Line, Bar, Heatmap, Status History, Doughnut, Gauge, Stat, Table

Uploading a CSV

  1. Open a dashboard and click Add Panel
  2. Under the datasource selector, choose CSV
  3. Click Upload CSV and select your file (UTF-8, header row required, max 1 MB)
  4. Review the inferred column types. Click a column header to override the type if needed
  5. Optionally designate a Time Column — rows outside the dashboard time range will be hidden
  6. Choose a visualization type and configure the panel
  7. Save the panel

Query Options by Visualization Type

Stat and Gauge: choose a Row Reducer to aggregate all rows into a single value:

ReducerResult
LastThe last row’s value (default)
AvgAverage across all rows
SumSum of all rows
MinMinimum value
MaxMaximum value

Time Series, Line, and Bar: optionally select a Series/Group-by column to split the data into multiple series, one per unique value in the group column.

Limitations

  • Joins with live metrics, logs, or traces are not supported
  • Only one CSV per dashboard
  • Replacing the CSV file is silent — panels that reference a column that no longer exists enter an error state until the column mapping is updated
  • CSV panels inherit the dashboard’s edit permissions; no separate access control

Troubleshooting

Please get in touch with us on Discord or Email if you have any questions.