Instrumentar apps Node.js para o Error Reporting

É possível enviar relatórios de erros para o Error Reporting a partir de aplicativos Node.js usando a biblioteca Error Reporting para Node.js (em inglês). Use a biblioteca Error Reporting para Node.js para criar grupos de erros nos seguintes casos:

  • Um bucket de registros que contém suas entradas de registro tem chaves de criptografia gerenciadas pelo cliente (CMEK).
  • O bucket de registros atende a uma das seguintes condições:
    • O bucket de registros é armazenado no mesmo projeto em que as entradas de registro foram originadas.
    • As entradas de registro foram roteadas para um projeto, que as armazenou em um bucket de registros.
  • Você quer informar eventos de erro personalizados.

O Error Reporting é integrado a alguns serviços do Google Cloud, como Cloud Functions, App Engine, Compute Engine e Google Kubernetes Engine. Essa ferramenta exibe os erros registrados no Cloud Logging por aplicativos em execução nesses serviços. Para mais informações, consulte a seção Como executar no Google Cloud nesta página.

Também é possível enviar dados de erros para o Error Reporting usando o Logging. Para mais informações sobre os requisitos de formatação de dados, leia Como formatar mensagens de erro no Logging (em inglês).

Antes de começar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Error Reporting API .

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Error Reporting API .

    Enable the API

  8. Prepare o ambiente para o desenvolvimento do Node.js.

    Acessar o guia de configuração do Node.js

Instale a biblioteca de cliente

Com a biblioteca do Error Reporting para Node.js, você consegue monitorar e visualizar os erros relatados por aplicativos Node.js executados em praticamente qualquer lugar.

  1. Use npm para instalar o pacote:

    npm install --save @google-cloud/error-reporting
  2. Importe a biblioteca e instancie um cliente para começar a relatar erros:

    // Imports the Google Cloud client library
    const {ErrorReporting} = require('@google-cloud/error-reporting');
    
    // Instantiates a client
    const errors = new ErrorReporting();
    
    // Reports a simple error
    errors.report('Something broke!');

Para mais informações sobre a instalação, leia a documentação da biblioteca do Error Reporting para Node.js (em inglês). Além disso, use o rastreador de problemas (em inglês) para informá-los.

Configurar a biblioteca de cliente

É possível personalizar o comportamento da biblioteca do Error Reporting para Node.js. Consulte a configuração da biblioteca para ver uma lista das possíveis opções de configuração. Essas opções podem ser transmitidas no objeto options para o construtor da biblioteca.

Outras integrações

Para mais informações sobre integrações entre a biblioteca do Error Reporting para Node.js e outros frameworks da Web do Node.js, consulte o repositório da biblioteca no GitHub (em inglês).

Executar apps no Google Cloud

Para criar grupos de erros usando projects.events.report, sua conta de serviço precisa ter o papel de gravador do Error Reporting (roles/errorreporting.writer).

Alguns serviços do Google Cloud concedem automaticamente o papel de gravador de relatórios de erros (roles/errorreporting.writer) à conta de serviço adequada. No entanto, você precisa conceder esse papel à conta de serviço adequada para alguns serviços.

Funções do Cloud Run e do Cloud Run

A conta de serviço padrão usada pelo Cloud Run tem as permissões do papel de escritor do Error Reporting (roles/errorreporting.writer).

A biblioteca do Error Reporting para Node.js pode ser usada sem a necessidade de fornecer credenciais explicitamente.

O Cloud Run está configurado para usar o Error Reporting automaticamente. As exceções de JavaScript não processadas serão exibidas no Logging e processadas pelo Error Reporting sem a necessidade de usar a biblioteca dessa ferramenta para Node.js.

Exemplo:

// Imports the Google Cloud client library
const {ErrorReporting} = require('@google-cloud/error-reporting');

// Instantiates a client
const errors = new ErrorReporting({
  projectId: 'your-project-id',
  keyFilename: '/path/to/key.json',
});

// Reports a simple error
errors.report('Something broke!');

Ambiente flexível do App Engine

O App Engine concede o papel de gravador do Error Reporting (roles/errorreporting.writer) à sua conta de serviço padrão automaticamente.

A biblioteca do Error Reporting para Node.js pode ser usada sem a necessidade de fornecer credenciais explicitamente.

O Error Reporting é ativado automaticamente para aplicativos do ambiente flexível do App Engine. Nenhuma outra configuração é necessária.

Google Kubernetes Engine

