Ao rastrear erros de JavaScript (JS) no front-end, utiliza-se um stack trace para localizar a falha. O Real User Monitoring (RUM) coleta esses stack traces de erros JS e os analisa com base nos arquivos de source map enviados. Como o RUM gerencia múltiplas versões de arquivos de source map, muitas vezes é difícil associar com precisão um arquivo JS presente no stack trace de uma exceção ao seu arquivo de source map correspondente apenas pelo nome. O plugin de ferramenta de build do RUM resolve esse problema injetando um UUID nos arquivos JS e de source map gerados, estabelecendo um vínculo bidirecional. Isso permite que o RUM analise e exiba automaticamente o stack trace na página de detalhes da exceção, eliminando a necessidade de selecionar manualmente um arquivo de source map.
Pré-requisitos
Certifique-se de que sua aplicação web esteja integrada ao Real User Monitoring (RUM). Para obter instruções, consulte Integrar uma aplicação web ou H5.
Ferramentas de build suportadas
O recurso de análise automática de source map do RUM suporta atualmente as seguintes ferramentas de build:
Webpack
Vite
Utilize o plugin de ferramenta de build do RUM
Webpack
-
Instale o pacote npm do plugin de ferramenta de build do RUM para Webpack.
npm install @arms/rum-webpack-plugin --save -
No arquivo de configuração do Webpack, aplique o plugin de ferramenta de build do RUM e defina a propriedade devtool para gerar um arquivo de source map.
import { RumWebpackPlugin } from '@arms/rum-webpack-plugin' const config = { plugins: [new RumWebpackPlugin()], devtool: 'source-map', }; export default config
Vite
-
Instale o pacote npm do plugin de ferramenta de build do RUM para Vite.
npm install @arms/rum-vite-plugin --save -
No arquivo de configuração do Vite, aplique o plugin de ferramenta de build do RUM e defina a propriedade build.sourcemap para gerar um arquivo de source map.
import { rumVitePlugin } from '@arms/rum-vite-plugin' export default defineConfig({ plugins: [rumVitePlugin()], build: { sourcemap: true, }, });
Envio automático de arquivos de source map
Para simplificar seu fluxo de trabalho, configure o plugin de ferramenta de build do RUM para enviar automaticamente os arquivos de source map ao armazenamento OSS do RUM após a injeção dos UUIDs.
A configuração de envio automático requer um AccessKey ID e um AccessKey Secret. Um AccessKey é uma credencial para acessar as APIs da Alibaba Cloud. Por questões de segurança, utilize um usuário RAM para esta operação e mantenha suas credenciais de AccessKey protegidas.
Etapa 1: Ativar o switch de envio em lote
Para obter permissões de gravação no OSS do RUM, faça login no ARMS console como um usuário RAM. Para sua aplicação RUM, acesse a página Application Settings e ative o switch de envio em lote para o OSS.
Esse switch está localizado na aba File Management.
Etapa 2: Obter o AccessKey ID e o Secret
Forneça o AccessKey ID e o AccessKey Secret do usuário RAM ao plugin de ferramenta de build do RUM.
Ao criar o AccessKey, selecione Use in local development environment como caso de uso. Para instruções detalhadas, consulte Criar um AccessKey para um usuário RAM.
Após selecionar essa opção, o sistema recomenda evitar codificar as informações do AccessKey diretamente no código e, em vez disso, usar variáveis de ambiente para configurar suas credenciais. Marque a caixa de seleção I confirm that I must create an AccessKey e clique em Continue to Create.
Etapa 3: Configurar o plugin
Na configuração do plugin de ferramenta de build do RUM, insira o ID da aplicação RUM, o AccessKey ID, o AccessKey Secret, a versão e a região da sua aplicação. A versão serve para agrupar os arquivos de source map enviados no ARMS console e tem como padrão 1.0.0. A região padrão é cn-hangzhou.
Webpack
Para evitar envios repetidos durante a depuração, os arquivos de source map são enviados automaticamente apenas no modo de produção ao utilizar o Webpack.
import { RumWebpackPlugin } from '@arms/rum-webpack-plugin'
const config = {
plugins: [new RumWebpackPlugin({
pid: '', // RUM application ID
accessKeyId: '',
accessKeySecret: '',
version: '',
region: ''
})],
devtool: 'source-map',
};
export default config
Vite
import { rumVitePlugin } from '@arms/rum-vite-plugin'
export default defineConfig({
plugins: [rumVitePlugin({
pid: '', // RUM application ID
accessKeyId: '',
accessKeySecret: '',
version: '',
region: ''
})],
build: {
sourcemap: true,
},
});
Garanta que o valor pid corresponda ao PID da aplicação da plataforma legada do ARMS. Se você configurar o plugin com um novo PID gerado pela plataforma Cloud Monitor 2.0 (baseado em service_id), a solicitação de envio do source map pode parecer bem-sucedida, mas a lista de arquivos no ARMS console pode ficar vazia ou falhar na associação com a exceção analisada. Para resolver esse problema, substitua o valor pid na configuração do plugin pelo PID da aplicação da plataforma legada do ARMS.
Envio manual de arquivos de source map
Etapa 1: Compilar o projeto
Utilize o comando de build fornecido pela sua ferramenta de build para compilar o projeto. Em seguida, o plugin de ferramenta de build do RUM injeta um UUID nos arquivos JS e em seus respectivos arquivos de source map.
A presença do campo debugId no arquivo de source map indica que o UUID foi injetado com sucesso.
{
"version": 3,
"file": "index.js",
"mappings": "AAAAA,QAAQC,IAAI",
"sources": [
"webpack://examples/./src/index.js"
],
"sourcesContent": [
"console.log('Hello World!');\n"
],
"names": [
"console",
"log"
],
"sourceRoot": "",
"debugId": "e4f083d6-b8d8-4cae-a0ea-16f2e83a6be1"
}
Após abrir a página em um navegador, confirme a injeção do UUID no arquivo JS verificando a propriedade _armsRumDebugIds no objeto global window.
> window._armsRumDebugIds
< {"Error\n at file:///Users/yy/Projects/rum-bundler-plugin/packages/examples/dist/webpack5/index.js:1:128": "e4f083d6-b8d8-4cae-a0ea-16f2e83a6be1"}
Etapa 2: Enviar manualmente os arquivos de source map
Caso não utilize o recurso de envio automático, envie os arquivos manualmente pelo ARMS console. Na página Application Settings, dentro da seção File Management, faça o upload dos arquivos de source map que já possuem o UUID injetado. Se o UUID correspondente aparecer na coluna UUID, isso indica que o arquivo foi analisado com sucesso.
Durante o envio, insira uma version (por exemplo, 1.0.0) e clique em Batch Upload.
Etapa 3: Verificar a análise automática
Na página Exception Statistics, acesse a página de detalhes de uma exceção específica. Cada linha do stack trace exibe o UUID injetado pelo plugin de ferramenta de build do RUM. Um hífen (-) indica falha no reporte do UUID.
Se um arquivo de source map com UUID correspondente tiver sido enviado, o RUM analisa automaticamente a primeira linha do stack trace para mostrar a localização do erro no arquivo de origem. Clique em qualquer outra linha para expandir e visualizar o resultado da análise.
Após a análise do SourceMap, o arquivo de origem estará localizado em webpack://demo/index.tsx. O erro encontra-se na linha 14: throw new Error('test error'). O código-fonte analisado é apresentado abaixo.
import React from 'react';
import Page from '@alicloud/console-components-page';
import TestCode from './TestCode';
const TestPage = () => {
return (
<Page>
<Page.Header title="Test" />
<Page.Content>
<IncidentPlanTable />
<button
onClick={() => {
throw new Error('test error');
}}
>
test
</button>
<Page.Content>
</Page>
);
};
Notas de lançamento do plugin de ferramenta de build do RUM
|
Versão |
Descrição |
|
|
0.0.8 |
Adicionado recurso para envio automático de arquivos de source map após a compilação do projeto. |
|
|
0.0.5 |
Incluído suporte para as ferramentas de build Webpack e Vite. Injeta um UUID para criar um vínculo bidirecional entre arquivos JS e seus respectivos arquivos de source map. |
|
Perguntas frequentes
O que fazer se os arquivos de source map forem enviados com sucesso, mas a página de detalhes da exceção não exibir o código-fonte?
Isso ocorre quando o arquivo de source map enviado não contém o conteúdo do código-fonte (campo sourcesContent). Para resolver:
Verifique a configuração da sua ferramenta de build de front-end para garantir que a inclusão do código-fonte esteja ativada durante a geração dos arquivos de source map.
Utilize uma ferramenta de terceiros, como decodeSourceMap, para validar se o arquivo de source map gerado localmente contém o campo
sourcesContent.Confirme se o arquivo de source map armazenado no OSS está formatado corretamente e acessível.
O ARMS RUM suporta buckets OSS personalizados para envio de arquivos de source map?
Não. O ARMS RUM não oferece suporte a buckets OSS personalizados. O serviço provisiona buckets OSS dedicados para cada região . Basta ativar o switch OSS batch upload na aba File Management da página Application Settings para utilizar diretamente o bucket provisionado. Não é possível especificar um bucket diferente.
O que fazer se arquivos de source map enviados via ossutil ou outras ferramentas não aparecerem no ARMS console?
O envio de arquivos usando caminhos baseados em pastas ou estruturas de diretórios não padronizadas pode impedir a exibição correta da lista de arquivos no ARMS console. Recomendamos o uso do plugin de ferramenta de build do RUM para Webpack ou Vite, pois ele gerencia o envio de source maps automaticamente. Caso precise enviar arquivos manualmente, siga as etapas descritas na seção Envio manual de arquivos de source map deste tópico: na página Application Settings, dentro da seção File Management, utilize o recurso Batch Upload e informe o número correto da versão.
Como configurar o endpoint se minha aplicação estiver implantada em uma região diferente da região do serviço ARMS RUM?
O armazenamento de source map do ARMS RUM está disponível apenas nas seguintes regiões: China (Hangzhou), Singapura (Sudeste da Ásia 1) e Vale do Silício (Oeste dos EUA 1). Se sua aplicação estiver em outra região, configure o endpoint na sua aplicação cliente ou na configuração do plugin para apontar para uma dessas três regiões suportadas, permitindo a conexão com o bucket OSS provisionado. Não é possível usar um endpoint de região local para o envio de source maps.