Instrumenter des applications Java pour Error Reporting

Vous pouvez envoyer des rapports d'erreurs à Error Reporting depuis des applications Java à l'aide du package Error Reporting pour Java. Utilisez le package Error Reporting pour Java pour créer des groupes d'erreurs dans les cas suivants :

  • Un bucket de journaux contenant vos entrées de journaux est soumis à un chiffrement géré par le client clés (CMEK).
  • Le bucket de journaux remplit l'une des conditions suivantes:
    • Le bucket de journaux est stocké dans le même projet que les entrées de journal.
    • Les entrées de journal ont été acheminées vers un projet, puis ce projet les a stockées dans un bucket de journaux dont il est propriétaire.
  • Vous souhaitez signaler des événements d'erreur personnalisés.

Error Reporting est intégré à certains services Google Cloud, tels que Cloud Functions, App Engine, Compute Engine et Google Kubernetes Engine. Error Reporting vous permet d'afficher les erreurs qui sont consignées dans Cloud Logging par les applications exécutées sur ces services. Pour en savoir plus, consultez la section Exécuter sur Google Cloud de cette page.

Vous pouvez également envoyer des données d'erreur à Error Reporting à l'aide de Logging. Pour en savoir plus sur les exigences en matière de mise en forme des données, consultez la page Formater les messages d'erreur dans Logging.

Avant de commencer

  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

Installer la bibliothèque cliente

Le package Error Reporting pour Java vous permet de surveiller et d'afficher les erreurs signalées par Applications Java exécutées depuis presque n'importe quel environnement

Pour en savoir plus sur l'installation, consultez la documentation sur le package Error Reporting pour Java. Vous pouvez également signaler d'éventuels problèmes à l'aide de l'outil de suivi des problèmes.

Configurer la bibliothèque cliente

Vous pouvez personnaliser le comportement du package Error Reporting pour Java. Consultez la documentation de référence de l'API Java.

Exécuter des applications sur Google Cloud

Pour créer des groupes d'erreurs en utilisant projects.events.report, votre compte de service requiert Rôle de rédacteur pour Error Reporting (roles/errorreporting.writer).

Certains services Google Cloud accordent automatiquement Rédacteur Error Reporting (roles/errorreporting.writer) au niveau approprié de service géré. Toutefois, vous devez attribuer ce rôle au service approprié pour certains services.

Environnement flexible App Engine

App Engine accorde le rôle Rôle de rédacteur pour Error Reporting (roles/errorreporting.writer) automatiquement à votre compte de service par défaut.

Le package Error Reporting pour Java peut être utilisé sans avoir à fournir explicitement des identifiants.

Error Reporting est automatiquement activé pour les applications de l'environnement flexible App Engine. Aucune configuration supplémentaire n'est requise.

@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

Pour utiliser Error Reporting avec Google Kubernetes Engine, effectuer les opérations suivantes:

  1. Assurez-vous que le compte de service que votre conteneur doit utiliser a été accordé le Rôle de rédacteur pour Error Reporting (roles/errorreporting.writer).

    Vous pouvez utiliser le compte de service Compute Engine par défaut ou un compte de service personnalisé.

    Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations

  2. Créez votre cluster et attribuez-lui le rôle cloud-platform niveau d'accès.

    Par exemple, la commande "create" suivante spécifie le champ : cloud-platform niveau d'accès et un compte de service:

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

Compute Engine

Pour utiliser Error Reporting avec des instances de VM Compute Engine, effectuer les opérations suivantes:

  1. Assurez-vous que le compte de service que doit utiliser votre instance de VM a été accordé le Rôle de rédacteur pour Error Reporting (roles/errorreporting.writer).

    Vous pouvez utiliser le compte de service Compute Engine par défaut ou un compte de service personnalisé.

    Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations

  2. Dans la console Google Cloud, accédez à la page Instances de VM :

    Accéder à la page Instances de VM

    Si vous utilisez la barre de recherche pour trouver cette page, sélectionnez le résultat dont le sous-titre est Compute Engine.

  3. Sélectionnez l'instance de VM sur laquelle vous souhaitez recevoir le cloud-platform niveau d'accès.

  4. Cliquez sur Arrêter, puis sur Modifier.

  5. Dans la section Identité et accès à l'API, sélectionnez un compte de service dispose du rôle "Rédacteur Error Reporting" (roles/errorreporting.writer).

  6. Dans la section Niveaux d'accès, sélectionnez Autoriser l'accès complet à l'ensemble des API Cloud, puis enregistrez vos modifications.

  7. Cliquez sur Démarrer/Réactiver.

Cloud Functions

Les fonctions Cloud Run attribuent automatiquement le rôle Rédacteur pour Error Reporting (roles/errorreporting.writer) à votre compte de service par défaut.

Le package Error Reporting pour Java peut être utilisé sans avoir à fournir explicitement des identifiants.

Les fonctions Cloud Run sont configurées pour utiliser Error Reporting automatiquement. Non géré Les exceptions JavaScript s'afficheront dans Logging et seront traitées par Error Reporting sans avoir à utiliser Package Error Reporting pour Java.

Exemple

Les exceptions enregistrées à l'aide de l'appender de journalisation Cloud Logging ou du gestionnaire java.util.logging sont automatiquement signalées à la console Error Reporting.

L'exemple suivant illustre l'utilisation de la bibliothèque cliente Java pour signaler un événement d'erreur personnalisé:

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

Consultez la documentation de référence de l'API Java pour savoir comment récupérer et gérer les statistiques d'erreur ainsi que les données relatives aux événements individuels.

Exécuter des applications dans un environnement de développement local

Pour utiliser le package Error Reporting pour Java dans un environnement de développement local, procédez comme suit : par exemple en exécutant la bibliothèque sur votre propre poste de travail, vous devez fournir votre package Error Reporting pour Java avec les identifiants par défaut de l'application locale. Pour en savoir plus, consultez S'authentifier auprès d'Error Reporting.

Pour utiliser les exemples Java de cette page dans un environnement de développement local, installez et initialisez gcloud CLI, puis configurez le service Identifiants par défaut de l'application à l'aide de vos identifiants utilisateur.

  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.

Pour en savoir plus, consultez Set up authentication for a local development environment.

La méthode projects.events.report est également compatible avec les clés API. Si vous souhaitez utiliser des clés API pour l'authentification, vous n'avez pas besoin de configurer un fichier d'identifiants par défaut de l'application local. Pour en savoir plus, consultez Créer une clé API dans la documentation sur l'authentification Google Cloud

Afficher les rapports d'erreurs

Dans la console Google Cloud, accédez à la page Error Reporting:

Accéder à Error Reporting

Vous pouvez également accéder à cette page à l'aide de la barre de recherche.

Pour en savoir plus, consultez la page Afficher les erreurs.