<?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/fr/search-labs/author/matthias-wilhelm</link>
    </image>
    <link>https://www.elastic.co/fr/search-labs/author/matthias-wilhelm</link>
    <atom:link href="https://www.elastic.co/fr/search-labs/rss/author/matthias-wilhelm.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[fr]]></language>
    <lastBuildDate>Fri, 18 Sep 2026 21:42:01 GMT</lastBuildDate>
  <item>
    <title><![CDATA[Kibana réduit le temps de chargement des tableaux de bord jusqu'à 25 %. Voici la stratégie d'interrogation qui se cache derrière]]></title>
    <description><![CDATA[Découvrez comment Kibana utilise l'interrogation continue et la détection HTTP/2 côté navigateur pour réduire les temps de chargement des tableaux de bord jusqu'à 25 %, avec repli automatique sur HTTP/1.]]></description>
    <content:encoded><![CDATA[<p>Les tableaux de bord Kibana et Discover se chargent désormais jusqu'à 25 % plus rapidement grâce à l'interrogation continue. Au lieu d'interrompre l'exécution entre les vérifications périodiques, Kibana maintient les connexions HTTP ouvertes et fournit les résultats des requêtes Elasticsearch dès qu'ils sont disponibles. Sur HTTP/2 et versions ultérieures (configuration par défaut de Kibana depuis la version 9.0), cette fonctionnalité est activée automatiquement, sans aucune configuration nécessaire. Sur HTTP/1, Kibana utilise l'interrogation classique pour éviter la saturation du pool de connexions.</p><h2>Comment Kibana récupère les données lors du chargement d'un tableau de bord</h2><p>Lorsqu'un tableau de bord est ouvert, la plupart des panneaux, (en interne, nous les appelons <em>panneaux intégrables</em>) lancent une ou plusieurs requêtes Elasticsearch. Mais au lieu du simple échange d'appels et de réponses d'une recherche synchrone (sync), nous utilisons la puissance de la recherche asynchrone (async) (<a href="https://www.elastic.co/docs/solutions/search/async-search-api">documentation</a>).</p><p>Avec la recherche asynchrone, les résultats des requêtes restent disponibles dans Elasticsearch en dehors de toute requête HTTP particulière. Ce point est important, car il</p><ul><li><p>rend le chargement des données résistant aux perturbations du réseau.</p></li><li><p>alimente notre <a href="https://www.elastic.co/docs/explore-analyze/discover/background-search">fonctionnalité de recherche en arrière-plan</a>, qui permet aux utilisateurs de travailler sur d'autres éléments dans Kibana pendant qu'ils attendent la fin d'une session de tableau de bord ou Discover de longue durée.</p></li></ul><p>Une fois la requête initiale envoyée, Kibana surveille la recherche pour détecter sa fin et récupérer l'ensemble des résultats.</p><h3>Comment l'interrogation classique affecte les temps de chargement du tableau de bord Kibana</h3><p>Dans le système d'interrogation traditionnel, Kibana envoie une requête, ferme la connexion initiale, puis vérifie périodiquement auprès d'Elasticsearch si l'opération est terminée.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt093ed1a718d2f2ed/6a1710c28b73cb568118a109/2f44064a2e627866e129eb626f68ddd62230a4e2-1999x719.png" alt="Diagramme illustrant l'interrogation classique dans Kibana. La chronologie Kibana montre une courte période de connexion ouverte après l'envoi de la requête, suivie d'une longue période d'inactivité, puis d'une brève interrogation pour vérifier l'état, et enfin la transmission des résultats. La chronologie Elasticsearch exécute une requête qui se termine au milieu de la période d'inactivité de Kibana, illustrant ainsi le décalage de coordination à l'origine de la perte de temps." /><p>Après l'envoi d'une requête, Elasticsearch dispose d'un court laps de temps pour effectuer la recherche et renvoyer les résultats. Si la recherche s'achève rapidement, il s'agit d'un simple échange de données. En revanche, pour les recherches plus longues, la connexion initiale est fermée et Kibana vérifie régulièrement l'état d'avancement de la recherche. Ce processus est appelé <em>interrogation</em>.</p><h4>Inconvénients de l'interrogation classique en termes de performance</h4><p>Si vous observez la figure ci-dessus, vous pouvez constatez peut-être l'inconvénient de cette approche en termes de performances : la recherche a de fortes chances de se terminer pendant l'un des intervalles d'inactivité de Kibana, ce qui entraîne une perte de temps.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt3685326f1aa90a1b/6a1710c30c4857892b01ab7a/ad8b80d9e8d6d774065d62e352aad47c3ddb4686-1999x719.png" alt="Diagramme chronologique illustrant la dégradation des performances qu'implique l'interrogation classique. La chronologie Kibana montre une période de connexion ouverte, une longue période d'inactivité, une interrogation pour vérifier l'état, puis la transmission des résultats. La chronologie Elasticsearch montre la requête se terminant à mi-chemin de la période d'inactivité de Kibana, suivie d'un segment rouge représentant la perte de temps, soit la durée gaspillée avant que Kibana ne se réactive et récupère les résultats." /><p>Dans le pire des cas (lorsqu'une recherche se termine au début d'une période d'inactivité), toute la durée de l'intervalle d'interrogation sera perdue.</p><h4>L'impact d'une stratégie de temporisation</h4><p>Il est d'usage, lors des interrogations, d'appliquer une stratégie de temporisation. Cela signifie que plus la durée de la recherche est longue, moins les interrogations sont fréquentes.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt37fb76cf22647ee5/6a1710c5a929cf6fcaae0abd/77665de4a0fd166b533a2c2c55f6f28e38cf37ce-1200x338.png" alt="Graphique à barres horizontales illustrant le programme de temporisation des intervalles d'interrogation de Kibana en fonction de la durée des requêtes. Les requêtes inférieures à 1,5 seconde utilisent un intervalle d'environ 0,5 seconde, celles de 1,5 à 5 secondes, un intervalle de 1 seconde, celles de 5 à 20 secondes, un intervalle d'environ 2,5 secondes, et celles supérieures à 20 secondes, un intervalle de 5 secondes." /><p>Toutefois, cela signifie également que le temps potentiellement perdu est proportionnel à la durée de la recherche.</p><h4>Comment les intervalles d'interrogation créent des schémas de latence en dents de scie</h4><p>En rassemblant ces facteurs, notre temps perdu devient une fonction en dents de scie par paliers.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltd4e81306b0c9f259/6a1710c147d49c34c42d8aec/d5cd43366f62de628c3a054ffb7bf0b05d7a1390-1500x600.png" alt="Graphique linéaire montrant le temps perdu en secondes en fonction du temps d'exécution de la requête en secondes, formant un motif en dents de scie où le temps perdu augmente puis retombe à zéro de manière répétée, avec des pics passant de moins d'une seconde à 5 secondes à mesure que la durée de la requête augmente de 0 à 30 secondes." /><p>Ici, les pics représentent les scénarios les plus défavorables et les creux les scénarios les plus favorables. Cela montre que le coût d'un système d'interrogation traditionnel varie de zéro à la durée totale de l'intervalle d'interrogation, selon la durée de la recherche (et les conditions du réseau).</p><h2>Interrogation continue : comment Kibana élimine les temps d'attente</h2><p>Le problème avec les interrogations classiques est le manque fondamental de coordination entre Kibana et Elasticsearch. Idéalement, Kibana devrait être informé immédiatement de la disponibilité des résultats. Et si l'on inversait le schéma d'interrogation pour que la quasi-totalité du temps soit consacrée à la vérification d'Elasticsearch, sans aucune interruption ?</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt4566eaaec79150c7/6a1710c78b73cb1df318a10d/7edc138528dfe1310df42f393ee7279fe3c4703b-1999x713.png" alt="Diagramme chronologique illustrant l'interrogation continue dans Kibana. La chronologie Kibana est entièrement bleue : la connexion reste ouverte depuis l'envoi de la requête jusqu'à la réception des résultats après deux actualisations, et ce, sans interruption. La chronologie Elasticsearch montre l'exécution de la requête et la réception immédiate des résultats. La légende montre le temps perdu barré, signalant ainsi son élimination." /><p>Avec cette combinaison d'interrogations de longue durée et d'absence de périodes de veille, les résultats sont transmis dès qu'ils sont prêts.</p><h3>Dégradation HTTP/1</h3><p>La théorie tient la route. Alors pourquoi ce déploiement Kibana semble-t-il si dégradé lorsque nous activons l'interrogation continue ?</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltede864738a88e1cb/6a1710c947d49c178d2d8af2/517378a73d36bd95927b81b1f912ce465b7adf4c-800x412.gif" alt="Enregistrement d'écran animé d'un tableau de bord Kibana chargeant l'ensemble de données Sample Logs Data, montrant plusieurs panneaux se remplissant en séquence, notamment une série chronologique des codes de réponse, une carte des États-Unis du nombre total de requêtes, le nombre de visiteurs uniques, les métriques du taux d'erreur HTTP et un graphique de Sankey des données du système d'exploitation et de destination de la machine." /><p>Le point important est que ce déploiement s'exécute sur HTTP/1. Avec HTTP/1, les requêtes HTTP sont associées une à une à des connexions TCP. Par conséquent, plusieurs requêtes d'interrogation de longue durée monopolisent le nombre limité de connexions du navigateur, ce qui entraîne la mise en file d'attente d'autres requêtes.</p><p>En revanche, avec HTTP/2+, les requêtes réseau peuvent partager des connexions TCP via le multiplexage, ce qui nous évite ce problème.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt5cddb4d6767a1ccf/6a1710cb839dfa5056dcffcd/f60f3a37baf5ec16c9f1773f08855e7f9e3a7491-1536x1024.png" alt="Diagramme comparant HTTP/1 et HTTP/2 pour l'interrogation continue de Kibana. HTTP/1 requiert une connexion TCP par requête, ce qui sature le pool de connexions du navigateur (six connexions disponibles). HTTP/2 multiplexe plusieurs requêtes d'interrogation sur une seule connexion TCP, évitant ainsi la saturation du pool et préservant les performances." /><p>Ainsi, sur HTTP/2+, l'interrogation continue est une vertu, mais sur HTTP/1, elle devient un vice.</p><p></p><p>HTTP/1</p><p>HTTP/2+</p><p>Connexions TCP</p><p>Une par requête HTTP</p><p>Multiplexée (plusieurs requêtes partagent les mêmes connexions)</p><p>Comportement de l'interrogation continue</p><p>Dégrade les performances (saturation du pool de connexions)</p><p>Bénéfice complet (résultats immédiats)</p><h4>Comment Kibana détecte le protocole HTTP pour une interrogation optimale</h4><p>HTTP/2 est le protocole recommandé et celui par défaut de Kibana depuis la version 9.0 ; il serait donc dommage de ne pas intégrer cette amélioration des performances. En revanche, l'expérience utilisateur avec HTTP/1 est tellement dégradée qu'il est inacceptable de prendre le risque de l'utiliser sur les déploiements sur site dont le protocole n'a pas encore été mis à niveau. La solution est claire : nous devons détecter le protocole utilisé et appliquer la stratégie d'interrogation optimale.</p><p>Il est tout à fait possible que le serveur Kibana sache quel protocole il utilise. Cependant, il y a un hic : le facteur limitant est le pool de connexions du navigateur. Autrement dit, ce qui compte vraiment, c'est le protocole utilisé par le <em>navigateur</em>.</p><p>En raison des proxys, ceux-ci ne sont pas toujours identiques.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltc61ff0abfe101eec/6a1710cd2867144b8893e412/13e38001fc4bd3fc60cfc69114fb9098fd745906-1970x786.png" alt="Schéma d'architecture illustrant trois composants disposés horizontalement : le serveur Kibana à gauche, un proxy optionnel au centre et le client Kibana à droite. La liaison entre le serveur et le proxy est indiquée par kibana.yml server.protocol qui précise le protocole connu. La liaison entre le proxy et le client est indiquée par trois points d'interrogation, signalant que le protocole de cette dernière liaison est inconnu et peut différer." /><p>Si nous basons notre optimisation sur le protocole du serveur, nous pourrions nous tromper de deux manières.</p><ol><li><p>Appliquer une interrogation continue à tort et dégrader l'expérience utilisateur.</p></li><li><p>Ne pas parvenir à appliquer une interrogation continue quand il le faudrait et passer à côté de l'optimisation.</p></li></ol><p>Heureusement, les navigateurs modernes permettent de détecter le protocole du dernier saut réseau de toute requête terminée grâce à l'utilisation de <code>PerformanceObserver</code>. Ainsi, nous surveillons le protocole du premier envoi de requête et optimisons en conséquence.</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>Résultats en laboratoire : interrogation continue et interrogation classique dans Kibana</h2><p>Pour valider l'interrogation continue, nous avons créé des tableaux de bord avec des délais de requête allant de 1 à 23 secondes et mesuré les temps de chargement avec et sans l'optimisation activée. Nous avons ensuite chargé les tableaux de bord avec et sans interrogation continue pour mesurer les gains (nous nous sommes bien amusés avec la <a href="https://github.com/kertal/race-for-the-prize">course aux prix</a>).</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltba4af840d8324923/6a1710ceb339d52fe076a0b6/5f19fb45c5307a7491037fe1ad1a302728793203-1200x742.png" alt="Graphique à barres présentant les résultats des tests en laboratoire pour l'interrogation continue de Kibana : gain de temps par rapport à l'interrogation classique pour des durées de requête allant de 1 à 23 secondes. Les gains varient de presque zéro à 4,9 secondes selon le moment où les requêtes se terminent par rapport aux limites de l'intervalle d'interrogation, confirmant le motif de latence en dents de scie prédit par la stratégie de temporisation." /><p>Ce schéma rappelle notre diagramme en dents de scie initial. Pour certaines durées de requête, les gains sont faibles, tandis que pour d'autres, ils atteignent plusieurs secondes.</p><h2>Conclusion</h2><p>Cette optimisation remplace efficacement la latence inhérente à l'interrogation classique par une stratégie d'interrogation continue plus performante. La principale difficulté résidait dans la mise en œuvre conditionnelle de cette optimisation afin d'éviter toute dégradation des performances sur les déploiements HTTP/1. Nous l'avons résolue en utilisant la fonction <code>PerformanceObserver</code> du navigateur pour détecter de manière fiable le protocole utilisé pour le dernier saut du réseau.</p><p>Des tests en laboratoire valident cette théorie, démontrant que l'interrogation continue fournit des résultats dès qu'ils sont disponibles. En moyenne, cela se traduit par une amélioration significative de l'expérience utilisateur, avec un temps de chargement des données jusqu'à 25 % plus rapide.</p><p>Ce travail représente la dernière étape de notre engagement à réduire le délai d'accès aux informations pour nos utilisateurs. En faisant de Kibana un proxy plus transparent pour les données Elasticsearch, nous optimisons les performances dans notre domaine d'expertise. À suivre !</p><p>(En 2025, Thomas Neirynk a donné un <a href="https://www.elastic.co/search-labs/blog/kibana-dashboard-rendering-time">excellent aperçu</a> des méthodes et des motivations derrière l'amélioration des performances du tableau de bord Kibana. Ceci est une mise à jour de cette 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>