Blog

Kibana reduziert die Dashboard-Ladezeit um bis zu 25 % – hier ist die Polling-Strategie dahinter

Erfahren Sie, wie Kibana durch kontinuierliches Polling und browserseitige HTTP/2-Erkennung die Ladezeiten des Dashboards um bis zu 25 % verkürzt und dabei automatisch auf HTTP/1 zurückgreift.

Dank kontinuierlichem Polling laden Kibana-Dashboards und Discover jetzt bis zu 25 % schneller. Anstatt zwischen periodischen Prüfungen zu schlafen, hält Kibana jetzt HTTP-Verbindungen offen und liefert Elasticsearch-Abfrageergebnisse, sobald sie bereit sind. Bei HTTP/2+ (dem Kibana-Standard seit Version 9.0) wird dies automatisch aktiviert, ohne dass eine Konfiguration erforderlich ist. Bei HTTP/1 greift Kibana auf das traditionelle Polling zurück, um eine Erschöpfung des Verbindungspools zu verhindern.

Wie Kibana Daten beim Laden eines Dashboards abruft

Wenn ein Dashboard geöffnet wird, starten die meisten Panels (intern nennen wir diese Embeddables) eine oder mehrere Elasticsearch-Abfragen. Statt des einfachen Ruf-und-Antwort-Spiels einer synchronen (Sync-)Suche nutzen wir jedoch die Kraft der asynchronen (Async-)Suche (docs).

Bei asynchroner Suche werden Abfrageergebnisse in Elasticsearch außerhalb einer bestimmten HTTP-Anfrage verfügbar gehalten. Das ist wichtig, weil es

  • das Laden von Daten widerstandsfähig gegen Netzwerkturbulenzen macht

  • betreibt unser Hintergrundsuch-Feature, das es den Nutzern ermöglicht, an anderen Dingen in Kibana zu arbeiten, während sie auf ein länger laufendes Dashboard oder eine Discover-Sitzung warten

Nachdem die erste Abfrage abgeschickt wurde, überwacht Kibana die Suche, um festzustellen, wann sie abgeschlossen ist, und ruft dann das Ergebnis-Set ab.

Wie sich traditionelle Umfragen auf die Ladezeiten des Kibana-Dashboards auswirken

Im traditionellen Polling reicht Kibana eine Abfrage ein, schließt die Anfangsverbindung und überprüft dann regelmäßig Elasticsearch auf Abschluss.

Diagramm, das die traditionelle Abfrage in Kibana zeigt. Die Kibana-Timeline zeigt eine kurze Verbindungsaufbauphase nach der Abfrageeinreichung, gefolgt von einer langen Leerlaufphase, dann einer kurzen Statusabfrage und schließlich der Ergebnislieferung. Die Elasticsearch-Zeitachse führt eine Abfrage aus, die mitten in Kibanas Leerlaufphase abgeschlossen wird, was die Koordinationslücke veranschaulicht, die zu Zeitverlusten führt.

Traditionelle Umfragestrategie

Wir geben Elasticsearch nach dem Absenden der Abfrage eine kurze Zeitspanne, um die Suche abzuschließen und die Ergebnisse zu präsentieren. Wenn die Suche so schnell abgeschlossen ist, entspricht dies einem einfachen Aufruf und einer Reaktion. Bei längeren Suchen wird jedoch die erste Verbindung geschlossen und Kibana beginnt, die Suche regelmäßig auf Abschluss zu überprüfen. Das nennt man Polling.

Leistungsnachteile traditioneller Abfragen

Wenn Sie sich die obige Abbildung ansehen, erkennen Sie vielleicht bereits den Leistungsnachteil dieses Ansatzes: Die Suche wird höchstwahrscheinlich während eines der Ruheintervalle von Kibana abgeschlossen, was zu Zeitverlusten führt.

