Os dashboards do Kibana e o Discover agora carregam até 25% mais rápido graças à sondagem contínua. Em vez de ficar em espera entre verificações periódicas, o Kibana agora mantém as conexões HTTP abertas e entrega os resultados das consultas do Elasticsearch no momento em que estão prontos. Em HTTP/2+ (o padrão do Kibana desde a versão 9.0), isso ocorre automaticamente, sem necessidade de configuração. Em HTTP/1, o Kibana recorre à sondagem tradicional para evitar o esgotamento do pool de conexão.
Como o Kibana busca dados ao carregar um dashboard
Quando um dashboard é aberto, a maioria dos painéis (internamente, chamamos esses incorporáveis) inicia uma ou mais consultas no Elasticsearch. Mas, em vez da simples chamada e resposta de uma busca síncrona (sync), usamos o poder da busca assíncrona (docs async).
Com a busca assíncrona, os resultados das consultas ficam disponíveis no Elasticsearch fora de qualquer requisição HTTP específica. Isso é importante porque
- torna o carregamento de dados resiliente à turbulência da rede
- potencializa nosso recurso de busca em segundo plano, o que permite que os usuários trabalhem em outras coisas no Kibana enquanto esperam por um dashboard de longa duração ou por uma sessão do Discover
Após a consulta inicial ser enviada, o Kibana monitora a busca para detectar quando ela está concluída e recuperar o conjunto de resultados.
Como a sondagem tradicional afeta os tempos de carregamento do dashboard do Kibana
Na sondagem tradicional, o Kibana envia uma consulta, fecha a conexão inicial e então verifica periodicamente a conclusão do Elasticsearch.

Estratégia tradicional de sondagem
Damos ao Elasticsearch um curto período de tempo após o envio da consulta para simplesmente completar a busca e devolver os resultados. Se a busca for concluída tão rapidamente, isso se resume a uma simples chamada e resposta. Mas para buscas mais longas, a conexão inicial é fechada e o Kibana começa a verificar periodicamente a busca para conclusão. Isso é chamado de sondagem.
Desvantagens de desempenho da sondagem tradicional
Observando a figura acima, talvez você já possa ver a desvantagem de desempenho dessa abordagem: é mais provável que a busca termine durante um dos intervalos de espera do Kibana, levando à perda de tempo.

O lado sombrio das pesquisas de opinião tradicionais
No pior cenário (quando uma busca é concluída no início de um período de espera), toda a duração do intervalo de sondagem será desperdiçada.
O impacto de uma estratégia de backoff
É prática padrão durante a sondagem aplicar uma estratégia de backoff. Isso significa que, quanto maior a duração da busca, menos frequentemente a consultamos.

Cronograma de backoff do intervalo de sondagem
No entanto, isso também significa que o tempo potencial perdido varia proporcionalmente com a duração da busca.
Como intervalos de sondagem criam padrões de latência em forma de serra
Ao combinar todos esses fatores, o tempo perdido passa a seguir um padrão em dente de serra escalonado.

Tempo perdido pela duração da consulta
Aqui, os picos são os piores cenários possíveis e os vales são os melhores cenários. Isso ilustra que a sondagem tradicional nos custa entre nada e a duração total do intervalo de sondagem, dependendo da duração da busca (e das condições da rede).
Sondagem contínuas: como o Kibana elimina o tempo de espera
O problema com a sondagem tradicional é uma falta fundamental de coordenação entre Kibana e Elasticsearch. Idealmente, o Kibana sabe imediatamente quando os resultados estão disponíveis. Então, e se invertêssemos o padrão de sondagem para que quase todo o tempo seja gasto checando o Elasticsearch e nenhum tempo seja gasto em espera?

Sondagem contínua: uma solução para o tempo perdido
Com esta combinação de sondagem longa e sem mais períodos de espera, os resultados são entregues assim que estiverem prontos.
Degradação HTTP/1
A teoria é sólida. Então, por que essa implantação do Kibana parece tão degradada quando ativamos a sondagem contínua?

A sondagem contínua causa uma degradação do desempenho em clientes conectados via HTTP/1
A chave é que essa implantação está sendo executada em HTTP/1. No HTTP/1, as requisições HTTP são mapeadas 1:1 para conexões TCP. Portanto, várias solicitações de sondagem de longa duração estão monopolizando o pool de conexões finito do navegador, fazendo com que outras solicitações sejam colocadas na fila.
No HTTP/2+, por outro lado, as solicitações de rede podem compartilhar conexões TCP via multiplexação, então não enfrentamos esse problema.

Diferença no mapeamento HTTP-TCP entre HTTP/1 e HTTP/2+
Portanto, no HTTP/2+, a sondagem contínua é uma virtude, mas no HTTP/1 ela se torna um vício.
| HTTP/1 | HTTP/2+ | |
|---|---|---|
| Conexões TCP | Uma por solicitação HTTP | Multiplexado (muitas solicitações compartilham conexões) |
| Comportamento de sondagem contínua | Degrada o desempenho (esgotamento do pool de conexão) | Benefício total (resultados entregues imediatamente) |
Como o Kibana detecta o protocolo HTTP para sondagem ideal
HTTP/2 é o protocolo recomendado e é o padrão do Kibana desde a versão 9.0, então seria uma pena não enviar esse aprimoramento de desempenho. Por outro lado, a experiência HTTP/1 é tão degradada que não é aceitável arriscar isso em implantações no local que ainda não atualizaram seu protocolo. A resposta é clara: precisamos detectar qual protocolo está em uso e aplicar a estratégia de sondagem ideal.
Certamente é possível que o servidor Kibana saiba qual protocolo ele utiliza. Mas há um porém: o fator limitante é o conjunto de conexões do navegador. Isso significa que o que realmente importa é o que o navegador utiliza.
Por causa dos proxies, nem sempre são iguais.