Para usar o Error Reporting com o Google Kubernetes Engine, faça o seguinte:

  1. Verifique se a conta de serviço a ser usada pelo contêiner recebeu o papel de gravador do Error Reporting (roles/errorreporting.writer).

    É possível usar a conta de serviço padrão do Compute Engine ou uma conta de serviço personalizada.

    Para saber mais sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

  2. Crie o cluster e conceda a ele o escopo de acesso cloud-platform.

    Por exemplo, o comando de criação a seguir especifica o escopo de acesso cloud-platform e uma conta de serviço:

    gcloud container clusters create CLUSTER_NAME --service-account  SERVICE_ACCT_NAME --scopes=cloud-platform
    

Compute Engine

Para usar o Error Reporting com instâncias de VM do Compute Engine, faça o seguinte:

  1. Verifique se a conta de serviço usada pela instância da VM recebeu o papel de Gravador do Error Reporting (roles/errorreporting.writer).

    É possível usar a conta de serviço padrão do Compute Engine ou uma conta de serviço personalizada.

    Para saber mais sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

  2. No Console do Google Cloud, acesse a página Instâncias de VM.

    Acessar Instâncias de VM

    Se você usar a barra de pesquisa para encontrar a página, selecione o resultado com o subtítulo Compute Engine.

  3. Selecione a instância de VM que vai receber o escopo de acesso cloud-platform.

  4. Clique em Parar e em Editar.

  5. Na seção Identidade e acesso à API, selecione uma conta de serviço que tenha o papel de Gravador do Error Reporting (roles/errorreporting.writer).

  6. Na seção Escopos de acesso, selecione Permitir acesso completo a todas as APIs do Cloud e salve as alterações.

  7. Clique em Iniciar / retomar.

Exemplo

É possível relatar um erro, manualmente, chamando o método report, conforme visto no exemplo a seguir:

// Imports the Google Cloud client library
const {ErrorReporting} = require('@google-cloud/error-reporting');

// Instantiates a client
const errors = new ErrorReporting();

// Use the error message builder to customize all fields ...
const errorEvent = errors.event();

// Add error information
errorEvent.setMessage('My error message');
errorEvent.setUser('root@nexus');

// Report the error event
errors.report(errorEvent, () => {
  console.log('Done reporting error event!');
});

// Report an Error object
errors.report(new Error('My error message'), () => {
  console.log('Done reporting Error object!');
});

// Report an error by provided just a string
errors.report('My error message', () => {
  console.log('Done reporting error string!');
});

Como relatar erros com o Express.js

A biblioteca do Error Reporting para Node.js pode integrar o Error Reporting aos frameworks da Web do Node.js mais conhecidos, como o Express.js:

const express = require('express');

// Imports the Google Cloud client library
const {ErrorReporting} = require('@google-cloud/error-reporting');

// Instantiates a client
const errors = new ErrorReporting();

const app = express();

app.get('/error', (req, res, next) => {
  res.send('Something broke!');
  next(new Error('Custom error message'));
});

app.get('/exception', () => {
  JSON.parse('{"malformedJson": true');
});

// Note that express error handling middleware should be attached after all
// the other routes and use() calls. See the Express.js docs.
app.use(errors.express);

const PORT = process.env.PORT || 8080;
app.listen(PORT, () => {
  console.log(`App listening on port ${PORT}`);
  console.log('Press Ctrl+C to quit.');
});

Executar apps em um ambiente de desenvolvimento local

Para usar a biblioteca Error Reporting para Node.js em um ambiente de desenvolvimento local, como executar a biblioteca na sua própria estação de trabalho, forneça à biblioteca Error Reporting para Node.js as credenciais padrão do aplicativo local. Para mais informações, consulte Autenticar para a API Error Reporting.

Para usar os exemplos Node.js desta página em um ambiente de desenvolvimento local, instale e inicialize o gcloud CLI e e configure o Application Default Credentials com suas credenciais de usuário.

  1. Install the Google Cloud CLI.
  2. To initialize the gcloud CLI, run the following command:

    gcloud init
  3. If you're using a local shell, then create local authentication credentials for your user account:

    gcloud auth application-default login

    You don't need to do this if you're using Cloud Shell.

Confira mais informações em Set up authentication for a local development environment.

O projects.events.report método também aceita chaves de API. Se você quiser usar chaves de API na autenticação, não será necessário configurar um arquivo local do Application Default Credentials. Confira mais informações em Crie uma chave de API na documentação de autenticação do Google Cloud

Exemplo:

// Imports the Google Cloud client library
const {ErrorReporting} = require('@google-cloud/error-reporting');

// Instantiates a client
const errors = new ErrorReporting({
  projectId: 'your-project-id',
  keyFilename: '/path/to/key.json',
});

// Reports a simple error
errors.report('Something broke!');

Como visualizar relatórios de erros

No console do Google Cloud, acesse a página Error Reporting:

Acessar o Error Reporting

Também é possível encontrar essa página usando a barra de pesquisa.

Para mais informações, consulte Como visualizar erros.