Zeitstrahldiagramm zur Veranschaulichung der Leistungskosten traditioneller Abfragen. Die Kibana-Zeitleiste zeigt einen Verbindungs-offen-Zeitraum, einen langen Ruhezeitraum, eine Statusabfrage und dann die gelieferten Ergebnisse. Die Elasticsearch-Zeitleiste zeigt, dass die Abfrage mitten im Ruhezustand von Kibana abgeschlossen wurde, gefolgt von einem roten Zeitverlustsegment – der verschwendeten Zeitspanne, bevor Kibana aufwacht und die Ergebnisse abruft.

Die Schattenseiten traditioneller Meinungsforschung

Im schlimmsten Fall (wenn eine Suche zu Beginn einer Schlafphase abgeschlossen ist) wird die gesamte Dauer des Abfrageintervalls verschwendet.

Die Auswirkungen einer Backoff-Strategie

Bei Umfragen ist es üblich, eine Backoff-Strategie anzuwenden. Das bedeutet, je länger die Dauer der Suche, desto seltener fragen wir ab.

Horizontales Balkendiagramm, das den Backoff-Zeitplan von Kibana für das Abfrageintervall nach Abfragedauer zeigt. Abfragen unter 1,5 Sekunden verwenden ein Intervall von etwa 0,5 Sekunden; 1,5–5-Sekunden-Abfragen verwenden 1 Sekunde; 5–20-Sekunden-Abfragen verwenden etwa 2,5 Sekunden; Abfragen über 20 Sekunden verwenden ein 5-sekündiges Abfrageintervall.

Abfrageintervall-Backoff-Plan

Jedoch bedeutet dies auch, dass die potenzielle verlorene Zeit mit der Dauer der Suche skaliert.

Wie Abfrageintervalle sägezahnförmige Latenzmuster erzeugen

Wenn wir diese Faktoren zusammenfügen, wird unsere verlorene Zeit zu einer schrittweisen Sägezahnfunktion.

Liniendiagramm, das verlorene Zeit in Sekunden versus Abfrageabschlusszeit in Sekunden zeigt und ein Sägezahnmuster bildet, bei dem verlorene Zeit ansteigt und dann wiederholt auf null sinkt, mit Spitzen, die von unter 1 Sekunde auf 5 Sekunden wachsen, da die Abfragedauer von 0 auf 30 Sekunden steigt.

Verlorene Zeit durch Abfragedauer

Hier sind die Spitzenwerte, die Worst-Case-Szenarien, und die Tiefstwerte, die Best-Case-Szenarien, darstellen. Dies zeigt, dass traditionelle Umfragen uns je nach Suchdauer (und Netzwerkbedingungen) zwischen nichts und der gesamten Dauer des Umfrageintervalls kosten.

Kontinuierliche Umfragen: Wie Kibana Wartezeiten eliminiert

Das Problem bei traditionellem Polling ist ein grundlegender Mangel an Koordination zwischen Kibana und Elasticsearch. Idealerweise weiß Kibana sofort, wenn Ergebnisse verfügbar sind. Was wäre also, wenn wir das Polling-Muster so umkehren würden, dass fast die gesamte Zeit mit der Überprüfung von Elasticsearch verbracht wird und keine Zeit mit Leerlauf?

Zeitstrahldiagramm zeigt kontinuierliche Abfragen in Kibana. Die Kibana-Zeitleiste ist vollständig blau – die Verbindung bleibt von der Abfrageübermittlung über zwei Verbindungsaktualisierungen bis zur Ergebnislieferung ohne Ruhephasen offen. Die Elasticsearch-Zeitleiste zeigt, dass die Abfrage abgeschlossen ist und die Ergebnisse sofort geliefert werden. Die Legende zeigt „Verlorene Zeit“ durchgestrichen an, was darauf hinweist, dass sie eliminiert wurde.

Kontinuierliche Abfrage: Eine Lösung für Zeitverlust

Durch diese Kombination aus langer Abfragezeit und dem Wegfall von Schlafphasen werden die Ergebnisse geliefert, sobald sie vorliegen.

HTTP/1-Verschlechterung

Die Theorie ist solide. Warum sieht dieses Kibana Deployment dann so schlecht aus, wenn wir die kontinuierliche Abfrage aktivieren?

