Skip to content

Reference

row

Child panels are always nested, collapsed or not.

Example

{
  "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.

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 at bac0fe39. Report a problem.

/observeOpen source under Apache-2.0.Grafana is a trademark of Grafana Labs. SlashObserve is not affiliated with or endorsed by Grafana Labs.

Search pages and headings.