54 Dashboard Creation in OpenSearch Dashboards

Das Erstellen effektiver Dashboards ist eine Kunst, die Verständnis sowohl für Datenvisualisierung als auch für Benutzerinteraktion erfordert. In diesem Kapitel lernen Sie, wie Sie aussagekräftige und benutzerfreundliche Dashboards erstellen.

54.1 Grundlagen der Dashboard-Erstellung

54.1.1 Planung eines Dashboards

Bevor Sie mit der technischen Umsetzung beginnen, sollten Sie folgende Aspekte planen:

  1. Zielgruppe identifizieren
  2. Datenquellen definieren
  3. Layout-Strategie entwickeln

54.2 Dashboard-Komponenten

54.2.1 Filter und Kontrollelemente

Implementieren Sie globale Filter:

{
  "query": {
    "bool": {
      "must": [
        {
          "range": {
            "@timestamp": {
              "gte": "now-24h",
              "lte": "now"
            }
          }
        }
      ],
      "filter": [
        {
          "terms": {
            "environment": ["production", "staging"]
          }
        }
      ]
    }
  }
}

54.2.2 Zeitselektor konfigurieren

{
  "timepicker": {
    "refresh_intervals": [
      "5s",
      "10s",
      "30s",
      "1m",
      "5m",
      "15m",
      "30m",
      "1h",
      "2h",
      "1d"
    ],
    "time_options": [
      "5m",
      "15m",
      "1h",
      "6h",
      "12h",
      "24h",
      "7d",
      "30d",
      "90d",
      "1y"
    ]
  }
}

54.2.3 Visualisierungen einbinden

{
  "panels": [
    {
      "gridData": {
        "x": 0,
        "y": 0,
        "w": 24,
        "h": 15,
        "i": "1"
      },
      "version": "7.10.2",
      "panelIndex": "1",
      "embeddableConfig": {
        "title": "System Metrics Overview"
      },
      "panelRefName": "panel_0"
    }
  ]
}

54.3 Dashboard-Layout gestalten

54.3.1 Grid-Layout optimieren

{
  "layout": {
    "dimensions": {
      "width": 1200,
      "height": 900
    },
    "grid": {
      "columns": 24,
      "rows": "auto",
      "margin": [10, 10],
      "padding": [15, 15]
    }
  }
}

54.3.2 Responsive Design

// Dashboard-Komponente mit responsivem Verhalten
const DashboardPanel = () => {
  const [dimensions, setDimensions] = useState({ width: 0, height: 0 });

  useEffect(() => {
    const updateDimensions = () => {
      setDimensions({
        width: window.innerWidth,
        height: window.innerHeight
      });
    };

    window.addEventListener('resize', updateDimensions);
    return () => window.removeEventListener('resize', updateDimensions);
  }, []);

  return (
    <div className="dashboard-panel">
      {/* Responsive Visualisierungen */}
    </div>
  );
};

54.4 Interaktivität implementieren

54.4.1 Drilldowns konfigurieren

{
  "drilldowns": [
    {
      "name": "Details View",
      "triggerId": "ERROR_DETAILS",
      "actionTypeId": ".dashboard",
      "config": {
        "dashboardId": "error-details-dashboard",
        "useCurrentFilters": true
      }
    }
  ]
}
{
  "links": [
    {
      "url": "/app/dashboards#/view/related-dashboard",
      "label": "Related Analysis",
      "icon": "visualizeApp",
      "tooltip": "View detailed analysis"
    }
  ]
}

54.5 Dashboard-Optimierung

54.5.1 Performance verbessern

{
  "dashboard_settings": {
    "auto_refresh": {
      "pause": false,
      "value": "1m"
    },
    "use_markerType": "line",
    "visualization": {
      "lazy_loading": true,
      "batch_size": 500
    }
  }
}

54.5.2 Caching implementieren

{
  "cache_settings": {
    "panel_cache": {
      "enabled": true,
      "maxAge": 300000
    },
    "query_cache": {
      "enabled": true,
      "maxAge": 60000
    }
  }
}

54.6 Praktische Beispiele

54.6.1 System Monitoring Dashboard

{
  "title": "System Monitoring",
  "panels": [
    {
      "type": "metric",
      "title": "System Load",
      "gridData": {
        "x": 0,
        "y": 0,
        "w": 12,
        "h": 6
      },
      "config": {
        "metrics": [
          {
            "id": "1",
            "type": "avg",
            "field": "system.cpu.total.pct"
          }
        ]
      }
    },
    {
      "type": "line",
      "title": "Memory Usage",
      "gridData": {
        "x": 12,
        "y": 0,
        "w": 12,
        "h": 6
      },
      "config": {
        "metrics": [
          {
            "id": "1",
            "type": "avg",
            "field": "system.memory.actual.used.pct"
          }
        ]
      }
    }
  ]
}

54.6.2 Business Analytics Dashboard

{
  "title": "Sales Overview",
  "panels": [
    {
      "type": "gauge",
      "title": "Revenue Target",
      "gridData": {
        "x": 0,
        "y": 0,
        "w": 6,
        "h": 6
      },
      "config": {
        "gauge": {
          "verticalSplit": false,
          "extendRange": true,
          "percentageMode": true,
          "gaugeType": "Arc",
          "gaugeStyle": "Full",
          "backStyle": "Full",
          "orientation": "vertical",
          "colorSchema": "Green to Red",
          "gaugeColorMode": "Labels",
          "useRange": false,
          "colorsRange": [
            {
              "from": 0,
              "to": 50
            },
            {
              "from": 50,
              "to": 75
            },
            {
              "from": 75,
              "to": 100
            }
          ],
          "invertColors": false,
          "labels": {
            "show": true,
            "color": "black"
          },
          "scale": {
            "show": true,
            "labels": false,
            "color": "#333"
          },
          "type": "meter",
          "style": {
            "bgWidth": 0.9,
            "width": 0.9,
            "mask": false,
            "bgMask": false,
            "maskBars": 50,
            "bgFill": "#eee",
            "bgColor": false,
            "subText": "",
            "fontSize": 60,
            "labelFontSize": 20
          }
        }
      }
    }
  ]
}

54.7 Best Practices

  1. Design-Prinzipien
  2. Performance
  3. Wartbarkeit