Animierte Bildschirmaufnahme eines Kibana-Dashboards, das den Sample Logs Data-Datensatz lädt und mehrere Panels in der Reihenfolge zeigt, darunter eine Antwortcode-Zeitreihe, eine US-Karte der Gesamtanfragen, die Anzahl der einzigartigen Besucher, HTTP-Fehlerquotenmetriken und ein Sankey-Diagramm der Betriebssystem- und Zieldaten der Maschinen.

Kontinuierliches Polling verursacht eine Leistungsverschlechterung bei Clients, die über HTTP/1 verbunden sind

Der Schlüssel ist, dass diese Deployment über HTTP/1 läuft. Bei HTTP/1 werden HTTP-Anfragen 1:1 auf TCP-Verbindungen abgebildet. Also beanspruchen mehrere langlebige Polling-Anfragen den begrenzten Verbindungspool des Browsers und führen dazu, dass andere Anfragen in die Warteschlange gestellt werden.

Bei HTTP/2+ hingegen können Netzwerkanfragen TCP-Verbindungen per Multiplexing teilen, sodass wir dieses Problem vermeiden.

Diagramm zum Vergleich von HTTP/1 und HTTP/2 für kontinuierliches Polling in Kibana. HTTP/1 erfordert eine TCP-Verbindung pro Anfrage, wodurch der Verbindungspool des Browsers mit sechs Verbindungen erschöpft wird. HTTP/2 multiplexiert mehrere Polling-Anfragen über eine einzelne TCP-Verbindung, vermeidet Pool-Erschöpfung und erhält die Leistung.

Unterschied im HTTP-TCP-Mapping zwischen HTTP/1 und HTTP/2+

Bei HTTP/2+ ist kontinuierliches Polling also ein Vorteil, bei HTTP/1 hingegen ein Nachteil.

HTTP/1

HTTP/2+

TCP-Verbindungen

Eine pro HTTP-Anfrage

Multiplexed (viele Anfragen teilen sich Verbindungen)

Kontinuierliches Abfrageverhalten

Verschlechtert die Leistung (Erschöpfung des Verbindungspools)

Voller Nutzen (Ergebnisse sofort verfügbar)

Wie Kibana das HTTP-Protokoll für optimales Polling erkennt

HTTP/2 ist das empfohlene Protokoll und seit Kibana 9.0 der Standard, daher wäre es schade, diese Leistungsverbesserung nicht auszuliefern. Andererseits ist die Benutzerfreundlichkeit von HTTP/1 so schlecht, dass es nicht vertretbar ist, dieses Risiko bei On-Prem-Deployments einzugehen, die ihr Protokoll noch nicht aktualisiert haben. Die Antwort ist klar: Wir müssen erkennen, welches Protokoll verwendet wird, und die optimale Polling-Strategie anwenden.

Es ist durchaus möglich, dass der Kibana-Server weiß, welches Protokoll er spricht. Aber es gibt einen Haken: der limitierende Faktor ist der Verbindungspool des Browsers. Das bedeutet, dass es wirklich darauf ankommt, was der Browser spricht.

Aufgrund von Proxies sind diese nicht immer identisch.

Architekturdiagramm zeigt drei Komponenten in einer horizontalen Kette: Kibana Server links, einen optionalen Proxy in der Mitte und Kibana Client rechts. Der Server-zu-Proxy-Hop wird mit kibana.yml server.protocol gekennzeichnet und gibt das bekannte Protokoll an. Der Proxy-zu-Client-Hop ist mit drei Fragezeichen gekennzeichnet, was darauf hinweist, dass das Protokoll auf diesem letzten Hop unbekannt ist und abweichen kann.

Das Protokoll kann bei jedem Netzwerk-Hop unterschiedlich sein

Wenn wir unsere Optimierung auf das Serverprotokoll stützen würden, könnten wir Dinge auf eine von zwei Arten falsch machen.

  1. Wenden Sie kontinuierliches Polling an, wenn wir es nicht sollten, und verschlechtern Sie die Erfahrung.

  2. Wenn Sie die kontinuierliche Abfrage nicht anwenden, verpassen Sie die Optimierung.

