Dashboards in OpenSearch UI can combine visualizations from different data sources on a single page. This lets you build unified operational views that correlate logs, traces, metrics, and security events — even when the data lives on separate OpenSearch domains or serverless collections.
Cross-Source Dashboard
How cross-source dashboards work
Each visualization on a dashboard is tied to an index pattern, and each index pattern is tied to a specific data source. By placing visualizations from different index patterns (and therefore different data sources) on the same dashboard, you create a cross-source view.
┌─────────────────────────────────────────────────┐
│ Dashboard │
│ │
│ ┌──────────────────┐ ┌──────────────────────┐ │
│ │ Error Rate Chart │ │ Trace Latency Chart │ │
│ │ (logs-domain) │ │ (apm-domain) │ │
│ └──────────────────┘ └──────────────────────┘ │
│ │
│ ┌──────────────────┐ ┌──────────────────────┐ │
│ │ Security Alerts │ │ S3 Query Results │ │
│ │ (siem-domain) │ │ (direct query) │ │
│ └──────────────────┘ └──────────────────────┘ │
└─────────────────────────────────────────────────┘The global time picker and dashboard-level filters apply to all visualizations simultaneously, making it easy to investigate issues across data sources within the same time window.
Prerequisites
Before building a cross-source dashboard:
- Multiple data sources associated with your application (see Connect Data Sources)
- A workspace with access to all the data sources you want to visualize
- Index patterns created for each data source within the workspace
Step-by-step: building a cross-source dashboard
Step 1: Create index patterns for each data source
Navigate to Dashboards Management → Index Patterns and create patterns for each source:
| Index Pattern | Data Source | Time Field |
|---|---|---|
app-logs-* | logs-domain | @timestamp |
traces-* | apm-domain | startTime |
security-events-* | siem-domain | event_time |
Step 2: Create individual visualizations
Build visualizations that each target a specific index pattern:
Visualization 1: Error rate over time (logs-domain)
- Go to Visualize → Create visualization
- Choose Line chart
- Select the
app-logs-*index pattern - Configure:
- Y-axis: Count, filtered by
status_code >= 500 - X-axis: Date histogram on
@timestamp
- Y-axis: Count, filtered by
- Save as "Error Rate - Logs"
Visualization 2: P99 latency (apm-domain)
- Create a new Line chart
- Select the
traces-*index pattern - Configure:
- Y-axis: Percentile (99th) on
duration - X-axis: Date histogram on
startTime
- Y-axis: Percentile (99th) on
- Save as "P99 Latency - Traces"
Visualization 3: Security alert count (siem-domain)
- Create a new Metric visualization
- Select the
security-events-*index pattern - Configure:
- Metric: Count, filtered by
severity: HIGH OR CRITICAL
- Metric: Count, filtered by
- Save as "Critical Security Alerts"
Visualization 4: Top error services (logs-domain)
- Create a new Data table
- Select the
app-logs-*index pattern - Configure:
- Metric: Count
- Bucket: Terms on
service_name - Filter:
status_code >= 500
- Save as "Top Error Services"
Step 3: Assemble the dashboard
- Navigate to Dashboards → Create dashboard
- Click Add and select each visualization you created
- Arrange the panels by dragging and resizing
- Set the global time range using the date picker
- Save the dashboard as "Operations Overview"
Step 4: Add dashboard-level filters
Dashboard filters apply to all visualizations that have the matching field:
- Click Add filter in the filter bar
- Add a filter like
region: us-east-1 - Visualizations that have a
regionfield will filter accordingly - Visualizations without that field are unaffected
Dashboard filters work across data sources as long as the field name exists in the index pattern. This is a powerful way to drill down across all your data simultaneously.
Visualization types for cross-source dashboards
| Visualization Type | Good For | Cross-Source Use Case |
|---|---|---|
| Line chart | Time-series trends | Compare error rates vs. latency across domains |
| Area chart | Volume over time | Show log volume from multiple sources |
| Metric | Single KPI values | Display alert counts from different sources |
| Data table | Detailed breakdowns | List top errors from each domain |
| Pie chart | Proportional data | Show traffic distribution across services |
| Markdown | Context and notes | Add section headers between source groups |
| Controls | Interactive filters | Add dropdowns that filter across all panels |
Using controls for interactive filtering
Add a Controls visualization to your dashboard for interactive filtering:
- Create a new Controls visualization
- Add an Options list control for a field like
service_name - Add a Range slider control for a field like
response_time - Save and add to your dashboard
Controls create dropdown menus and sliders that filter all visualizations on the dashboard in real time.
Dashboard layout best practices
Group by data source
Organize panels into visual sections by data source:
Row 1: [Logs metrics] [Logs error chart] [Logs table]
Row 2: [Trace latency] [Trace error rate] [Service map link]
Row 3: [Security alerts] [Security findings] [Threat intel]Use Markdown panels as section dividers:
### Application Logs (logs-domain)
---Use consistent time fields
Ensure all index patterns use a time field so the global date picker works across all panels. If an index pattern doesn't have a time field, that visualization won't respond to time range changes.
Keep panel count manageable
Dashboards with too many panels can be slow to load, especially when querying multiple data sources. Aim for 10-15 panels per dashboard. For more complex views, create multiple dashboards and link between them.
Saved queries and cross-source filtering
You can save frequently used filter combinations:
- Apply your filters in the filter bar
- Click the Save icon next to the search bar
- Name the saved query (e.g., "US-East Production Errors")
- Load it later from the same menu
Saved queries apply across all visualizations on the dashboard, regardless of data source.
Sharing cross-source dashboards
Short URLs
- Click Share in the top navigation
- Choose Short URL
- Copy and share the link — recipients need application access
PDF/PNG export
- Click Share → PDF Reports or PNG Reports
- The report captures the current dashboard state including all cross-source panels
- Reports are generated asynchronously — check Reporting for status
Embedding
Dashboards can be embedded in iframes if your application allows it. The embedded view respects the same authentication requirements.
Limitations
- No cross-source joins in visualizations — Each visualization queries a single index pattern. You cannot create a visualization that joins data from two different data sources.
- Field name mismatches — Dashboard filters only work if the field name exists in the index pattern. If one source uses
timestampand another uses@timestamp, a filter on one won't affect the other. - Performance varies by source — Panels querying a heavily loaded domain may be slower than others. The dashboard loads panels independently.
- Direct query panels are slower — Visualizations backed by S3 or CloudWatch direct query sources take longer to render than those backed by indexed data.
Troubleshooting
Some panels show "No data" while others work
- Check that the time range covers data in all data sources
- Verify the index pattern is associated with the correct data source
- Confirm the index exists and has data in the selected time range
Dashboard is slow to load
- Reduce the number of panels or split into multiple dashboards
- Check if any data source is under heavy load
- Use shorter time ranges for initial loads
- Consider pre-aggregating data for frequently viewed dashboards
Filters not applying to all panels
- The filter field must exist in each visualization's index pattern
- Check for field name differences across data sources (e.g.,
hostvs.hostname) - Verify the filter syntax is correct in the filter bar
Time picker not affecting some panels
- The index pattern for that panel may not have a time field configured
- Edit the index pattern and set the correct time field
- Panels using Metric or Markdown types may not be time-dependent