Custom Dashboards & Visualization
Learn how to create powerful custom dashboards and visualizations in Nodewarden for your specific monitoring needs.
Custom Dashboards & Visualization
Custom dashboards let you create tailored monitoring views that match your specific needs, team workflows, and business requirements. This guide covers everything from basic dashboard creation to advanced visualization techniques.
Dashboard Fundamentals
Dashboard Types
Overview Dashboards
High-level views for executives and managers:
- Executive Summary: Key business metrics and SLA status
- Service Health: Overall system health across all services
- Performance Summary: Critical performance indicators
- Incident Overview: Current issues and resolution status
Operational Dashboards
Detailed views for operations teams:
- Infrastructure Monitoring: Server and network health
- Application Performance: Service-specific metrics
- Database Operations: Database health and performance
- Security Monitoring: Security events and anomalies
Team-Specific Dashboards
Customized views for different teams:
- Development Teams: Application metrics and deployment status
- Database Teams: Database performance and maintenance
- Security Teams: Security events and compliance status
- Business Teams: Business KPIs and user experience metrics
Dashboard Components
Widgets Types
- Time Series Charts: Line graphs for trending data
- Single Value: Current status or KPI displays
- Tables: Tabular data with sorting and filtering
- Status Boards: Service health overviews
- Heatmaps: Pattern visualization across multiple dimensions
- Pie Charts: Distribution and proportion displays
- Bar Charts: Comparative data visualization
- Maps: Geographic or network topology views
Creating Your First Dashboard
Quick Start Guide
- Navigate to Dashboards → Create New Dashboard
- Choose Template: Start with a pre-built template or blank canvas
- Add Widgets: Drag and drop components from the widget library
- Configure Data Sources: Connect widgets to your metrics
- Customize Layout: Arrange and resize components
- Save and Share: Make the dashboard available to your team
Step-by-Step Creation
Step 1: Dashboard Setup
yamlDashboard Configuration: Name: "Production Infrastructure Overview" Description: "Real-time monitoring of production systems" Tags: ["production", "infrastructure", "overview"] Refresh Interval: 30 seconds Time Range: Last 24 hours Access: Team-based permissions
Step 2: Layout Planning
yamlLayout Structure: Grid: 12 columns x unlimited rows Widget Sizes: - Small: 3x2 (single values, small charts) - Medium: 6x4 (standard charts) - Large: 12x6 (detailed tables, complex charts) - Full Width: 12x8 (comprehensive overviews)
Step 3: Adding Widgets
System Overview Widget:
yamlWidget Type: Single Value Title: "Systems Online" Query: Metric: "host.status" Filter: "environment=production" Aggregation: "count" Condition: "status=online" Visualization: Display: "24/27 Online" Color: Green (>90%), Yellow (80-90%), Red (<80%) Icon: Server icon
CPU Usage Chart:
yamlWidget Type: Time Series Title: "Average CPU Usage - Production Servers" Query: Metric: "system.cpu.usage" Filter: "environment=production" Aggregation: "average" Group By: "hostname" Time Range: Last 6 hours Visualization: Chart Type: Line chart Y-Axis: 0-100% (fixed scale) Colors: Multi-color by hostname Legend: Bottom Thresholds: Warning: 70% Critical: 85%
Advanced Widget Configuration
Time Series Visualizations
Multi-Metric Charts
Display multiple related metrics on one chart:
yamlWidget: "Database Performance Overview" Metrics: - Name: "Queries per Second" Query: "mysql.queries_per_second" Color: "#3498db" Y-Axis: "left" - Name: "Connection Count" Query: "mysql.connections.active" Color: "#e74c3c" Y-Axis: "right" - Name: "Buffer Pool Hit Ratio" Query: "mysql.innodb.buffer_pool_hit_ratio" Color: "#2ecc71" Y-Axis: "right" Unit: "percentage" Visualization: Chart Type: "multi-axis-line" Time Range: "last-4-hours" Refresh: "1-minute"
Comparative Analysis
Compare metrics across different dimensions:
yamlWidget: "Response Time by Environment" Query: Metric: "http.response_time" Group By: "environment" Time Range: "last-24-hours" Environments: - Production: "#e74c3c" - Staging: "#f39c12" - Development: "#27ae60" Visualization: Chart Type: "stacked-area" Percentile: "95th" Smoothing: "enabled"
Status and Health Widgets
Service Status Board
Visual overview of service health:
yamlWidget Type: "status-board" Title: "Service Health Dashboard" Services: - Name: "Web Frontend" Health Check: "http://web.internal/health" Status: "healthy | warning | critical | unknown" Metrics: ["response_time", "error_rate"] - Name: "API Gateway" Health Check: "http://api.internal/health" Dependencies: ["Database", "Cache"] - Name: "Database Cluster" Health Check: "mysql://db.internal/health" Replicas: ["db-01", "db-02", "db-03"] Layout: Columns: 3 Card Size: "medium" Auto Refresh: 30 seconds
Alert Summary Widget
Current alert status across your infrastructure:
yamlWidget Type: "alert-summary" Title: "Active Alerts" Filters: Environment: "production" Severity: ["critical", "warning"] Status: "open" Display: Group By: "severity" Show Count: true Show Trends: "last-7-days" Click Action: "open-alert-details" Colors: Critical: "#ff4444" Warning: "#ffaa00" Info: "#44aaff"
Table Widgets
Top Resource Consumers
Identify systems using the most resources:
yamlWidget Type: "table" Title: "Top CPU Consumers" Query: Metric: "system.cpu.usage" Aggregation: "average" Time Range: "last-1-hour" Order By: "value DESC" Limit: 10 Columns: - Name: "Hostname" Field: "hostname" Link: "/hosts/{hostname}" - Name: "CPU Usage" Field: "value" Format: "percentage" Color: "threshold-based" - Name: "Load Average" Field: "system.load.avg1" Format: "decimal:2" - Name: "Last Updated" Field: "timestamp" Format: "relative-time" Formatting: Row Height: "compact" Striped Rows: true Sortable: true
Error Log Summary
Recent errors and exceptions:
yamlWidget Type: "log-table" Title: "Recent Application Errors" Data Source: "application-logs" Query: Level: "ERROR" Time Range: "last-4-hours" Limit: 20 Columns: - Timestamp: "relative-time" - Service: "tag:service_name" - Message: "truncated:100" - Count: "similar-events" Filters: - Environment: "production" - Exclude: "health-check-errors"
Dashboard Templates
Infrastructure Overview Template
yamlTemplate: "Infrastructure Overview" Description: "Complete infrastructure monitoring dashboard" Widgets: # Top Row - Key Metrics - Type: "single-value" Title: "Hosts Online" Position: [0, 0, 3, 2] Metric: "count(host.status == 'online')" - Type: "single-value" Title: "Active Alerts" Position: [3, 0, 3, 2] Metric: "count(alerts.status == 'open')" - Type: "single-value" Title: "Avg Response Time" Position: [6, 0, 3, 2] Metric: "avg(http.response_time)" - Type: "single-value" Title: "Error Rate" Position: [9, 0, 3, 2] Metric: "rate(errors) * 100" # Second Row - System Resources - Type: "time-series" Title: "CPU Usage by Host" Position: [0, 2, 6, 4] Metric: "system.cpu.usage" Group By: "hostname" - Type: "time-series" Title: "Memory Usage by Host" Position: [6, 2, 6, 4] Metric: "system.memory.usage" Group By: "hostname" # Third Row - Application Performance - Type: "time-series" Title: "Request Rate" Position: [0, 6, 4, 4] Metric: "http.requests_per_second" - Type: "time-series" Title: "Database Connections" Position: [4, 6, 4, 4] Metric: "mysql.connections.active" - Type: "status-board" Title: "Service Health" Position: [8, 6, 4, 4] Services: ["web", "api", "database", "cache"]
Application Performance Template
yamlTemplate: "Application Performance" Description: "Detailed application monitoring dashboard" Target: "Web applications and APIs" Sections: # Request Performance Request_Performance: - Widget: "Request Rate Trends" Metrics: ["requests_per_second", "concurrent_requests"] - Widget: "Response Time Distribution" Percentiles: [50, 95, 99] Time Range: "last-6-hours" - Widget: "Error Rate Analysis" Metrics: ["4xx_errors", "5xx_errors", "timeouts"] # Resource Utilization Resource_Usage: - Widget: "Application Memory" Metrics: ["heap_usage", "gc_frequency"] - Widget: "Database Performance" Metrics: ["query_time", "connection_pool"] - Widget: "Cache Performance" Metrics: ["hit_ratio", "eviction_rate"] # Business Metrics Business_KPIs: - Widget: "Active Users" Metric: "active_sessions" Time Range: "last-24-hours" - Widget: "Conversion Rate" Calculation: "successful_actions / total_actions * 100" - Widget: "Revenue Impact" Correlation: "errors vs revenue"
Database Monitoring Template
yamlTemplate: "Database Performance" Description: "Comprehensive database monitoring" Database Types: ["MySQL", "PostgreSQL", "MongoDB"] Layout: # Connection Monitoring Connections: - Active Connections: "current_active" - Connection Pool Usage: "pool_utilization" - Connection Errors: "failed_connections" # Query Performance Query_Performance: - Queries per Second: "qps_by_type" - Slow Query Analysis: "slow_queries" - Query Execution Time: "avg_query_time" - Lock Wait Time: "lock_waits" # Resource Usage Resources: - Buffer Pool Hit Ratio: "buffer_efficiency" - Disk I/O: "read_write_operations" - Cache Utilization: "cache_hit_ratio" - Temporary Table Usage: "temp_tables" # Replication & Backup Replication: - Replication Lag: "slave_lag_seconds" - Replication Status: "replication_health" - Backup Status: "last_backup_time"
Interactive Features
Drill-Down Navigation
Click-Through Actions
Configure widgets to allow detailed investigation:
yamlWidget: "Top Error Producers" Click Actions: Row Click: Action: "navigate" Target: "/hosts/{hostname}/logs" Filters: "level=ERROR" Value Click: Action: "zoom" Target: "same-metric" Time Range: "expand-context" Header Click: Action: "modal" Content: "metric-definition"
Context Menus
Right-click options for additional actions:
yamlContext Menu Options: - "View Host Details" - "Create Alert Rule" - "Export Data (CSV/JSON)" - "Add to Favorites" - "Share Widget Link" - "Clone to New Dashboard"
Dynamic Filtering
Dashboard-Level Filters
Apply filters across all widgets:
yamlGlobal Filters: - Name: "Environment" Type: "dropdown" Options: ["production", "staging", "development"] Default: "production" - Name: "Time Range" Type: "time-picker" Options: ["1h", "6h", "24h", "7d", "30d"] Default: "24h" - Name: "Service" Type: "multi-select" Source: "dynamic" Query: "distinct(service_name)" - Name: "Host Pattern" Type: "text-input" Placeholder: "web-*, db-*" Wildcard: true
Widget-Specific Filters
Local filters that only affect individual widgets:
yamlWidget Filters: - Type: "host-selector" Widget: "cpu-usage-chart" Mode: "include/exclude" - Type: "threshold-slider" Widget: "error-rate-table" Range: [0, 100] Default: [0, 10]
Collaboration Features
Dashboard Sharing
Access Control
Manage who can view and edit dashboards:
yamlDashboard Permissions: Owner: "admin-user" Editors: ["team-lead", "senior-dev"] Viewers: ["dev-team", "qa-team"] Public Access: Enabled: false Read Only: true Expiration: "30-days" Team Access: engineering: "edit" operations: "view" management: "view"
Export and Embedding
Share dashboards outside of Nodewarden:
yamlExport Options: - Format: "PDF Report" Schedule: "daily-morning" Recipients: ["manager@company.com"] - Format: "PNG Images" Resolution: "1920x1080" Individual Widgets: true - Format: "JSON Data" Include: "raw-metrics" Compression: "gzip" Embedding: - Type: "iframe" Authentication: "api-key" Refresh: "auto" - Type: "screenshot-api" Endpoint: "/api/dashboards/{id}/screenshot" Parameters: ["width", "height", "theme"]
Annotations and Comments
Event Annotations
Mark important events on time series charts:
yamlAnnotations: - Type: "deployment" Timestamp: "2024-12-05T14:30:00Z" Title: "API v2.1.0 Deployment" Description: "Updated authentication system" Color: "#2ecc71" - Type: "incident" Timestamp: "2024-12-05T09:15:00Z" Title: "Database Connection Issue" Description: "Connection pool exhausted" Color: "#e74c3c" Duration: "45 minutes" - Type: "maintenance" Start: "2024-12-05T02:00:00Z" End: "2024-12-05T04:00:00Z" Title: "Scheduled Maintenance" Color: "#f39c12"
Collaborative Comments
Team discussions on dashboard insights:
yamlComments System: Widget Comments: - Widget: "response-time-chart" Comment: "Spike at 2 PM correlates with marketing campaign" Author: "analyst-user" Timestamp: "2024-12-05T14:05:00Z" Replies: - "Confirmed, traffic increased 300%" - "Should we scale up servers?" Dashboard Comments: - General discussion thread - @mention notifications - Comment resolution workflow
Performance Optimization
Dashboard Performance
Optimization Strategies
Keep dashboards fast and responsive:
yamlPerformance Best Practices: Query Optimization: - Limit time ranges for large datasets - Use appropriate aggregation levels - Implement metric sampling for high-cardinality data - Cache frequently accessed queries Widget Optimization: - Limit widgets per dashboard (< 20) - Use efficient chart types - Implement lazy loading for off-screen widgets - Optimize refresh intervals Data Management: - Pre-aggregate common queries - Use materialized views for complex calculations - Implement data retention policies - Archive old dashboard versions
Monitoring Dashboard Performance
Track how your dashboards perform:
yamlDashboard Metrics: Load Time: "time-to-interactive" Query Performance: "avg-query-duration" User Engagement: "time-on-dashboard" Error Rates: "failed-queries-percentage" Performance Alerts: - Dashboard load time > 5 seconds - Query timeout rate > 5% - Widget refresh failures > 10%
Advanced Techniques
Custom Calculations
Derived Metrics
Create new metrics from existing data:
yamlCustom Metrics: - Name: "Error Rate Percentage" Formula: "(error_count / total_requests) * 100" Unit: "percentage" - Name: "Efficiency Ratio" Formula: "successful_transactions / resource_usage" Description: "Business value per resource unit" - Name: "SLA Compliance" Formula: "uptime_minutes / total_minutes * 100" Threshold: "> 99.9%"
Statistical Functions
Advanced data analysis:
yamlStatistical Widgets: - Type: "percentile-comparison" Percentiles: [50, 90, 95, 99] Comparison: "current vs previous week" - Type: "correlation-analysis" Variables: ["cpu_usage", "response_time"] Method: "pearson" - Type: "anomaly-detection" Algorithm: "isolation-forest" Sensitivity: "medium" Training Period: "30-days"
API Integration
External Data Sources
Integrate data from other systems:
yamlExternal Integrations: - Name: "Business Metrics" Source: "Google Analytics API" Metrics: ["page_views", "session_duration"] Authentication: "oauth2" - Name: "Deployment Data" Source: "Jenkins API" Metrics: ["build_success_rate", "deployment_frequency"] Authentication: "api-key" - Name: "Customer Support" Source: "Zendesk API" Metrics: ["ticket_volume", "resolution_time"] Correlation: "incidents_vs_tickets"
Troubleshooting
Common Issues
Dashboard Not Loading
Symptoms: Blank or error screen Solutions:
- Check browser console for JavaScript errors
- Verify API connectivity and authentication
- Review dashboard permissions
- Clear browser cache and cookies
Slow Performance
Symptoms: Long load times, unresponsive interface Solutions:
- Reduce time range for data-heavy widgets
- Optimize queries and aggregations
- Limit number of widgets per dashboard
- Check network connectivity
Missing Data
Symptoms: Empty charts or "No Data" messages Solutions:
- Verify metric collection is active
- Check time range and filters
- Confirm data retention settings
- Review query syntax and conditions
Incorrect Data
Symptoms: Wrong values or unexpected trends Solutions:
- Validate metric definitions and units
- Check aggregation methods
- Verify time zone settings
- Review data source configuration
Next Steps
Now that you can create custom dashboards:
- Integration Guide - Connect external data sources
- Advanced Analytics - Implement statistical analysis
- Automation - Automate dashboard management
- Team Collaboration - Enhance team workflows
- API Reference - Programmatic dashboard management
Ready for advanced visualization techniques? Check out our Advanced Dashboard Guide for machine learning integration and complex data analysis.