<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title><![CDATA[Matthias Wilhelm - Elasticsearch Labs]]></title>
    <description><![CDATA[Articles and tutorials from the Search team at Elastic]]></description>
    <copyright><![CDATA[© 2026. Elasticsearch B.V. All Rights Reserved]]></copyright>
    <image>
      <title><![CDATA[Matthias Wilhelm - Elasticsearch Labs]]></title>
      <url>https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1121c0bf0e8a6e65/6a88da6340a1841030ef456f/search-labs-thumbnail.png</url>
      <link>https://www.elastic.co/de/search-labs/author/matthias-wilhelm</link>
    </image>
    <link>https://www.elastic.co/de/search-labs/author/matthias-wilhelm</link>
    <atom:link href="https://www.elastic.co/de/search-labs/rss/author/matthias-wilhelm.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[de]]></language>
    <lastBuildDate>Fri, 18 Sep 2026 21:48:02 GMT</lastBuildDate>
  <item>
    <title><![CDATA[Kibana reduziert die Dashboard-Ladezeit um bis zu 25 % – hier ist die Polling-Strategie dahinter]]></title>
    <description><![CDATA[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.]]></description>
    <content:encoded><![CDATA[<p>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.</p><h2>Wie Kibana Daten beim Laden eines Dashboards abruft</h2><p>Wenn ein Dashboard geöffnet wird, starten die meisten Panels (intern nennen wir diese <em>Embeddables</em>) 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 (<a href="https://www.elastic.co/docs/solutions/search/async-search-api">docs</a>).</p><p>Bei asynchroner Suche werden Abfrageergebnisse in Elasticsearch außerhalb einer bestimmten HTTP-Anfrage verfügbar gehalten. Das ist wichtig, weil es</p><ul><li><p>das Laden von Daten widerstandsfähig gegen Netzwerkturbulenzen macht</p></li><li><p>betreibt unser <a href="https://www.elastic.co/docs/explore-analyze/discover/background-search">Hintergrundsuch-Feature</a>, 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</p></li></ul><p>Nachdem die erste Abfrage abgeschickt wurde, überwacht Kibana die Suche, um festzustellen, wann sie abgeschlossen ist, und ruft dann das Ergebnis-Set ab.</p><h3>Wie sich traditionelle Umfragen auf die Ladezeiten des Kibana-Dashboards auswirken</h3><p>Im traditionellen Polling reicht Kibana eine Abfrage ein, schließt die Anfangsverbindung und überprüft dann regelmäßig Elasticsearch auf Abschluss.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt093ed1a718d2f2ed/6a1710c28b73cb568118a109/2f44064a2e627866e129eb626f68ddd62230a4e2-1999x719.png" alt="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." /><p>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 <em>Polling</em>.</p><h4>Leistungsnachteile traditioneller Abfragen</h4><p>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.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt3685326f1aa90a1b/6a1710c30c4857892b01ab7a/ad8b80d9e8d6d774065d62e352aad47c3ddb4686-1999x719.png" alt="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." /><p>Im schlimmsten Fall (wenn eine Suche zu Beginn einer Schlafphase abgeschlossen ist) wird die gesamte Dauer des Abfrageintervalls verschwendet.</p><h4>Die Auswirkungen einer Backoff-Strategie</h4><p>Bei Umfragen ist es üblich, eine Backoff-Strategie anzuwenden. Das bedeutet, je länger die Dauer der Suche, desto seltener fragen wir ab.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt37fb76cf22647ee5/6a1710c5a929cf6fcaae0abd/77665de4a0fd166b533a2c2c55f6f28e38cf37ce-1200x338.png" alt="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." /><p>Jedoch bedeutet dies auch, dass die potenzielle verlorene Zeit mit der Dauer der Suche skaliert.</p><h4>Wie Abfrageintervalle sägezahnförmige Latenzmuster erzeugen</h4><p>Wenn wir diese Faktoren zusammenfügen, wird unsere verlorene Zeit zu einer schrittweisen Sägezahnfunktion.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltd4e81306b0c9f259/6a1710c147d49c34c42d8aec/d5cd43366f62de628c3a054ffb7bf0b05d7a1390-1500x600.png" alt="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." /><p>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.</p><h2>Kontinuierliche Umfragen: Wie Kibana Wartezeiten eliminiert</h2><p>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?</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt4566eaaec79150c7/6a1710c78b73cb1df318a10d/7edc138528dfe1310df42f393ee7279fe3c4703b-1999x713.png" alt="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." /><p>Durch diese Kombination aus langer Abfragezeit und dem Wegfall von Schlafphasen werden die Ergebnisse geliefert, sobald sie vorliegen.</p><h3>HTTP/1-Verschlechterung</h3><p>Die Theorie ist solide. Warum sieht dieses Kibana Deployment dann so schlecht aus, wenn wir die kontinuierliche Abfrage aktivieren?</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltede864738a88e1cb/6a1710c947d49c178d2d8af2/517378a73d36bd95927b81b1f912ce465b7adf4c-800x412.gif" alt="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." /><p>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.</p><p>Bei HTTP/2+ hingegen können Netzwerkanfragen TCP-Verbindungen per Multiplexing teilen, sodass wir dieses Problem vermeiden.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt5cddb4d6767a1ccf/6a1710cb839dfa5056dcffcd/f60f3a37baf5ec16c9f1773f08855e7f9e3a7491-1536x1024.png" alt="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." /><p>Bei HTTP/2+ ist kontinuierliches Polling also ein Vorteil, bei HTTP/1 hingegen ein Nachteil.</p><p></p><p>HTTP/1</p><p>HTTP/2+</p><p>TCP-Verbindungen</p><p>Eine pro HTTP-Anfrage</p><p>Multiplexed (viele Anfragen teilen sich Verbindungen)</p><p>Kontinuierliches Abfrageverhalten</p><p>Verschlechtert die Leistung (Erschöpfung des Verbindungspools)</p><p>Voller Nutzen (Ergebnisse sofort verfügbar)</p><h4>Wie Kibana das HTTP-Protokoll für optimales Polling erkennt</h4><p>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.</p><p>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 <em>Browser</em> spricht.</p><p>Aufgrund von Proxies sind diese nicht immer identisch.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltc61ff0abfe101eec/6a1710cd2867144b8893e412/13e38001fc4bd3fc60cfc69114fb9098fd745906-1970x786.png" alt="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." /><p>Wenn wir unsere Optimierung auf das Serverprotokoll stützen würden, könnten wir Dinge auf eine von zwei Arten falsch machen.</p><ol><li><p>Wenden Sie kontinuierliches Polling an, wenn wir es nicht sollten, und verschlechtern Sie die Erfahrung.</p></li><li><p>Wenn Sie die kontinuierliche Abfrage nicht anwenden, verpassen Sie die Optimierung.</p></li></ol><p>Glücklicherweise bieten moderne Browser eine Möglichkeit, das Protokoll des letzten Netzwerk-Hops einer abgeschlossenen Anfrage mithilfe von <code>PerformanceObserver</code> zu ermitteln. Also beobachten wir das Protokoll der ersten Abfrage und optimieren darauf basierend.</p>new PerformanceObserver((list) =&gt; {
  const entries = list.getEntries();
  const entry = entries.find(({ name }) =&gt; name.includes('/internal/search/'));
  if (entry) {
    this.protocolSupportsMultiplexing = ['h2', 'h3'].includes(entry.nextHopProtocol);
  }
});<h2>Laborergebnisse: kontinuierliches Polling vs. traditionelles Polling in Kibana</h2><p>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 <a href="https://github.com/kertal/race-for-the-prize">race-for-the-prize</a>).</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltba4af840d8324923/6a1710ceb339d52fe076a0b6/5f19fb45c5307a7491037fe1ad1a302728793203-1200x742.png" alt="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." /><p>Das Muster ähnelt unserem ursprünglichen Sägezahndiagramm. Für einige Abfragedauern sind die Gewinne gering, während sie bei anderen mehrere Sekunden betragen.</p><h2>Fazit</h2><p>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 <code>PerformanceObserver</code> des Browsers, um das verwendete Protokoll für den letzten Netzwerkhop zuverlässig zu erkennen.</p><p>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.</p><p>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!</p><p>(Im Jahr 2025 gab Thomas Neirynk einen <a href="https://www.elastic.co/search-labs/blog/kibana-dashboard-rendering-time">ausgezeichneten Überblick</a> über die Methoden und die Motivation hinter der Verbesserung der Kibana-Dashboard-Leistung. Dies ist ein Update zu dieser Initiative.)</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/kibana-dashboard-performance-continuous-polling</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/kibana-dashboard-performance-continuous-polling</guid>
    <category><![CDATA[Kibana]]></category>
    <dc:creator><![CDATA[Drew Tate,Matthias Wilhelm]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltd4e81306b0c9f259/6a1710c147d49c34c42d8aec/d5cd43366f62de628c3a054ffb7bf0b05d7a1390-1500x600.png" length="0" type="image/png"/>
    <pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate>
  </item>
  </channel>
</rss>