Dashboards
Dashboards bring multiple visualizations together into a single, interactive view. They are the primary way to monitor, analyze, and share data insights in Kibana.
Creating a Dashboard
From Scratch
- Go to Dashboard in the navigation menu
- Click "Create dashboard"
- You'll see an empty dashboard with options to add panels
Adding Panels
Click "Create visualization" or "Add from library":
Create visualization: Build a new Lens, aggregation-based, or TSVB visualization directly within the dashboard.
Add from library: Reuse an existing saved visualization.
┌─────────────────────────────────────────────────────┐
│ My Dashboard [Save] [Share] [⋯] │
├─────────────────────────────────────────────────────┤
│ [+ Create visualization] [+ Add from library] │
├──────────────────────┬──────────────────────────────┤
│ │ │
│ Total Revenue │ Total Orders │
│ $125,430.00 │ 4,675 │
│ │ │
├──────────────────────┴──────────────────────────────┤
│ │
│ Revenue Over Time (Line Chart) │
│ ─────/\──────/\──/\─────── │
│ │
├─────────────────────┬───────────────────────────────┤
│ Top Products │ Sales by Category │
│ ▓▓▓▓▓▓ Product A │ ╭───╮ │
│ ▓▓▓▓▓ Product B │ / \ │
│ ▓▓▓▓ Product C │ │ Pie │ │
│ ▓▓▓ Product D │ \ / │
│ │ ╰───╯ │
└─────────────────────┴───────────────────────────────┘
Panel Types
You can add several panel types to a dashboard:
| Panel Type | Description | Use Case |
|---|---|---|
| Lens | Drag-and-drop visualization | Most common, quick charts |
| Aggregation-based | Traditional charts with full control | Complex aggregations |
| TSVB | Time series builder | Multi-index time series |
| Vega | Code-based custom visuals | Highly custom charts |
| Maps | Geographic visualization | Location-based data |
| Markdown | Formatted text | Titles, instructions, notes |
| Controls | Input filters | Dynamic user filtering |
| Saved search | Embedded Discover table | Raw data alongside charts |
| Log stream | Scrolling log view | Real-time log monitoring |
| Image | Uploaded image | Logos, diagrams |
Arranging Panels
Resizing
- Enter Edit mode (click pencil icon or "Edit" button)
- Hover over a panel edge or corner
- Click and drag to resize
- Release when satisfied
Moving
- In Edit mode, hover over the panel header
- Click and drag the panel to a new position
- Other panels reflow automatically
Layout Grid
Kibana uses a 48-column grid system:
Recommended layouts:
Full width: [──────────────────────────────────────]
Half width: [──────────────────] [──────────────────]
Thirds: [────────────] [────────────] [────────────]
Quarter + rest: [──────────] [────────────────────────────]
Tips for layout:
- Place KPI metrics across the top row
- Put time-series charts in wider panels (full or half width)
- Side-by-side comparisons use equal width panels
- Tables and lists work well at full width
Panel Options
Click the gear icon (⚙️) on any panel to configure:
- Custom time range: Override the dashboard time range for this panel
- Title: Set a custom title (overrides saved visualization title)
- Description: Tooltip description
- Hide panel title: Remove header for cleaner look
Dashboard Controls
Input Controls
Add interactive filters that let users refine dashboard data without editing:
- Click "Add panel" → "Controls"
- Choose control type:
| Control Type | Purpose | Example |
|---|---|---|
| Options list | Dropdown selection | Select category, status |
| Range slider | Numeric range | Price range, age |
| Time slider | Time range scrubber | Drag through time |
Adding an Options List Control
- In Edit mode, click "Controls" → "Add control"
- Data view:
kibana_sample_data_ecommerce - Field:
category.keyword - Label: "Product Category"
- Click "Save"
Users can now filter the entire dashboard by selecting a category from the dropdown.
Adding a Range Slider
- Add control → Range slider
- Field:
taxful_total_price - Label: "Price Range"
- Min: 0, Max: 500
- Step: 10
Users drag the slider to filter by price range.
Control Settings
Configure how controls behave:
Settings:
- Apply selections automatically: Yes/No
- Cascade controls: Yes (second control filters based on first)
- Width: Small / Medium / Large
- Grow: Expand to fill available space
Filtering Dashboards
Global Filters
Filters applied at the dashboard level affect all panels:
- Click "+ Add filter" in the filter bar
- Field:
geoip.country_iso_code - Operator:
is - Value:
US - Click "Save"
All panels now show only US data.
Time Picker
The time picker in the top-right controls the time range for the entire dashboard:
Common configurations:
- Real-time monitoring: Last 15 minutes, auto-refresh every 30s
- Daily review: Today
- Weekly report: Last 7 days
- Historical analysis: Custom date range
Auto-Refresh
Set dashboards to refresh automatically:
- Click time picker → "Refresh every"
- Choose interval: 5s, 10s, 30s, 1m, 5m, etc.
- Click "Start"
Recommended refresh intervals:
Real-time operations: 5-10 seconds
Monitoring dashboards: 30 seconds - 1 minute
Daily analytics: 5-15 minutes
Historical data: No auto-refresh needed
Query Bar
Use KQL in the query bar to filter across all panels:
# Show only failed requests
response: 503 OR response: 500
# Filter by user agent
agent: "Mozilla*" AND NOT agent: "*bot*"
# Combine with time for incident investigation
response: 500 AND url.path: "/api/checkout"
Drilldowns
Drilldowns add interactive navigation to dashboard panels.
URL Drilldown
Navigate to an external URL when a user clicks a panel element:
- In Edit mode, click panel menu → "Create drilldown"
- Choose "Go to URL"
- Configure:
Name: View in JIRA
URL template: https://jira.example.com/browse/{{event.value}}
Variables available:
- {{event.value}} - Clicked value
- {{event.key}} - Field name
- {{context.panel.id}} - Panel ID
Dashboard Drilldown
Navigate to another dashboard with context:
- Click panel menu → "Create drilldown"
- Choose "Go to dashboard"
- Select target dashboard
- Configure filter transfer:
Name: View Order Details
Target: Order Details Dashboard
Carry over filters: Yes
Carry over time range: Yes
Use clicked value as filter: Yes
Example workflow:
- User sees "Top Categories" bar chart on overview dashboard
- Clicks "Men's Clothing" bar
- Drills down to "Category Detail Dashboard" filtered to Men's Clothing
Saving Dashboards
Save Options
Click "Save" in the top menu:
Save dashboard:
- Title: "E-Commerce Revenue Dashboard"
- Description: "Real-time revenue monitoring and product analysis"
- Tags: ["ecommerce", "revenue", "production"]
- Store time with dashboard: Yes/No
- Save as new: creates a copy
Store time with dashboard: When enabled, opening the dashboard restores the saved time range instead of using the global default.
Tagging
Tags help organize dashboards:
Suggested tag scheme:
- Team: marketing, engineering, support
- Environment: production, staging, development
- Type: monitoring, analytics, reporting
- Priority: critical, important, reference
Sharing Dashboards
Share Menu Options
Click "Share" in the top menu:
| Method | Description | Use Case |
|---|---|---|
| Permalink | Direct URL to dashboard | Share with team members |
| Short URL | Shortened version | Embed in chat, email |
| PDF Report | Generated PDF file | Emailed reports |
| PNG Image | Screenshot of dashboard | Presentations |
| CSV Export | Export panel data | Data analysis in spreadsheets |
| Embed code | iframe HTML snippet | Embed in web pages |
Generating a PDF Report
- Click Share → PDF Reports
- Choose:
- Optimize for printing: Better layout for PDF
- Use current time range: Snapshot of current view
- Click "Generate PDF"
- Download from the notification or Stack Management → Reporting
Embedding Dashboards
To embed in a web page:
- Click Share → Embed code
- Copy the iframe snippet:
<iframe
src="https://kibana.example.com/app/dashboards#/view/abc123?embed=true"
height="600"
width="800"
frameborder="0"
></iframe>
Options:
&_g=(time:(from:now-7d,to:now))- Set time range&show-query-input=true- Show search bar&show-time-filter=true- Show time picker&hide-filter-bar=true- Hide filter pills
Cloning and Copying
Clone a Dashboard
Create an exact copy:
- Open the dashboard
- Click "..." → "Clone"
- New name: "E-Commerce Dashboard (Copy)"
- Modify the copy without affecting the original
Copy Panels Between Dashboards
- Open source dashboard in Edit mode
- Click panel menu → "More" → "Copy to dashboard"
- Select target dashboard
- Panel appears in target dashboard
Import/Export
Export dashboards for backup or transfer:
Export:
- Go to Stack Management → Saved Objects
- Select dashboards to export
- Click "Export"
- Choose: Include related objects (visualizations, index patterns)
- Download
.ndjsonfile
Import:
- Go to Stack Management → Saved Objects
- Click "Import"
- Select
.ndjsonfile - Handle conflicts:
- Overwrite: Replace existing objects
- Create new: Generate new IDs
# Export via API
curl -X POST "localhost:5601/api/saved_objects/_export" \
-H "kbn-xsrf: true" \
-H "Content-Type: application/json" \
-d '{
"type": "dashboard",
"includeReferencesDeep": true
}' > dashboards.ndjson
# Import via API
curl -X POST "localhost:5601/api/saved_objects/_import" \
-H "kbn-xsrf: true" \
--form file=@dashboards.ndjson
Dashboard Design Patterns
1. Monitoring Dashboard
Real-time operational monitoring:
Row 1: [Status] [Error Rate] [Avg Response] [Active Users]
Row 2: [─────── Request Rate Over Time ─────────────────]
Row 3: [─── Error Breakdown ───] [─── Top Endpoints ───]
Row 4: [─────────── Log Stream (live) ──────────────────]
2. Executive Summary
High-level metrics for stakeholders:
Row 1: [Revenue ↑12%] [Orders ↑8%] [Customers ↑5%] [AOV ↓2%]
Row 2: [──── Revenue Trend (30 days) ────────────────────]
Row 3: [─ Top Categories ─] [─ Top Regions ─] [─ Funnel ─]
3. Investigation Dashboard
Deep-dive analysis with controls:
Row 1: [Category ▼] [Status ▼] [Date Range ═══○═══]
Row 2: [──── Timeline ──────────────────────────────────]
Row 3: [─── Detail Table (saved search) ────────────────]
Row 4: [─ Breakdown A ─] [─ Breakdown B ─] [─ Map ────]
4. Comparison Dashboard
Side-by-side period comparison:
Row 1: [This Week Revenue] [Last Week Revenue] [% Change]
Row 2: [── This Week ──────] [── Last Week ──────]
Row 3: [── Category Compare (grouped bar) ─────────────]
Performance Optimization
Panel Count
✅ 10-15 panels per dashboard (fast loading)
✅ 20-25 panels (acceptable with optimization)
❌ 50+ panels (slow, consider splitting into multiple dashboards)
Query Optimization
- Use filters over queries: Filters are cached by Elasticsearch
- Limit cardinality: Use Top 10 instead of Top 1000 in terms aggregations
- Narrow time range: Shorter time ranges query less data
- Use keyword fields: Always aggregate on
.keywordfields
Loading Strategy
Dashboard loading order:
1. Dashboard structure loads
2. Each panel sends its query
3. Panels render as responses return
Optimization:
- Put critical panels at the top (they render first)
- Use "Last value" for metrics instead of aggregations where possible
- Consider "sample" mode for high-cardinality data
Caching
Kibana caches dashboard queries:
# kibana.yml - cache settings
elasticsearch.requestTimeout: 30000 # 30 seconds timeout
elasticsearch.shardTimeout: 30000 # Per-shard timeout
Practical Examples
Example 1: Building a Web Server Dashboard
Step 1: Create KPI metrics
Panel 1: Total Requests (Count)
Panel 2: Error Rate (Count where response >= 400 / Total Count)
Panel 3: Avg Response Time (Average of response_time)
Panel 4: Unique Visitors (Unique Count of clientip)
Step 2: Add time series
Panel 5: Requests Over Time
- X-axis: @timestamp (auto interval)
- Y-axis: Count
- Split by: response (200, 404, 500)
Step 3: Add breakdowns
Panel 6: Top URLs (Bar chart, Top 10 url.keyword by count)
Panel 7: Response Code Distribution (Pie chart, response.keyword)
Panel 8: Geographic Map (clientip geolocation)
Step 4: Add controls and save
Control 1: Response code dropdown
Control 2: URL path filter
Control 3: Time range slider
Example 2: Business Metrics Dashboard
Data view: kibana_sample_data_ecommerce
Panels:
1. Metric: Sum of taxful_total_price → "Total Revenue"
2. Metric: Count → "Total Orders"
3. Metric: Unique Count of customer_id → "Unique Customers"
4. Line: taxful_total_price sum over time → "Revenue Trend"
5. Bar: Top 10 products by revenue → "Top Products"
6. Pie: category.keyword by count → "Category Split"
7. Table: manufacturer, count, sum, avg → "Manufacturer Summary"
8. Control: category.keyword dropdown → Filter
Common Issues
Dashboard loads slowly
Causes and fixes:
- Too many panels → Split into linked dashboards with drilldowns
- Wide time range → Narrow to relevant period
- High-cardinality aggregations → Limit to Top 10-20
- Missing keyword fields → Use
.keywordfor aggregations
Panels show different time ranges
Cause: Individual panels have custom time overrides.
Fix: Check panel settings → Remove custom time range to inherit from dashboard.
Filters don't affect all panels
Cause: Panels use different data views, or filters target fields not in all indices.
Fix: Ensure all panels use compatible data views, or use query bar instead of field-specific filters.
"Could not locate that dashboard"
Cause: Dashboard was deleted, or you lack permissions.
Fix: Check Saved Objects in Stack Management. Verify your role has access to the dashboard's Space.
Summary
In this chapter, you learned:
- ✅ Creating dashboards and adding panels
- ✅ Arranging and sizing panels for effective layouts
- ✅ Adding interactive controls for user filtering
- ✅ Configuring drilldowns for dashboard navigation
- ✅ Sharing dashboards via links, PDF, and embedding
- ✅ Import/export for backup and migration
- ✅ Dashboard design patterns for different use cases
- ✅ Performance optimization techniques
Next: Mastering the Kibana Query Language for precise data filtering!