<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Eduardo Mitkus</title>
    <description>The latest articles on DEV Community by Eduardo Mitkus (@eduardomitkus_90).</description>
    <link>https://dev.to/eduardomitkus_90</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F484111%2Fd9eb25a7-86da-487e-ab0b-fbd77b4c05de.jpeg</url>
      <title>DEV Community: Eduardo Mitkus</title>
      <link>https://dev.to/eduardomitkus_90</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/eduardomitkus_90"/>
    <language>en</language>
    <item>
      <title>Monitoramento de aplicações frontend com RUM.js e Kibana</title>
      <dc:creator>Eduardo Mitkus</dc:creator>
      <pubDate>Tue, 21 Oct 2025 04:39:24 +0000</pubDate>
      <link>https://dev.to/umovme/monitoramento-de-aplicacoes-frontend-com-rumjs-e-kibana-295j</link>
      <guid>https://dev.to/umovme/monitoramento-de-aplicacoes-frontend-com-rumjs-e-kibana-295j</guid>
      <description>&lt;p&gt;Monitorar aplicações de página única (SPAs) é um desafio comum no desenvolvimento frontend moderno.&lt;br&gt;
Em ambientes de produção, é difícil compreender de forma precisa como os usuários estão realmente experimentando a aplicação, especialmente porque as ferramentas de auditoria locais, como Lighthouse ou DevTools, refletem apenas cenários simulados.&lt;/p&gt;

&lt;p&gt;Para obter uma visão real da comportamento do usuário final, é possível utilizar uma combinação de ferramentas voltadas para observabilidade no frontend: RUM.js, Elastic APM e Kibana.&lt;br&gt;
Estes juntos tornam possivel coletar, processar e visualizar métricas diretamente do Browser.&lt;/p&gt;
&lt;h2&gt;
  
  
  O que é o RUM (Real User Monitoring)
&lt;/h2&gt;

&lt;p&gt;RUM é a coleta de métricas reais de uso diretamente do navegador do usuário e mede o que acontece em produção: dispositivos, redes, rotas e interações reais.&lt;/p&gt;

&lt;p&gt;Quando o RUM está ativo e integrado ao APM, o Kibana mostra diferentes tipos de transações, que representam o que está acontecendo no app.&lt;br&gt;
Principais tipos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;page-load:&lt;/strong&gt;  mede o tempo de carregamento inicial da página ou rota. Ideal para avaliar a experiência do primeiro acesso.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;http-request:&lt;/strong&gt; monitora chamadas de rede (APIs, fetch, Axios, etc.), exibindo latência, status e falhas.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;user-interaction:&lt;/strong&gt; representa ações do usuário, como cliques ou interações que disparam renderizações parciais.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;authentication:&lt;/strong&gt; rastreia o processo de login e autenticação, útil para detectar lentidão em fluxos críticos.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Além desses, o Kibana também pode exibir outras categorias, como route-change, resource e error, dependendo do comportamento da aplicação.&lt;/p&gt;
&lt;h2&gt;
  
  
  APM
&lt;/h2&gt;

&lt;p&gt;O Elastic APM é quem recebe e organiza os dados enviados pelo RUM.&lt;br&gt;
Ele deixa tudo no formato certo pra o Kibana conseguir montar gráficos, relatórios e filtros.&lt;br&gt;
Em resumo, ele faz a ponte entre o navegador e o banco de dados.&lt;/p&gt;
&lt;h2&gt;
  
  
  Kibana
&lt;/h2&gt;

&lt;p&gt;O Kibana é a parte visual onde é possível ver:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Transações:&lt;/strong&gt; cada tipo de evento capturado&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Comparações:&lt;/strong&gt; dá pra comparar períodos (ex.: “hoje vs ontem”) e ver se a performance melhorou ou piorou.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Filtros:&lt;/strong&gt; é possível filtrar por ambiente, versão do app, tipo de dispositivo ou navegador.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Criação e Configuração de Dashboards e Views.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Envio dos dados pro Elastic APM
&lt;/h2&gt;

&lt;p&gt;O RUM coleta os dados no navegador e envia pro APM, que armazena e organiza tudo.&lt;br&gt;
O fluxo é simples: &lt;code&gt;Navegador (RUM.js) → APM Server → Elasticsearch → Kibana&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// monitoring/rum.js
import { init as initRUM } from '@elastic/apm-rum'

export const startRUM = () =&amp;gt; {
  const apm = initRUM({
    serviceName: "my-app",
    serverUrl: "&amp;lt;seu_apm_server_url&amp;gt;",
    environment: "development",
  })

  apm.setInitialPageLoadName('App Loaded')
  return apm
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Visualização do RUM no Kibana
&lt;/h2&gt;

&lt;p&gt;Após configurar o RUM, as métricas começam a aparecer no Kibana, dentro de APM → Services.&lt;br&gt;
É possível ver as transações do frontend, como page-load, http-request e longtask, e acompanhar o tempo de execução de cada etapa do carregamento.&lt;/p&gt;

&lt;p&gt;A imagem abaixo mostra exatamente quanto tempo cada parte da aplicação levou, desde o carregamento inicial até requisições de rede, scripts e interações do usuário.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkuvw5cc8kmhxbi96431i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkuvw5cc8kmhxbi96431i.png" alt=" " width="800" height="635"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Captura de casos reais
&lt;/h2&gt;

&lt;p&gt;Além das métricas automáticas, é possível enriquecer os dados enviados pro APM adicionando labels personalizadas.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;try {
  await fetch('/api/login')
} catch (err) {
  apm.captureError(err)
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Labels permitem acompanhar casos reais com mais precisão.&lt;br&gt;
Por exemplo, entender se uma lentidão ocorre em um módulo específico ou para um tipo de usuário:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apm.addLabels({
  module: 'checkout',
  user_plan: 'premium'
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Considerações finais
&lt;/h2&gt;

&lt;p&gt;Monitorar o frontend com RUM.js, Elastic APM e Kibana é uma forma simples e eficaz de entender o que realmente acontece em produção.&lt;br&gt;
Com poucos ajustes, é possível sair de uma visão genérica de “está lento” para identificar qual rota, qual usuário e em que contexto o problema aparece.&lt;/p&gt;

&lt;p&gt;Essas ferramentas não servem só pra medir performance, mas pra enxergar a experiência do usuário como ela é de verdade.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;_Foto do Artigo: [Elastic Observability Docs](https://www.elastic.co/pt/blog/performing-real-user-monitoring-rum-with-elastic-apm)_&lt;/code&gt;&lt;/p&gt;

</description>
      <category>vue</category>
      <category>frontend</category>
      <category>rumjs</category>
      <category>kibana</category>
    </item>
  </channel>
</rss>
