---
title: "row"
description: "Child panels are always nested, collapsed or not."
---

> Documentation Index
> Fetch the complete documentation index at: https://slashobserve.com/llms.txt
> Use this file to discover all available pages before exploring further.

# row

## Example

```json
{
  "id": "r_logs",
  "type": "row",
  "title": "Logs",
  "collapsed": false,
  "gridPos": {
    "x": 0,
    "y": 12,
    "w": 24,
    "h": 1
  },
  "panels": [
    {
      "id": "p_errors",
      "type": "stat",
      "title": "Error logs",
      "gridPos": {
        "x": 0,
        "y": 13,
        "w": 6,
        "h": 4
      },
      "datasource": "ch",
      "queries": [
        {
          "query": "SELECT count() FROM otel_logs WHERE SeverityText = 'ERROR' AND $__timeFilter(Timestamp)"
        }
      ],
      "display": {
        "graphStyle": "line",
        "percentChange": true,
        "percentSize": 14
      }
    },
    {
      "id": "p_reuse",
      "type": "table",
      "title": "Requests and errors as a table",
      "gridPos": {
        "x": 6,
        "y": 13,
        "w": 12,
        "h": 4
      },
      "queries": [
        {
          "ref": "A",
          "source": {
            "panel": "p_rps",
            "withTransforms": true
          }
        }
      ]
    },
    {
      "id": "p_candles",
      "type": "candlestick",
      "title": "Open file descriptors",
      "gridPos": {
        "x": 0,
        "y": 17,
        "w": 12,
        "h": 8
      },
      "datasource": "prom",
      "queries": [
        {
          "ref": "open",
          "query": "min_over_time(process_open_fds[5m])"
        },
        {
          "ref": "high",
          "query": "max_over_time(process_open_fds[5m])"
        },
        {
          "ref": "low",
          "query": "min_over_time(process_open_fds[5m])"
        },
        {
          "ref": "close",
          "query": "process_open_fds"
        }
      ],
      "display": {
        "legendMode": "table",
        "legendValues": [
          "mean",
          "p95"
        ],
        "flatColor": "info"
      }
    },
    {
      "id": "p_canvas",
      "type": "canvas",
      "title": "Descriptor limit",
      "gridPos": {
        "x": 12,
        "y": 17,
        "w": 12,
        "h": 8
      },
      "datasource": "prom",
      "queries": [
        {
          "ref": "A",
          "query": "process_max_fds"
        }
      ],
      "display": {
        "elements": [
          {
            "id": "limit_icon",
            "kind": "icon",
            "left": 5,
            "top": 10,
            "width": 15,
            "height": 30,
            "icon": "bolt",
            "iconColor": "info",
            "stroke": "critical",
            "strokeWidth": 2
          },
          {
            "id": "limit_text",
            "kind": "text",
            "left": 25,
            "top": 10,
            "width": 60,
            "height": 30,
            "textTemplate": "Limit ${__data.fields.Value} descriptors",
            "field": "Value"
          }
        ]
      }
    },
    {
      "id": "p_sites",
      "type": "geomap",
      "title": "Sites",
      "gridPos": {
        "x": 0,
        "y": 25,
        "w": 12,
        "h": 8
      },
      "datasource": "prom",
      "queries": [
        {
          "query": "sum by (lat, lon, icon) (up)"
        }
      ],
      "display": {
        "noRepeat": true,
        "basemap": "xyz",
        "basemapUrl": "https://tile.example.com/{z}/{x}/{y}.png",
        "basemapMinZoom": 1,
        "basemapMaxZoom": 12,
        "layers": [
          {
            "type": "markers",
            "name": "Sites",
            "location": "coords",
            "latField": "lat",
            "lonField": "lon",
            "symbolField": "icon",
            "text": "Site",
            "textAlign": "left",
            "textOffsetX": 6,
            "rotation": 45,
            "fillOpacity": 0.6,
            "symbolAlign": "right",
            "symbolVerticalAlign": "bottom",
            "showLegend": true
          }
        ]
      }
    },
    {
      "id": "p_share",
      "type": "piechart",
      "title": "Requests by pod",
      "gridPos": {
        "x": 0,
        "y": 33,
        "w": 8,
        "h": 8
      },
      "datasource": "prom",
      "queries": [
        {
          "query": "sum by (pod) (rate(http_requests_total{service=\"checkout\"}[5m]))",
          "instant": true
        }
      ],
      "display": {
        "sort": "asc"
      }
    },
    {
      "id": "p_lines",
      "type": "logs",
      "title": "Error lines",
      "gridPos": {
        "x": 8,
        "y": 33,
        "w": 16,
        "h": 8
      },
      "datasource": "ch",
      "queries": [
        {
          "query": "SELECT Timestamp, SeverityText, Body FROM otel_logs WHERE $__timeFilter(Timestamp) ORDER BY Timestamp DESC LIMIT 100",
          "format": "logs"
        }
      ],
      "display": {
        "showTime": true,
        "showLabels": true,
        "lineFields": [
          "SeverityText",
          "Body"
        ],
        "showAttributes": false,
        "timePrecision": "ns"
      }
    },
    {
      "id": "p_states",
      "type": "state-timeline",
      "title": "Pod states",
      "gridPos": {
        "x": 0,
        "y": 41,
        "w": 12,
        "h": 8
      },
      "datasource": "prom",
      "queries": [
        {
          "query": "up{service=\"checkout\"}"
        }
      ],
      "display": {
        "perPage": 5
      }
    },
    {
      "id": "p_history",
      "type": "status-history",
      "title": "Pod status history",
      "gridPos": {
        "x": 12,
        "y": 41,
        "w": 12,
        "h": 8
      },
      "datasource": "prom",
      "queries": [
        {
          "query": "up{service=\"checkout\"}"
        }
      ],
      "display": {
        "perPage": 5
      }
    },
    {
      "id": "p_drift",
      "type": "gauge",
      "title": "Clock drift",
      "gridPos": {
        "x": 0,
        "y": 49,
        "w": 6,
        "h": 6
      },
      "datasource": "prom",
      "unit": "s",
      "min": -50,
      "max": 50,
      "neutral": 0,
      "queries": [
        {
          "query": "node_timex_offset_seconds{service=\"checkout\"}",
          "instant": true
        }
      ]
    },
    {
      "id": "p_latency_heat",
      "type": "heatmap",
      "title": "Request latency over time",
      "gridPos": {
        "x": 0,
        "y": 55,
        "w": 12,
        "h": 8
      },
      "datasource": "prom",
      "queries": [
        {
          "query": "http_request_duration_seconds{service=\"checkout\"}"
        }
      ],
      "display": {
        "calculate": true,
        "xBuckets": {
          "mode": "count",
          "value": 12
        },
        "xBucketScale": "log",
        "xBucketLogBase": 10
      }
    }
  ]
}
```

From [`spec/examples/evolved-features.json`](https://github.com/slashobserve/slashobserve/blob/main/spec/examples/evolved-features.json).

## Fields

| Field | Type | Description |
| --- | --- | --- |
| `id` (required) | `string` | Stable across versions; comments anchor to it. |
| `type` (required) | `"row"` |   |
| `title` (required) | `string` |   |
| `gridPos` (required) | `gridPos` | Position on the 24-column grid; x + w must not exceed 24. |
| `collapsed` | `boolean` |   |
| `repeat` | `variableName` | Referenced in queries as $name, ${name} or ${name:format}. |
| `panels` | array of `dataPanel` or `textPanel` or `placeholderPanel` or `dashlistPanel` or `newsPanel` | At most 200 items. |

Generated from [`spec/schema/observespec.v0.json`](https://github.com/slashobserve/slashobserve/blob/bac0fe39/spec/schema/observespec.v0.json) at `bac0fe39`. [Report a problem](https://github.com/slashobserve/slashobserve/issues/new).
