Como configurar o Error Reporting para Java

Use o pacote do Stackdriver Error Reporting para Java para enviar relatórios de erro ao Stackdriver Error Reporting por meio de aplicativos em Java.

O Error Reporting é integrado a alguns produtos do Google Cloud Platform, como o App Engine, o Compute Engine e o Google Kubernetes Engine. Por isso, ele exibe os erros que são registrados no Stackdriver Logging por aplicativos executados nesses produtos. Para mais informações, consulte Como executar no Google Cloud Platform.

Também é possível enviar dados de erros para o Error Reporting usando o Stackdriver Logging. Para mais informações sobre requisitos de formatação de dados, consulte Como formatar mensagens de erros no Stackdriver Logging.

Antes de começar

  1. Faça login na sua Conta do Google.

    Se você ainda não tiver uma, inscreva-se.

  2. Selecione ou crie um projeto do GCP.

    Acessar a página Gerenciar recursos

  3. Verifique se o faturamento foi ativado para o projeto.

    Saiba como ativar o faturamento

  4. Ativar API Error Reporting.

    Ativar a API

Como instalar a biblioteca de cliente

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

Para mais informações sobre a instalação, consulte a documentação do pacote do Stackdriver Error Reporting para Java. Além disso, use o rastreador de problemas para informar erros.

Como configurar a biblioteca de cliente

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

Como relatar erros

Use o pacote do Stackdriver Error Reporting para Java somente se precisar relatar eventos de erro personalizados.

As exceções registradas com o Logback Appender do Stackdriver ou o Gerenciador java.util.logging do Stackdriver são relatadas automaticamente ao Console do Error Reporting. O exemplo a seguir demonstra o uso da API para relatar um evento de erro personalizado:

import com.google.cloud.ServiceOptions;
import com.google.cloud.errorreporting.v1beta1.ReportErrorsServiceClient;
import com.google.devtools.clouderrorreporting.v1beta1.ErrorContext;
import com.google.devtools.clouderrorreporting.v1beta1.ProjectName;
import com.google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent;
import com.google.devtools.clouderrorreporting.v1beta1.SourceLocation;

/**
 * Snippet demonstrates using the Stackdriver Error Reporting API to report a custom error event.
 * <p>
 * This library is not required on App Engine, errors written to stderr are automatically written
 * to Stackdriver Error Reporting.
 * It is also not required if you are writing logs to Stackdriver Logging.
 * Errors written to Stackdriver Logging that contain an exception or stack trace
 * are automatically written out to Stackdriver Error Reporting.
 */
public class QuickStart {
  public static void main(String[] args) throws Exception {

    // Google Cloud Platform Project ID
    String projectId = (args.length > 0) ? args[0] : ServiceOptions.getDefaultProjectId();
    ProjectName projectName = ProjectName.of(projectId);

    // Instantiate an Error Reporting Client
    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();
      // Report an event synchronously, use .reportErrorEventCallable for asynchronous reporting.
      reportErrorsServiceClient.reportErrorEvent(projectName, customErrorEvent);
    }
  }
}
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.

Como executar no Google Cloud Platform

Se você quiser usar o pacote do Stackdriver Error Reporting para Java, é preciso ter o papel Gravador do Error Reporting do Cloud IAM. A maioria das plataformas de computação do Google Cloud Platform fornece esse papel por padrão.

Ambiente flexível do App Engine

O App Engine concede o papel Gravador do Error Reporting por padrão.

Não é necessário fornecer as credenciais explicitamente para usar o pacote do Stackdriver Error Reporting para Java.

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);
    }
  }
}

GKE

No GKE, é necessário adicionar o escopo de acesso do cloud-platform ao criar o cluster, conforme mostra o comando de exemplo a seguir:

gcloud container clusters create example-cluster-name --scopes https://www.googleapis.com/auth/cloud-platform

Compute Engine

Ao usar instâncias de VM do Compute Engine, adicione o escopo de acesso cloud-platform a cada instância. Ao criar uma nova instância por meio do Console do Google Cloud Platform, faça isso na seção Identidade e acesso à API do painel Criar instância. Use a conta de serviço padrão do Compute Engine ou outra de sua escolha e selecione Permitir acesso completo a todas as APIs do Cloud na seção Identidade e acesso à API. Seja qual for a conta de serviço selecionada, verifique se ela tem o papel Gravador do Error Reporting na seção IAM e administrador do Console do GCP.

Como executar localmente e em outro local

Para usar o pacote do Stackdriver Error Reporting para Java fora do Google Cloud Platform, é preciso fornecer o código do projeto do GCP e as credenciais adequadas da conta de serviço diretamente nesse pacote. Isso se aplica quando a biblioteca é executada na sua própria estação de trabalho, em computadores do data center ou em instâncias de VM de outro provedor de nuvem. Para saber mais, consulte Como receber e fornecer credenciais de conta de serviço manualmente.

Como visualizar relatórios de erros

Após a implantação, veja os relatórios de erros no painel do Error Reporting no Console do GCP.

Acessar o painel do Error Reporting

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

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Stackdriver Error Reporting
Precisa de ajuda? Acesse nossa página de suporte.