Instrumentar apps Java para o Error Reporting

Você pode enviar eventos de erro para o Error Reporting a partir de aplicativos Java usando o pacote do Error Reporting para Java. Use o pacote do Error Reporting para Java e crie grupos de erros para os 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 criadas.
    • As entradas de registro foram encaminhadas para um projeto, que as armazenou em um bucket de registros de propriedade dele.
  • Você quer informar eventos de erro personalizados.

O Error Reporting é integrado a alguns serviços do Google Cloud , como funções do Cloud Run, App Engine, Compute Engine e Google Kubernetes Engine. Error Reporting exibe os eventos de erro 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 eventos de erro para o Error Reporting usando o Logging. Para mais informações sobre os requisitos de formatação de dados, leia Formatar uma entrada de registro para informar eventos de erro.

Antes de começar

  1. Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Error Reporting API .

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Error Reporting API .

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

Instale a biblioteca de cliente

Com o pacote do Error Reporting para Java, você pode monitorar e visualizar eventos de erro relatados por aplicativos Java que estiverem em execução em praticamente qualquer lugar.

    Se você estiver usando o Maven, adicione o código abaixo ao arquivo pom.xml. Para mais informações sobre BOMs, consulte BOM das bibliotecas do Google Cloud Platform.

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.google.cloud</groupId>
          <artifactId>libraries-bom</artifactId>
          <version>26.78.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    
    <dependencies>
      <dependency>
        <groupId>com.google.cloud</groupId>
        <artifactId>google-cloud-errorreporting</artifactId>
      </dependency>
    </dependencies>

    Se você estiver usando o Gradle, adicione isto às dependências:

    implementation 'com.google.cloud:google-cloud-errorreporting:0.208.0-beta'

    Se você estiver usando o sbt, adicione o seguinte às suas dependências:

    libraryDependencies += "com.google.cloud" % "google-cloud-errorreporting" % "0.208.0-beta"

    Se você estiver usando o Visual Studio Code ou o IntelliJ, poderá adicionar bibliotecas de cliente ao projeto usando estes plug-ins de IDE:

    Os plug-ins também oferecem outras funcionalidades, como gerenciamento de chaves de contas de serviço. Consulte a documentação de cada plug-in para mais detalhes.

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

Configurar a biblioteca de cliente

É possível personalizar o comportamento do pacote do Error Reporting para Java. Veja a documentação de referência da Java API.

Executar apps no Google Cloud

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

Alguns serviços Google Cloud concedem automaticamente o papel de gravador do Error Reporting (roles/errorreporting.writer) à conta de serviço apropriada. No entanto, é preciso conceder esse papel à conta de serviço adequada para alguns serviços.

Cloud Run e Cloud Run Functions

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

O pacote do Error Reporting para Java pode ser usado 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 vão aparecer no Logging e serão processadas pelo Error Reporting sem a necessidade de usar o pacote do Error Reporting para Java.

Ambiente flexível do App Engine

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

O pacote do Error Reporting para Java pode ser usado 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.

@WebServlet(name = "Error reporting", value = "/error")
public class ErrorReportingExample extends HttpServlet {

  private Logger logger = Logger.getLogger(ErrorReportingExample.class.getName());

  @Override
  public void doGet(HttpServletRequest req, HttpServletResponse resp)
      throws IOException, ServletException {

    // errors logged to stderr / Cloud logging with exceptions are automatically reported.
    logger.log(Level.SEVERE, "exception using log framework", new IllegalArgumentException());

    // use the error-reporting client library only if you require logging custom error events.
    logCustomErrorEvent();

    // runtime exceptions are also automatically reported.
    throw new RuntimeException("this is a runtime exception");
  }