Glücklicherweise bieten moderne Browser eine Möglichkeit, das Protokoll des letzten Netzwerk-Hops einer abgeschlossenen Anfrage mithilfe von PerformanceObserver zu ermitteln. Also beobachten wir das Protokoll der ersten Abfrage und optimieren darauf basierend.

new PerformanceObserver((list) => {
  const entries = list.getEntries();
  const entry = entries.find(({ name }) => name.includes('/internal/search/'));
  if (entry) {
    this.protocolSupportsMultiplexing = ['h2', 'h3'].includes(entry.nextHopProtocol);
  }
});

Laborergebnisse: kontinuierliches Polling vs. traditionelles Polling in Kibana

Um kontinuierliche Abfragen zu validieren, erstellten wir Dashboards mit Abfrageverzögerungen von 1–23 Sekunden und maßen Ladezeiten mit und ohne aktivierte Optimierung. Wir luden dann die Dashboards mit und ohne kontinuierliches Polling, um die Gewinne zu messen (wir hatten viel Spaß mit race-for-the-prize).

Balkendiagramm mit Labortestergebnissen für das kontinuierliche Polling von Kibana: Zeitersparnis gegenüber dem herkömmlichen Polling bei Abfragedauern von 1 bis 23 Sekunden. Die Einsparungen variieren zwischen nahezu null und 4,9 Sekunden, je nachdem, wann die Abfragen im Verhältnis zu den Grenzen des Abfrageintervalls abgeschlossen werden, was das vom Backoff-Plan vorhergesagte sägezahnförmige Latenzmuster bestätigt.

Ladezeiten des Dashboards nach Abfragedauer

Das Muster ähnelt unserem ursprünglichen Sägezahndiagramm. Für einige Abfragedauern sind die Gewinne gering, während sie bei anderen mehrere Sekunden betragen.

Fazit

Durch diese Optimierung wird die bei herkömmlichen Abfrageverfahren übliche Latenz erfolgreich durch eine effizientere, kontinuierliche Abfragestrategie ersetzt. Die primäre Herausforderung bestand darin, diese Optimierung unter bestimmten Bedingungen umzusetzen, um eine Leistungsverschlechterung bei HTTP/1-Deployments zu verhindern. Wir lösten es mithilfe des PerformanceObserver des Browsers, um das verwendete Protokoll für den letzten Netzwerkhop zuverlässig zu erkennen.

Labortests bestätigen die Theorie und zeigen, dass kontinuierliche Abfragen Ergebnisse liefern, sobald diese verfügbar sind. Im Durchschnitt führt dies zu einer deutlichen Verbesserung des Nutzererlebnisses, wodurch das Laden von Daten um bis zu 25 % beschleunigt wird.

Diese Arbeit ist der jüngste Schritt in unserem Bestreben, die Zeit bis zum Einblick für unsere Nutzer zu verkürzen. Indem wir Kibana zu einem transparenteren Proxy für Elasticsearch-Daten machen, erweitern wir die Leistungsgrenzen innerhalb unseres Einflussbereichs. Fortsetzung folgt!

(Im Jahr 2025 gab Thomas Neirynk einen ausgezeichneten Überblick über die Methoden und die Motivation hinter der Verbesserung der Kibana-Dashboard-Leistung. Dies ist ein Update zu dieser Initiative.)

Häufige Fragen

Wie verbessert kontinuierliches Abfragen das Laden von Dashboards in Kibana?

Die Ladegeschwindigkeit des Dashboards hängt davon ab, wie schnell Kibana Abfrageergebnisse von Elasticsearch abrufen kann. Beim traditionellen Polling wird in regelmäßigen Abständen geprüft, ob der Vorgang abgeschlossen ist, was zu Verzögerungen bei der Ergebnisermittlung führen kann. Mit HTTP/2+ aktiviert Kibana automatisch das kontinuierliche Polling, wodurch Verzögerungen vermieden werden, indem Verbindungen offen gehalten werden und Ergebnisse sofort geliefert werden, sobald sie verfügbar sind.

Was ist kontinuierliches Polling und wie verbessert es die Leistung von Kibana?

