Frontend Instrumentation – JavaScript
Guia completo para instrumentar aplicações front-end com Faro SDK, enviando dados para o collector-fe
da Elven.
Visão Geral
Este guia tem como objetivo instruir a instrumentação de aplicações front-end com o Faro SDK da Grafana, utilizando o collector-fe
, um componente exclusivo da Elven Observability.
Você poderá rastrear:
Sessões e navegação dos usuários.
Eventos personalizados.
Logs estruturados.
Medidas de performance (como tempo de carregamento).
Instalação
Usando NPM:
npm install @grafana/faro-web-sdk
npm install @grafana/faro-web-tracing
Usando Yarn:
yarn add @grafana/faro-web-sdk
yarn add @grafana/faro-web-tracing
Se estiver usando React com React Router:
yarn add @grafana/faro-react
Uso básico
Boa prática: crie um arquivo separado como faro.ts para configurar o SDK e importe no entry point (index.tsx ou App.tsx).
// faro.ts
import { initializeFaro, getWebInstrumentations } from '@grafana/faro-web-sdk';
import { TracingInstrumentation } from '@grafana/faro-web-tracing';
initializeFaro({
url: 'https://seu_collector-fe.com/collect/<TENANT>/<TOKEN>',
app: {
name: 'my-app', # Nome da sua aplicação
version: '1.0.0', # Versão da sua aplicação
environment: 'production', # Ambiente da sua aplicação
},
consoleInstrumentation: {
disabledLevels: [],
},
sessionTracking: {
samplingRate: 1,
persistent: true,
},
instrumentations: [
...getWebInstrumentations(),
new TracingInstrumentation(),
],
});
Configuração com React Router (opcional)
import {
initializeFaro,
createReactRouterV6DataOptions,
ReactIntegration,
getWebInstrumentations,
} from '@grafana/faro-react';
import { TracingInstrumentation } from '@grafana/faro-web-tracing';
app: {
name: 'my-app', # Nome da sua aplicação
version: '1.0.0', # Versão da sua aplicação
environment: 'production', # Ambiente da sua aplicação
},
sessionTracking: {
samplingRate: 1,
persistent: true,
},
instrumentations: [
...getWebInstrumentations(),
new TracingInstrumentation(),
new ReactIntegration({
router: createReactRouterV6DataOptions({
matchRoutes,
}),
}),
],
});
Sincronização de usuário logado
export const FaroUserSync = () => {
const { user } = useAuth();
useEffect(() => {
if (user) {
faro.api.setUser({
id: user.uid,
username: user.displayName ?? 'no-logged',
email: user.email ?? 'no-logged',
});
}
}, [user]);
return null;
};
Exemplo com Next.js
Ao usar o Faro SDK em aplicações Next.js, é necessário garantir que a instrumentação aconteça somente no lado do cliente, pois o window
não está disponível durante a renderização no servidor.
A forma ideal de configurar é dentro do arquivo especial do Next, o _app.tsx
.
Exemplo de uso em pages/_app.tsx
pages/_app.tsx
// pages/_app.tsx
import type { AppProps } from 'next/app';
import { useEffect } from 'react';
import { initializeFaro, getWebInstrumentations } from '@grafana/faro-web-sdk';
import { TracingInstrumentation } from '@grafana/faro-web-tracing';
function MyApp({ Component, pageProps }: AppProps) {
useEffect(() => {
initializeFaro({
url: process.env.NEXT_PUBLIC_FARO_URL!,
app: {
name: 'next-app',
version: '1.0.0',
environment: process.env.NODE_ENV,
},
sessionTracking: {
samplingRate: 1,
persistent: true,
},
instrumentations: [
...getWebInstrumentations(),
new TracingInstrumentation(),
],
});
}, []);
return <Component {...pageProps} />;
}
export default MyApp;
Dica: Utilize variáveis como NEXT_PUBLIC_FARO_URL
no .env.local
para manter o token e tenant fora do código-fonte.
Eventos, Logs e Medidas personalizadas
Eventos personalizados:
faro.api.pushEvent('click_cta', {
label: 'Começar Agora',
category: 'CTA',
page: '/home',
});
Logs personalizados:
faro.api.pushLog(['debug'], 'Usuário clicou no botão de cadastro', {
location: '/signup',
component: 'SignupCTA',
});
Medidas personalizadas:
faro.api.pushMeasurement('search_time', {
value: 273,
unit: 'ms',
attributes: {
page: '/search',
query: 'observability',
},
});
Boas práticas
Armazene
FARO_URL
no.env
(REACT_APP_FARO_URL
).Nunca envie dados sensíveis nos eventos ou logs.
Prefira importar o
faro.ts
no início da aplicação.Utilize
samplingRate
de acordo com o volume do seu app (ex: 0.1 em produção).
Troubleshooting
Eventos não chegam
Token inválido ou expirado
Verifique o JWT
Nada aparece no dashboard
URL incorreta ou CORS bloqueado
Verifique a URL e CORS do collector-fe
Sessão não persiste
Cookies bloqueados ou persistent: false
Ative persistent: true
Logs duplicados
initializeFaro
sendo chamado múltiplas vezes
Mova para arquivo único e importe uma vez
Autenticação e URL do coletor
A URL de envio segue o formato:
https://seu_collector-fe.com/collect/<tenant>/<token>
Exemplo real:
https://seu_collector-fe.com/collect/elven/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Consulte: collector-fe – Guia de Instalação
Testando sua instrumentação
Acesse o app com o navegador.
Verifique no DevTools se a chamada para
collector-fe
retorna 2xx.Acesse o dashboard Grafana e filtre pelos eventos do seu tenant.
Feito com amor pela Elven Observability
Se tiver dúvidas ou sugestões, fale com a gente: elven.works.
Last updated
Was this helpful?