Strumentare le app Java per Error Reporting

Puoi inviare report sugli errori a Error Reporting dalle applicazioni Java utilizzando il pacchetto Error Reporting per Java. Utilizza il pacchetto Error Reporting per Java per creare gruppi di errori per i seguenti casi:

  • Un bucket dei log che contiene le voci di log ha chiavi di crittografia gestite dal cliente (CMEK).
  • Il bucket di log soddisfa uno dei seguenti requisiti:
    • Il bucket di log è archiviato nello stesso progetto in cui hanno avuto origine le voci di log.
    • Le voci di log sono state instradate a un progetto, che le ha archiviate in un bucket di log di sua proprietà.
  • Vuoi segnalare eventi di errore personalizzati.

Error Reporting è integrato con alcuni Google Cloud servizi, come Cloud Functions e App Engine, Compute Engine e Google Kubernetes Engine. Error Reporting mostra gli errori registrati in Cloud Logging dalle applicazioni in esecuzione su questi servizi. Per saperne di più, vai a Esecuzione su Google Cloud in questa pagina.

Puoi anche inviare i dati sugli errori a Error Reporting utilizzando Logging. Per informazioni sui requisiti di formattazione dei dati, leggi Messaggi di errore di formattazione nel logging.

Prima di iniziare

  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. installa la libreria client

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

    Per saperne di più sull'installazione, leggi la documentazione del pacchetto Error Reporting per Java. Puoi anche segnalare i problemi utilizzando il tracker dei problemi.

    Configura la libreria client

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

    Eseguire app su Google Cloud

    Per creare gruppi di errori utilizzando projects.events.report, il tuo account di servizio richiede il ruolo Writer Error Reporting (roles/errorreporting.writer).

    Alcuni servizi Google Cloud concedono automaticamente il ruolo Writer Error Reporting (roles/errorreporting.writer) al account di servizio appropriato. Tuttavia, per alcuni servizi devi concedere questo ruolo all'account di servizio appropriato.

    Cloud Run e Cloud Run Functions

    L'account di servizio predefinito utilizzato da Cloud Run dispone delle autorizzazioni del ruolo Writer di Error Reporting (roles/errorreporting.writer).

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

    Cloud Run è configurato per utilizzare Error Reporting automaticamente. Le eccezioni JavaScript non gestite verranno visualizzate in Logging ed elaborate da Error Reporting senza dover utilizzare il pacchetto Error Reporting per Java.

    Ambiente flessibile di App Engine

    App Engine concede automaticamente il ruolo Writer Error Reporting (roles/errorreporting.writer) al tuaccount di serviziont predefinito.

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

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

    @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

    Per utilizzare Error Reporting con Google Kubernetes Engine, svolgi le seguenti operazioni:

    1. Assicurati che all'account di servizio da utilizzare dal tuo container sia stato concesso il ruolo Writer Error Reporting (roles/errorreporting.writer).

      Puoi utilizzare l'account di servizio predefinito di Compute Engine o un account di servizio personalizzato.

      Per informazioni sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.

    2. Crea il cluster e concedigli l'cloud-platform ambito di accesso.

      Ad esempio, il seguente comando create specifica l'ambito di accesso cloud-platform e unaccount di serviziot:

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

    Compute Engine

    Per utilizzare Error Reporting con le istanze VM di Compute Engine, svolgi le seguenti operazioni:

    1. Assicurati che all'account di servizio da utilizzare dalla tua istanza VM sia stato concesso il ruolo Writer Error Reporting (roles/errorreporting.writer).

      Puoi utilizzare l'account di servizio predefinito di Compute Engine o un account di servizio personalizzato.

      Per informazioni sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.

    2. Nella Google Cloud console, vai alla pagina Istanze VM.

      Vai a Istanze VM

      Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Compute Engine.

    3. Seleziona l'istanza VM che deve ricevere l'cloud-platform ambito di accesso.

    4. Fai clic su Interrompi e poi su Modifica.

    5. Nella sezione Identità e accesso API, seleziona un account di servizio con il ruolo Writer di Error Reporting (roles/errorreporting.writer).

    6. Nella sezione Ambiti di accesso, seleziona Consenti l'accesso completo a tutte le API Cloud e salva le modifiche.

    7. Fai clic su Avvia/Riprendi.

    Esempio

    Le eccezioni registrate utilizzando Cloud Logging Logback Appender o java.util.logging Handler vengono segnalate automaticamente alla console Error Reporting.

    Il seguente esempio mostra l'utilizzo della libreria client Java 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 scoprire come recuperare e gestire le statistiche sugli errori e i dati per i singoli eventi.

    Esegui app in un ambiente di sviluppo locale

    Per utilizzare il pacchetto Error Reporting per Java in un ambiente di sviluppo locale, ad esempio eseguendo la libreria sulla tua workstation, devi fornire al pacchetto Error Reporting per Java le credenziali predefinite dell'applicazione locale. Per ulteriori informazioni, consulta Autenticarsi in Error Reporting.

    Per utilizzare gli esempi di Java questa pagina in un ambiente di sviluppo locale, installa e inizializza gcloud CLI, quindi configura le Credenziali predefinite dell'applicazione con le tue credenziali utente.

    1. Install the Google Cloud CLI.

    2. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    3. To initialize the gcloud CLI, run the following command:

      gcloud init
    4. 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.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    Per ulteriori informazioni, vedi Set up authentication for a local development environment.

    Il metodo projects.events.report supporta anche le chiavi API. Se vuoi utilizzare le chiavi API per l'autenticazione, non devi configurare un file Credenziali predefinite dell'applicazione locale. Per maggiori informazioni, vedi Crea una chiave API nella Google Cloud documentazione sull'autenticazione.

    Visualizzazione dei rapporti degli errori

    Nella console Google Cloud , vai alla pagina Error Reporting:

    Vai a Error Reporting

    Puoi trovare questa pagina anche utilizzando la barra di ricerca.

    Per saperne di più, vedi Visualizzare gli errori.