Strumenti per app Java per Error Reporting

Puoi inviare report sugli errori a Error Reporting dalle applicazioni Java utilizzando il pacchetto Error Reporting per Java.

Error Reporting è integrato con alcuni servizi Google Cloud, come App Engine, Compute Engine e Google Kubernetes Engine. Error Reporting visualizza gli errori registrati in Cloud Logging dalle applicazioni in esecuzione su questi servizi. Per ulteriori informazioni, vai a In esecuzione su Google Cloud Platform in questa pagina.

Puoi anche inviare i dati sugli errori a Error Reporting utilizzando Logging. Per informazioni sui requisiti di formattazione dei dati, consulta Formattazione dei messaggi di errore in Logging.

Prima di iniziare

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Nella console di Google Cloud Console, nella pagina del selettore dei progetti, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  4. Attiva Error Reporting API .

    Abilita l'API

  5. Nella console di Google Cloud Console, nella pagina del selettore dei progetti, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  6. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  7. Attiva Error Reporting API .

    Abilita l'API

Installazione della libreria client

Il pacchetto Error Reporting per Java consente di monitorare e visualizzare gli errori segnalati dalle applicazioni Java in esecuzione praticamente ovunque.

Per ulteriori informazioni sull'installazione, consulta la documentazione relativa al pacchetto Error Reporting per Java. Puoi anche segnalare i problemi utilizzando lo strumento Issue Tracker.

Configurazione della libreria client

Puoi personalizzare il comportamento del pacchetto Error Reporting per Java. Consulta la documentazione di riferimento dell'API Java.

Segnalare errori

Utilizza il pacchetto Error Reporting per Java solo se devi segnalare eventi di errore personalizzati.

Le eccezioni registrate utilizzando l'appender di logback di Cloud Logging o il gestore java.util.logging vengono segnalate automaticamente nella console di Error Reporting.

Il seguente esempio illustra l'utilizzo dell'API per segnalare un evento di errore personalizzato:

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

Consulta la documentazione di riferimento dell'API Java per informazioni su come recuperare e gestire le statistiche sugli errori, nonché i dati per i singoli eventi.

In esecuzione su Google Cloud

Per utilizzare il pacchetto Error Reporting per Java è richiesto il ruolo Writer di Identity and Access Management Error Reporting. La maggior parte delle piattaforme di computing di Google Cloud offre questo ruolo per impostazione predefinita.

Puoi configurare Error Reporting per Java nei seguenti ambienti Google Cloud.

Ambiente flessibile di App Engine

App Engine concede il ruolo Writer Error Reporting per impostazione predefinita.

Il pacchetto Error Reporting per Java può essere utilizzato senza dover fornire esplicitamente le credenziali.

Error Reporting è abilitato automaticamente per le applicazioni nell'ambiente flessibile di App Engine. Non è richiesta alcuna ulteriore configurazione.

@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

Su GKE, devi aggiungere l'ambito di accesso cloud-platform quando crei il cluster, come mostra il seguente comando di esempio:

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

Compute Engine

Quando utilizzi istanze VM di Compute Engine, aggiungi l'ambito di accesso cloud-platform a ogni istanza. Quando crei una nuova istanza tramite la console Google Cloud, puoi farlo nella sezione Identità e accesso API del riquadro Crea istanza. Utilizza l'account di servizio predefinito di Compute Engine o un altro account di servizio a tua scelta e seleziona Consenti l'accesso completo a tutte le API Cloud nella sezione Identità e accesso API. Qualunque account di servizio selezionato, assicurati che gli sia stato concesso il ruolo Writer Error Reporting nella sezione IAM e amministrazione della console Google Cloud.

Esecuzione localmente e altrove

Per utilizzare il pacchetto Error Reporting per Java al di fuori di Google Cloud, inclusa l'esecuzione della libreria sulla tua workstation, sui computer del tuo data center o sulle istanze VM di un altro cloud provider, devi fornire l'ID progetto Google Cloud e le credenziali dell'account di servizio appropriate direttamente nel pacchetto Error Reporting per Java.

Puoi creare e ottenere manualmente le credenziali dell'account di servizio. Quando specifichi il campo Ruolo, utilizza il ruolo Writer di Error Reporting. Per ulteriori informazioni sui ruoli di Identity and Access Management, vai a Guida al controllo dell'accesso.

Visualizzazione dei rapporti degli errori

Nella console Google Cloud, seleziona Error Reporting oppure fai clic sul pulsante seguente e seleziona un progetto:

Vai a Error Reporting

Per ulteriori informazioni, consulta la sezione Visualizzazione degli errori.