10 KiB
Grafana Panels and Visualizations - Detailed Reference
What is a Panel?
A panel is the basic building block of a Grafana dashboard. Each panel combines:
- A query (or multiple queries) to a data source
- A visualization type to display the data
- Field configuration (units, thresholds, color mappings)
- Optional transformations to reshape the data before display
Panel Editor
Open the panel editor by clicking a panel's title > Edit, or clicking Add visualization for a new panel.
Panel Editor Layout
Top bar: Back to dashboard, Discard changes, Save dashboard
Center: Visualization preview (live update as you configure)
Toggle: "Table view" - shows raw query results as a table for debugging
Right sidebar tabs:
- Query - configure data sources and write queries
- Transform - apply data transformations
- Alert - create alert rules from this panel
- Below tabs: visualization-specific options and field config
Query Tab
- Data source selector: Choose which data source to query
- Query editor: Data-source-specific interface (PromQL for Prometheus, LogQL for Loki, SQL for databases)
- Query options:
- Max data points: Limit data points fetched
- Min interval: Minimum auto-calculated interval
- Interval: Override the auto-calculated interval
- Relative time: Override dashboard time range for this panel only
- Time shift: Shift the time range (e.g., to compare to last week)
- + Query: Add multiple queries (labeled A, B, C...)
- Expression: Add server-side math expressions combining query results
Visualization Types
Time Series (default)
Best for: Metrics over time, continuous data
- Renders as lines, points, or bars
- Supports multiple series
- Configurable line width, fill, point size
- Supports thresholds as colored background regions
- Supports annotations overlay
- Graph styles: Lines, Bars, Points; can mix per series
- Stacking: None, Normal, 100%
- Axis: Left Y, Right Y, hidden
- Default visualization - supports alerting
Stat
Best for: Single important metric (KPI display)
- Shows one or more values as large text
- Supports sparkline background
- Color modes: value, background, none
- Can show last value, mean, sum, etc.
- Great for dashboards that need quick status overviews
Bar Chart
Best for: Comparing categorical data
- Horizontal or vertical orientation
- Grouped or stacked
- Supports labels on bars
Gauge
Best for: Showing a value relative to min/max range
- Circular gauge with arc
- Configurable thresholds set colors
- Shows current value prominently
Bar Gauge
Best for: Multiple metrics as horizontal/vertical bars
- Useful for comparing many items
- Supports thresholds for color coding
- Modes: gradient, retro LCD, basic
Table
Best for: Tabular data, multi-column metrics
- Supports sorting by column
- Column width customization
- Cell display modes: color text, color background, gradient gauge
- Pagination for large datasets
- Can embed sparklines in cells
Heatmap
Best for: Distribution over time, histogram-over-time
- X axis: time; Y axis: buckets; Color: density/value
- Supports pre-bucketed data (Prometheus histogram) and raw values
- Tooltip shows exact bucket counts
Histogram
Best for: Value distribution analysis
- Groups values into buckets
- Can combine multiple series
- Configurable bucket size
Pie Chart
Best for: Proportional data, parts-of-whole
- Pie or donut style
- Labels: name, value, percentage
Logs
Best for: Log data from Loki, Elasticsearch, etc.
- Displays raw log lines with timestamp
- Log level coloring (info/warn/error)
- Search/filter within results
- Deduplication and time wrapping
- Prettify JSON option
Traces
Best for: Distributed tracing visualization (Tempo)
- Renders trace spans as a waterfall/Gantt chart
- Shows service name, operation, duration
- Click to drill into trace details
Flame Graph
Best for: CPU profiling data (Pyroscope)
- Visualizes call stacks by CPU time
- Click to zoom into subtrees
Node Graph
Best for: Service dependency maps, network topology
- Renders nodes and edges
- Node color/size configurable by metric
Geomap
Best for: Geographic data visualization
- Layers: markers, heatmap, route
- Multiple base map options (OpenStreetMap, CARTO, etc.)
- Supports GeoJSON data
Canvas
Best for: Custom layouts, process diagrams, status boards
- Drag-and-drop element placement
- Elements: text, metric value, rectangle, ellipse, icon, image, connections
- Dynamic data binding per element
State Timeline
Best for: State changes over time (on/off, OK/warn/crit)
- Horizontal bands showing state duration
- Each series = one row
- Color per state value
Status History
Best for: Periodic state checks over time
- Grid: Y=services, X=time buckets
- Color per state
XY Chart
Best for: Correlation between two metrics
- Scatter plot
- X and Y axis from different fields
- Bubble size from a third field
Candlestick
Best for: Financial OHLC data
- Open/High/Low/Close representation
- Volume bars
Text
Best for: Documentation panels, headers
- Renders Markdown or HTML
Alert List
Best for: Dashboard overview of current alert states
Dashboard List
Best for: Navigation panels linking to other dashboards
Field Configuration (Standard Options)
Available for most visualizations under the visualization options panel.
| Option | Description |
|---|---|
| Unit | Display unit (bytes, seconds, %, requests/sec, etc.) |
| Min / Max | Override auto-detected min/max for scales |
| Decimals | Number of decimal places |
| Display name | Override the series/field name |
| Color scheme | Fixed, thresholds-based, palette, etc. |
| No value | Text to display when value is null |
Thresholds
Define color-coded boundaries:
- Absolute: Fixed numeric values (e.g., >90 = red, >70 = yellow, else green)
- Percentage: Relative to min/max
Example threshold config:
Base (default): Green
70: Yellow (warn)
90: Red (crit)
Value Mappings
Transform raw values into human-readable labels or colors:
- Value to text: e.g.,
1-> "OK",0-> "Down" - Range to text: e.g.,
0-50-> "Low" - Regex to text: Match patterns
Data Links
Create clickable links from panel values:
- Link to other dashboards with variable values interpolated
- Link to external systems (e.g., Kibana, PagerDuty)
- Use
${__value.raw}and${__field.name}in URLs
Field Overrides
Apply specific field options to individual series/columns rather than all data:
- Click + Add field override in the Overrides section
- Choose override target:
- Fields with name (exact match)
- Fields with name matching regex
- Fields with type (number, string, time)
- Fields returned by query (A, B, C...)
- Add properties to override (unit, color, alias, thresholds, etc.)
Example: In a table with columns cpu_idle and cpu_used, set cpu_used to show as percentage and color by threshold while leaving cpu_idle with default styling.
Transformations
Transformations reshape query data before rendering. Apply multiple in sequence.
Access: Panel editor > Transform tab > Add transformation
Most-Used Transformations
| Transformation | Description |
|---|---|
| Reduce | Collapse a time series to a single value (last, mean, sum, max, min) |
| Filter by name | Keep only specific fields/columns |
| Filter by value | Filter rows where a field matches a condition |
| Organize fields | Rename, reorder, or hide fields |
| Merge | Combine multiple query results into one table |
| Join by field | SQL-style join on a common field (e.g., time) |
| Group by | Group rows and aggregate (count, sum, mean, etc.) |
| Sort by | Sort rows by a field |
| Limit | Keep only first N rows |
| Add field from calculation | Add a new column computed from existing columns |
| Convert field type | Change a field's data type |
| Rename by regex | Batch rename fields using regex |
| Extract fields | Parse JSON or regex from a string field |
| Labels to fields | Convert label key/values into separate columns |
| Rows to fields | Pivot: turn row values into column headers |
| Prepare time series | Normalize time series format |
| Time series to table | Convert time series format to table format |
Enable "Debug" toggle on any transformation to see input/output for troubleshooting.
Query Options
Multiple queries
Add multiple queries (A, B, C...) to one panel. They are overlaid in the visualization. Use this to compare metrics or show multiple services on one graph.
Expressions (server-side)
Server-side expressions allow math across query results:
- Math:
$A + $B,$A / $B * 100 - Reduce: Collapse a series to scalar
- Resample: Change time resolution of a series
- Classic conditions: Threshold logic (used in alerting)
Example - calculate error rate as percentage:
Query A: total_requests{job="api"}
Query B: error_requests{job="api"}
Expression C (Math): $B / $A * 100
Display C as percentage
Important query variables
These variables are available in queries:
| Variable | Description |
|---|---|
$__interval |
Auto-calculated interval based on time range and resolution |
$__rate_interval |
Interval suitable for rate() functions (at least 4x scrape interval) |
$__from |
Start of the current time range (ms epoch) |
$__to |
End of the current time range (ms epoch) |
$__range |
Duration of current time range (e.g., "6h") |
$__range_s |
Duration in seconds |
$__range_ms |
Duration in milliseconds |
Example PromQL using interval variable:
rate(http_requests_total[${__rate_interval}])
Panel Inspect
Click panel menu (3-dot) > Inspect to access:
- Data: Raw table view of the data powering the panel
- Stats: Query performance (time, row count)
- JSON: Panel JSON model
- Query: Equivalent of query inspector showing raw query and response
Performance Tips
- Limit max data points to avoid over-fetching
- Use recording rules in Prometheus for expensive queries
- Set longer min intervals for historical dashboards
- Use
$__intervalvariable in queries to align with time resolution - Use
$__rate_intervalinstead of hardcoded intervals for rate() queries - Avoid too many panels on one dashboard (aim for <20)