Browser monitoring é uma funcionalidade em beta do AppSignal Labs. O
pacote
@appsignal/browser é publicado sob a tag beta no npm, e sua
configuração e API ainda podem mudar entre releases beta. Compartilhe seu
feedback na nossa comunidade no Discord.init() roda, o AppSignal para Browser relata erros não capturados por conta própria. Não há nada para envolver nem handler para registrar.
Ele escuta duas coisas no window principal da página:
- Erros que seu código lança e nunca captura, pelo evento
error. - Promises que falham sem nada para tratar a falha, pelo evento
unhandledrejection.
O que é relatado
- Nome e mensagem do erro. O tipo de erro, por exemplo
TypeError, e a mensagem que veio com ele. - Backtrace. O stack trace, uma linha por frame. Vazio se o navegador não fornecer nenhum.
- Action. A rota em que o erro aconteceu. Os erros são agrupados por ela.
- Revisão. A
appVersionque você definiu. Usada para filtrar por versão e para encontrar os sourcemaps corretos. - Tags. Tudo que você definiu com
setTags(). - Nome do serviço. O
serviceNameque você definiu, ouBrowser. Ele identifica o front-end entre os serviços de um trace. - Breadcrumbs. Até 25 breadcrumbs recentes que ajudam a explicar o erro.
- URL e user agent. A página em que o erro aconteceu, com os parâmetros de query removidos conforme a sua allowlist, e o user agent do navegador.
Error. O SDK transforma esse valor em uma mensagem de erro quando consegue.
Os erros são relatados no namespace browser (veja namespaces), o que os mantém separados dos seus erros de back-end e das configurações de notificação deles.
Como os erros são agrupados
Os erros se agrupam por action. Esse é o template definido comsetRouteTemplate(), ou o caminho bruto da página quando nenhum foi definido.
Declarar um template é o que impede uma rota cheia de IDs de se fragmentar em um grupo de erros por ID:
Relatando erros manualmente
UsecaptureError() para erros que você mesmo captura. Ele passa pelo mesmo pipeline de um erro não capturado, incluindo breadcrumbs, tags, amostragem e beforeError:
setTags() para valores que devem aparecer em erros subsequentes.
Aplicações React podem capturar erros de renderização com o error boundary em vez de envolver componentes manualmente.
Requisições com falha
ComtracePropagationTargets definido, uma requisição para a sua API que responde com 5xx ou expira é relatada por conta própria. Ela chega como um HTTPError ou um TimeoutError, carregando o ID de trace que a requisição enviou para o back-end. Se o back-end continuou o trace, seus spans aparecem abaixo do erro de navegador na linha do tempo do trace. Leia mais em distributed tracing para Browser.
Tags
Tags são pares de chave e valor em texto anexados a todo erro relatado a partir daquele ponto. É por elas que você filtra e busca erros no AppSignal:country_code, country e browser produzem distribuições de atributos. Qualquer tag pode ser transformada em link com templates de link.
Limites de taxa
Uma página presa em um loop pode lançar milhares de erros por segundo. Dois limites evitam que o SDK se torne o problema que deveria relatar:- O mesmo erro repetidas vezes. A mensagem e a primeira linha de stack trace determinam se dois erros são repetições. O AppSignal o relata no máximo cinco vezes a cada 10 segundos.
- Erros demais de uma vez. No total, não são relatados mais de 100 erros a cada 10 segundos. Isso pega uma página que lança muitos erros diferentes, o que o primeiro limite deixaria passar.
errors.sampleRate.
Sourcemaps
Um bundle minificado produz stack traces cheios de nomes de uma letra e números de linha enormes. Os sourcemaps os transformam de volta nos nomes de arquivo, funções e números de linha que você escreveu. Cada erro enviaappVersion como sua revisão. O AppSignal usa isso para encontrar os sourcemaps daquele build. Sem ela, os stack traces permanecem minificados.
Se seus sourcemaps são públicos, ao lado dos seus arquivos JavaScript, não há mais nada a fazer. Se você preferir não publicá-los, envie-os para o endpoint de API de sourcemaps usando a mesma revisão.
Erros que não são relatados
Erros de scripts em outro domínio. Quando um script carregado de outro lugar lança um erro, o navegador se recusa a compartilhar os detalhes. Tudo que sua página vê é a mensagemScript error., sem stack trace e sem número de linha. O SDK descarta esses erros opacos porque não contêm nenhum detalhe útil. Para capturar erros de scripts de um CDN, envie um cabeçalho Access-Control-Allow-Origin a partir do CDN. Adicione crossorigin="anonymous" às tags de script.
Erros dentro de iframes. O SDK escuta apenas o window em que roda. Para monitorar um iframe que você controla, inicialize o SDK também dentro daquele frame. A página pai não consegue capturar erros de um iframe de origem cruzada.
Erros antes de init(). Tudo que é lançado antes de init() rodar é perdido. Importe sua configuração do AppSignal primeiro, antes de outras bibliotecas e do seu próprio código.
Filtrando ruído do navegador
Alguns erros vêm do navegador ou de suas extensões, não do seu código, e você não consegue corrigi-los. A opção Error filtering do fluxo de instalação os descarta combeforeError:
ResizeObserver loop: um aviso do navegador de que notificações de redimensionamento foram adiadas para o próximo frame. Geralmente inofensivo.Script error.: um erro de um script em outro domínio, sem detalhes para depurar. O SDK já descarta os que chegam sem stack trace.-extension://: um erro de uma extensão de navegador, como um scriptchrome-extension://oumoz-extension://.webkit-masked-url: o endereço que o Safari exibe no lugar do script de uma extensão.
IGNORED para qualquer outro erro que você tenha decidido ignorar. Um erro descartado não deixa breadcrumb e não conta como repetição. Ele conta para o limite de 100 erros a cada 10 segundos. Leia mais em filtrando erros e breadcrumbs.