Dashboard
v1.0

Custom Dashboards & Visualization

Learn how to create powerful custom dashboards and visualizations in Nodewarden for your specific monitoring needs.

Last updated: December 5, 2024
15 min read

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

  1. Navigate to DashboardsCreate New Dashboard
  2. Choose Template: Start with a pre-built template or blank canvas
  3. Add Widgets: Drag and drop components from the widget library
  4. Configure Data Sources: Connect widgets to your metrics
  5. Customize Layout: Arrange and resize components
  6. Save and Share: Make the dashboard available to your team

Step-by-Step Creation

Step 1: Dashboard Setup

yaml
Dashboard 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

yaml
Layout 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:

yaml
Widget 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:

yaml
Widget 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:

yaml
Widget: "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:

yaml
Widget: "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:

yaml
Widget 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:

yaml
Widget 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:

yaml
Widget 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:

yaml
Widget 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

yaml
Template: "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

yaml
Template: "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

yaml
Template: "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:

yaml
Widget: "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:

yaml
Context 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:

yaml
Global 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:

yaml
Widget 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:

yaml
Dashboard 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:

yaml
Export 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:

yaml
Annotations:
  - 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:

yaml
Comments 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:

yaml
Performance 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:

yaml
Dashboard 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:

yaml
Custom 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:

yaml
Statistical 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:

yaml
External 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:

  1. Check browser console for JavaScript errors
  2. Verify API connectivity and authentication
  3. Review dashboard permissions
  4. Clear browser cache and cookies

Slow Performance

Symptoms: Long load times, unresponsive interface Solutions:

  1. Reduce time range for data-heavy widgets
  2. Optimize queries and aggregations
  3. Limit number of widgets per dashboard
  4. Check network connectivity

Missing Data

Symptoms: Empty charts or "No Data" messages Solutions:

  1. Verify metric collection is active
  2. Check time range and filters
  3. Confirm data retention settings
  4. Review query syntax and conditions

Incorrect Data

Symptoms: Wrong values or unexpected trends Solutions:

  1. Validate metric definitions and units
  2. Check aggregation methods
  3. Verify time zone settings
  4. Review data source configuration

Next Steps

Now that you can create custom dashboards:

  1. Integration Guide - Connect external data sources
  2. Advanced Analytics - Implement statistical analysis
  3. Automation - Automate dashboard management
  4. Team Collaboration - Enhance team workflows
  5. API Reference - Programmatic dashboard management

Ready for advanced visualization techniques? Check out our Advanced Dashboard Guide for machine learning integration and complex data analysis.

Was this page helpful?

Help us improve our documentation

    Custom Dashboards & Visualization | Nodewarden Documentation