Kontinuierliches Polling kehrt das traditionelle Muster um, indem HTTP-Verbindungen offen gehalten werden, während auf Elasticsearch-Abfrageergebnisse gewartet wird, anstatt zwischen periodischen Überprüfungen zu schlafen. Dadurch wird keine Zeit verschwendet, und Sie erhalten die Ergebnisse, sobald sie bereitstehen, was Dashboards und Discover beschleunigt.

Funktioniert kontinuierliches Polling bei HTTP/1-Verbindungen?

Nein. Kontinuierliches Polling wird nur auf HTTP/2+-Verbindungen angewendet, bei denen Multiplexing verhindert, dass langlebige Anfragen anderen Verkehr blockieren. Kibana erkennt das Protokoll automatisch über die PerformanceObserver-API des Browsers und wendet traditionelles Polling auf HTTP/1 an, um Leistungseinbußen zu vermeiden.

Wie viel schneller sind Kibana-Dashboards mit kontinuierlichem Polling?

Labortests zeigen, dass sich die Ladezeiten des Dashboards je nach Abfragedauer um bis zu 25 % verbessern. Bei längeren Abfragen ergeben sich größere absolute Zeiteinsparungen, während bei sehr kurzen Abfragen der Unterschied minimal ist.

Wie erkennt Kibana, ob kontinuierliches oder traditionelles Polling verwendet werden soll?

Kibana verwendet die PerformanceObserver-API des Browsers, um das HTTP-Protokoll der ersten Abfrage zu erkennen. Wenn das Protokoll HTTP/2 oder HTTP/3 ist (die Multiplexing unterstützen), ist kontinuierliches Polling aktiviert. Wird HTTP/1 erkannt, wird das herkömmliche Polling-Verfahren eingesetzt, um eine Erschöpfung des Verbindungspools zu verhindern.

Kann kontinuierliches Polling zu Problemen mit meinem Netzwerk-Proxy oder Load Balancer führen?

Das kontinuierliche Polling nutzt HTTP/2+-Multiplexing, um eine Erschöpfung des Browser-Verbindungspools zu vermeiden. Wenn Ihr Proxy die Verbindungen zwischen dem Proxy und dem Browser auf HTTP/1 herunterstuft, erkennt Kibana dies und verwendet stattdessen das traditionelle Polling. Die Optimierung wird bedingt angewendet, je nachdem, welches Protokoll der Browser tatsächlich unterstützt.

Ich sehe Timeouts. Was soll ich tun?

Wenn Ihr Proxy HTTP/2+ verwendet, aber ein Timeout von weniger als 30 Sekunden erzwingt, werden Sie Suchzeitüberschreitungen feststellen. Um das Problem zu beheben, erhöhen Sie entweder Ihr Proxy-Timeout oder setzen Sie data.search.asyncSearch.pollLength in Ihrer kibana.yml auf einen Wert, der niedriger als Ihr Timeout ist.

Zugehörige Inhalte

KI-gestützte Dashboards: Von der Vision zu Kibana

Jeffrey Rengifo

Geodaten mit Kibana in Elasticsearch einlesen und in ES|QL verwenden

Craig Taverner

Verbesserung der Interaktivität des Kibana-Dashboards mit Steuerelementen für Variablen

Teresa Alvarez Soler

Beschreiben statt zeichnen: KI-native Kibana-Dashboards über MCP und ES|QL

Spotify Wrapped Teil 2: Datenanalyse und Visualisierung

Philipp Kahr

Sind Sie bereit, hochmoderne Sucherlebnisse zu schaffen?

Eine ausreichend fortgeschrittene Suche kann nicht durch die Bemühungen einer einzelnen Person erreicht werden. Elasticsearch wird von Datenwissenschaftlern, ML-Ops-Experten, Ingenieuren und vielen anderen unterstützt, die genauso leidenschaftlich an der Suche interessiert sind wie Sie. Lasst uns in Kontakt treten und zusammenarbeiten, um das magische Sucherlebnis zu schaffen, das Ihnen die gewünschten Ergebnisse liefert.

Probieren Sie es selbst aus