  private void logCustomErrorEvent() {
    try (ReportErrorsServiceClient reportErrorsServiceClient = ReportErrorsServiceClient.create()) {
      // Custom error events require an error reporting location as well.
      ErrorContext errorContext =
          ErrorContext.newBuilder()
              .setReportLocation(
                  SourceLocation.newBuilder()
                      .setFilePath("Test.java")
                      .setLineNumber(10)
                      .setFunctionName("myMethod")
                      .build())
              .build();
      // Report a custom error event
      ReportedErrorEvent customErrorEvent =
          ReportedErrorEvent.getDefaultInstance()
              .toBuilder()
              .setMessage("custom error event")
              .setContext(errorContext)
              .build();

      // default project id
      ProjectName projectName = ProjectName.of(ServiceOptions.getDefaultProjectId());
      reportErrorsServiceClient.reportErrorEvent(projectName, customErrorEvent);
    } catch (Exception e) {
      logger.log(Level.SEVERE, "Exception encountered logging custom event", e);
    }
  }
}

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 usada pelo contêiner tem o papel 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 cloud-platform escopo de acesso.

    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 que será usada pela instância de VM recebeu o papel 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 Google Cloud console, 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 cloud-platform escopo de acesso.

  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 total a todas as APIs do Cloud e salve as mudanças.

  7. Clique em Iniciar / retomar.

Exemplo

As exceções registradas com o Logback Appender do Cloud Logging ou o Gerenciador java.util.logging são relatadas automaticamente ao Console do Error Reporting.

O exemplo a seguir demonstra o uso da biblioteca de cliente Java para relatar um evento de erro personalizado:

import com.google.cloud.ServiceOptions;
import com.google.devtools.clouderrorreporting.v1beta1.ProjectName;
import com.google.devtools.clouderrorreporting.v1beta1.ReportErrorsServiceClient;
import com.google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;

/**
 * Snippet demonstrates using the Error Reporting API to report an exception.
 * <p>
 * When the workload runs on App Engine, GKE, Cloud Functions or another managed environment,
 * printing the exception's stack trace to stderr will automatically report the error
 * to Error Reporting.
 */
public class QuickStart {

  static String projectId;

  public static void main(String[] args) throws Exception {
    // Set your Google Cloud Platform project ID via environment or explicitly
    projectId = ServiceOptions.getDefaultProjectId();
    if (args.length > 0) {
      projectId = args[0];
    } else {
      String value = System.getenv("GOOGLE_CLOUD_PROJECT");
      if (value != null && value.isEmpty()) {
        projectId = value;
      }
    }

    try {
      throw new Exception("Something went wrong");
    } catch (Exception ex) {
      reportError(ex);
    }
  }

  /**
   * Sends formatted error report to Google Cloud including the error context.
   *
   * @param ex Exception containing the error and the context.
   * @throws IOException if fails to communicate with Google Cloud
   */
  private static void reportError(Exception ex) throws IOException {
    try (ReportErrorsServiceClient serviceClient = ReportErrorsServiceClient.create()) {
      StringWriter sw = new StringWriter();
      PrintWriter pw = new PrintWriter(sw);
      ex.printStackTrace(pw);

      ReportedErrorEvent errorEvent = ReportedErrorEvent.getDefaultInstance()
          .toBuilder()
          .setMessage(sw.toString())
          .build();
      // If you need to report an error asynchronously, use reportErrorEventCallable()
      // method
      serviceClient.reportErrorEvent(ProjectName.of(projectId), errorEvent);
    }
  }
}

Consulte a documentação de referência da Java API para saber como recuperar e gerenciar estatísticas de erros, além de dados de eventos individuais.

Executar apps em um ambiente de desenvolvimento local

Para usar o pacote do Error Reporting para Java em um ambiente de desenvolvimento local, como executar a biblioteca na sua estação de trabalho, forneça ao pacote do Error Reporting para Java as credenciais padrão do aplicativo local. Para mais informações, consulte Autenticar no Error Reporting.

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

  1. Instale a CLI do Google Cloud.

  2. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.

  3. Se você estiver usando um shell local, crie credenciais de autenticação local para sua conta de usuário:

    gcloud auth application-default login

    Não é necessário fazer isso se você estiver usando o Cloud Shell.

    Se um erro de autenticação for retornado e você estiver usando um provedor de identidade (IdP) externo, confirme se você fez login na CLI gcloud com sua identidade federada.

Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

O método projects.events.report 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. Para mais informações, consulte Criar uma chave de API na documentação de autenticação do Google Cloud .

Ver grupos de erros

No console 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 Visualizar e filtrar grupos de erros.