O protocolo pode variar para cada salto de rede
Se basearmos nossa otimização no protocolo do servidor, podemos errar de duas maneiras.
- Aplicar sondagem contínua quando não deveria e isso prejudica a experiência.
- Deixar de aplicar a sondagem contínua quando necessário e perder a otimização.
Felizmente, navegadores modernos oferecem uma forma de detectar o protocolo do último salto de rede de qualquer requisição concluída por meio do uso de um PerformanceObserver. Então, observamos o protocolo da primeira submissão de consulta e otimizamos com base nisso.
Resultados de laboratório: sondagem contínua vs. sondagem tradicional em Kibana
Para validar a sondagem contínua, criamos dashboards com atrasos de consulta variando de 1 a 23 segundos e medimos os tempos de carregamento com e sem a otimização ativada. Em seguida, carregamos os dashboards com e sem sondagem contínua para medir os ganhos (nos divertimos bastante com race-for-the-prize).

Tempos de carregamento do dashboard por duração da consulta
O padrão ecoa nosso diagrama dente de serra original. Para algumas durações de consulta, os ganhos são pequenos, enquanto para outras chegam a vários segundos.
Conclusão
Essa otimização substitui com sucesso a latência inerente à sondagem tradicional por uma estratégia de sondagem contínua mais eficiente. O principal desafio foi implementar essa otimização condicionalmente para evitar a degradação do desempenho em implantações HTTP/1. Resolvemos usando o PerformanceObserver do navegador para detectar de forma confiável o protocolo em uso no salto final da rede.
Testes laboratoriais validam a teoria, mostrando que a sondagem contínua entrega resultados assim que estão disponíveis. Em média, isso leva a uma melhoria significativa na experiência do usuário, tornando o carregamento de dados até 25% mais rápido.
Este trabalho é o passo mais recente em nosso compromisso de reduzir o tempo para obter insights para nossos usuários. Ao tornar o Kibana um proxy mais transparente para os dados do Elasticsearch, ultrapassamos os limites do desempenho dentro da nossa esfera de influência. Mais novidades em breve!
(Em 2025, Thomas Neirynk apresentou uma excelente visão geral dos métodos e da motivação por trás do aprimoramento do desempenho do dashboard do Kibana. Esta é uma atualização sobre essa iniciativa.)
Perguntas frequentes
Como a sondagem contínua melhora o carregamento do dashboard do Kibana?
A velocidade de carregamento do dashboard depende de com que rapidez o Kibana consegue recuperar os resultados das consultas do Elasticsearch. A sondagem tradicional consulta periodicamente se a operação foi concluída, o que pode levar a atrasos na recuperação dos resultados. Com o HTTP/2+, o Kibana ativa automaticamente a sondagem contínua, o que elimina atrasos ao manter as conexões abertas, fornecendo resultados imediatamente quando estiverem prontos.
O que é a sondagem contínua e como ela melhora o desempenho do Kibana?
A sondagem contínua inverte o padrão tradicional ao manter as conexões HTTP abertas enquanto aguarda os resultados das consultas do Elasticsearch, em vez de ficar inativa entre verificações periódicas. Isso elimina o tempo perdido e entrega resultados assim que estão prontos, acelerando dashboards e Discover.
A sondagem contínua funciona em conexões HTTP/1?
Não. A sondagem contínua é aplicada apenas em conexões HTTP/2+, onde a multiplexação evita que solicitações de longa duração bloqueiem outro tráfego. O Kibana detecta automaticamente o protocolo usando a API PerformanceObserver do navegador e aplica sondagem tradicional no HTTP/1 para evitar degradação do desempenho.
Quão mais rápidos são os dashboards do Kibana com sondagem contínua?
Testes laboratoriais mostram que os tempos de carregamento dos dashboards melhoram até 25% dependendo da duração da consulta. Consultas mais longas geram maior economia absoluta de tempo, enquanto consultas muito curtas apresentam diferença mínima.
Como o Kibana detecta se deve usar sondagem contínua ou tradicional?
O Kibana usa a API PerformanceObserver do navegador para detectar o protocolo HTTP da primeira solicitação de consulta. Se o protocolo for HTTP/2 ou HTTP/3 (que suportam multiplexação), a sondagem contínua é habilitada. Se HTTP/1 for detectado, a sondagem tradicional é usada para evitar o esgotamento do pool de conexões.
A sondagem contínua causará problemas com meu proxy de rede ou balanceador de carga?
A sondagem contínua depende da multiplexação HTTP/2+ para evitar o esgotamento do pool de conexões do navegador. Se seu proxy rebaixar as conexões para HTTP/1 entre o proxy e o navegador, o Kibana detectará isso e usará a sondagem tradicional em vez disso. A otimização é aplicada condicionalmente com base no que o navegador realmente suporta.
Estou enfrentando tempos limite. O que devo fazer?
Se seu proxy usa HTTP/2+ mas impõe um tempo limite inferior a 30 segundos, você verá os tempos limite de busca. Para resolver isso, aumente o tempo limite do proxy ou defina data.search.asyncSearch.pollLength no seu kibana.yml para algo menor que o tempo limite.




