Blog

Kibana reduz o tempo de carregamento do dashboard em até 25% — aqui está a estratégia de sondagem por trás disso

Descubra como o Kibana usa sondagem contínua e detecção de HTTP/2 no navegador para reduzir o tempo de carregamento do dashboard em até 25%, com recurso automático ao HTTP/1.

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.

Diagrama mostrando a sondagem tradicional no Kibana. A linha do tempo do Kibana mostra um curto período de conexão aberta após o envio da consulta, seguido por um longo período de espera, uma breve verificação de status e, em seguida, a entrega dos resultados. A linha do tempo do Elasticsearch executa uma consulta que se completa no meio do período de espera do Kibana, ilustrando a lacuna de coordenação que causa perda de tempo.

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.

Diagrama da linha do tempo mostrando o custo de desempenho da sondagem tradicional. A linha do tempo do Kibana mostra um período de abertura de conexão, um longo período de suspensão, uma consulta de status e em seguida os resultados entregues. A linha do tempo do Elasticsearch mostra a consulta sendo concluída no meio do período de suspensão do Kibana, seguida por um segmento vermelho de tempo perdido — a duração desperdiçada antes de o Kibana acordar e recuperar os resultados.

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.

Gráfico de barras horizontais mostrando a programação de recuo do intervalo de sondagem do Kibana conforme a duração da consulta. Consultas com menos de 1,5 segundos usam um intervalo de aproximadamente 0,5 segundos; consultas de 1,5–5 segundos usam 1 segundo; consultas de 5–20 segundos usam aproximadamente 2,5 segundos; consultas com mais de 20 segundos utilizam um intervalo de sondagem de 5 segundos.

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.

Gráfico de linhas mostrando o tempo perdido em segundos versus o tempo de conclusão da consulta em segundos, formando um padrão em dente de serra onde o tempo perdido aumenta e depois cai para zero repetidamente, com picos crescendo de menos de 1 segundo para 5 segundos à medida que a duração da consulta aumenta de 0 para 30 segundos.

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?

Diagrama da linha do tempo mostrando sondagem contínua no Kibana. A linha do tempo do Kibana é totalmente azul: a conexão permanece aberta desde o envio da consulta por meio de duas atualizações de conexão até que os resultados sejam entregues, sem períodos de descanso. A linha do tempo do Elasticsearch mostra a consulta sendo concluída e os resultados entregues imediatamente. A legenda mostra que o tempo perdido foi riscado, indicando que foi eliminado.

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?

Gravação animada da tela de um painel do Kibana carregando o conjunto de dados Sample Logs Data, mostrando vários painéis sendo preenchidos em sequência, incluindo uma série temporal de códigos de resposta, um mapa dos EUA com o total de solicitações, contagem de visitantes únicos, métricas de taxa de erro HTTP e um gráfico de Sankey com dados de sistema operacional e destino das máquinas.

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.

Diagrama comparativo entre HTTP/1 e HTTP/2 para a sondagem contínua do Kibana. O HTTP/1 requer uma conexão TCP por solicitação, esgotando o pool de conexões do navegador em seis conexões. O HTTP/2 multiplexa várias solicitações de sondagem em uma única conexão TCP, evitando o esgotamento do pool e mantendo o desempenho.

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.

Diagrama de arquitetura mostrando três componentes em uma cadeia horizontal: Kibana Server à esquerda, um Proxy opcional no centro e Kibana Client à direita. O salto de servidor para proxy é rotulado com kibana.yml server.protocol, indicando o protocolo conhecido. O salto do proxy para o cliente é rotulado com três pontos de interrogação, indicando que o protocolo nesse salto final é desconhecido e pode ser diferente.

O protocolo pode variar para cada salto de rede

Se basearmos nossa otimização no protocolo do servidor, podemos errar de duas maneiras.

  1. Aplicar sondagem contínua quando não deveria e isso prejudica a experiência.

  2. 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.

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);
  }
});

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).

Gráfico de barras mostrando os resultados dos testes de laboratório para a sondagem contínua do Kibana: tempo economizado em comparação com a sondagem tradicional em durações de consulta de 1 a 23 segundos. A economia de tempo varia entre quase zero e 4,9 segundos, dependendo de onde as consultas são concluídas em relação aos limites do intervalo de sondagem, confirmando o padrão de latência em dente de serra previsto pelo cronograma de espera.

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.

Conteúdo relacionado

Painéis de controle com inteligência artificial: da visão ao Kibana

Jeffrey Rengifo

Ingerir dados geoespaciais no Elasticsearch com o Kibana para uso no ES|QL

Craig Taverner

Melhorando a interatividade do dashboard do Kibana com controles de variáveis

Teresa Alvarez Soler

Descreva, não desenhe: dashboards nativos de IA do Kibana via MCP e ES|QL

Stratoula Kalafateli

Spotify Wrapped parte 2: Análise e visualização de dados

Philipp Kahr

Pronto para criar buscas de última geração?

Uma pesquisa suficientemente avançada não se consegue apenas com o esforço de uma só pessoa. O Elasticsearch é impulsionado por cientistas de dados, especialistas em operações de aprendizado de máquina, engenheiros e muitos outros que são tão apaixonados por buscas quanto você. Vamos nos conectar e trabalhar juntos para construir a experiência de busca mágica que lhe trará os resultados desejados.

Experimente você mesmo(a)