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.

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.

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.

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.

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?

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?

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.

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.

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.
- Wenden Sie kontinuierliches Polling an, wenn wir es nicht sollten, und verschlechtern Sie die Erfahrung.
- 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.
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).

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.




