Instrumenta apps de Java para Error Reporting

Puedes enviar eventos de errores a Error Reporting desde aplicaciones de Java con el paquete de Error Reporting para Java. Usa el paquete de Error Reporting para Java para crear grupos de errores en los siguientes casos:

  • Un bucket de registros que contiene tus entradas de registro tiene claves de encriptación administradas por el cliente (CMEK).
  • El bucket de registros satisface una de las siguientes condiciones:
    • El bucket de registros se almacena en el mismo proyecto en el que se originaron las entradas de registro.
    • Las entradas de registro se enrutaron a un proyecto y, luego, ese proyecto las almacenó en un bucket de registros de su propiedad.
  • Quieres informar eventos de errores personalizados.

Error Reporting se integra en algunos Google Cloud servicios, como Cloud Run Functions y App Engine, Compute Engine y Google Kubernetes Engine. Error Reporting muestra los eventos de error que registran las aplicaciones que se ejecutan en esos servicios en Cloud Logging. Para obtener más información, ve a Ejecuta en Google Cloud en esta página.

También puedes enviar eventos de errores a Error Reporting con Logging. Para obtener información sobre los requisitos de formato de datos, consulta Cómo dar formato a una entrada de registro para informar eventos de errores.

Antes de comenzar

  1. Accede a tu cuenta de Google Cloud . Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  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

Instala la biblioteca cliente

El paquete de Error Reporting para Java te permite supervisar y ver los eventos de error que informan las aplicaciones Java que se ejecutan en casi cualquier lugar.

    Si usas Maven, agrega lo siguiente al archivo pom.xml. Para obtener más información sobre las BOM, consulta Las bibliotecas de BOM de 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>

    Si usas Gradle, agrega lo siguiente a las dependencias:

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

    Si usas sbt, agrega lo siguiente a las dependencias:

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

    Si usas Visual Studio Code o IntelliJ, puedes agregar bibliotecas cliente a tu proyecto con los siguientes complementos IDE:

    Los complementos brindan funcionalidades adicionales, como administración de claves para las cuentas de servicio. Consulta la documentación de cada complemento para obtener más detalles.

Para obtener más información sobre la instalación, lee la documentación del paquete de Error Reporting para Java. También puedes informar problemas con el seguimiento de problemas.

Configura la biblioteca cliente

Puedes personalizar el comportamiento del paquete de Error Reporting para Java. Consulta la documentación de referencia de la API de Java.

Ejecuta apps en Google Cloud

Para crear grupos de errores con projects.events.report, tu cuenta de servicio requiere el rol de escritor de Error Reporting (roles/errorreporting.writer).

Algunos servicios Google Cloud otorgan automáticamente el rol de Error Reporting Writer (roles/errorreporting.writer) a la cuenta de servicio adecuada. Sin embargo, debes otorgar este rol a la cuenta de servicio adecuada para algunos servicios.

Cloud Run y Cloud Run Functions

La cuenta de servicio predeterminada que usa Cloud Run tiene los permisos del rol de escritor de Error Reporting (roles/errorreporting.writer).

El paquete de Error Reporting para Java se puede usar sin necesidad de proporcionar credenciales de forma explícita.

Cloud Run está configurado para usar Error Reporting automáticamente. Las excepciones de JavaScript no controladas aparecerán en Logging y Error Reporting las procesará sin necesidad de usar el paquete de Error Reporting para Java.

Entorno flexible de App Engine

App Engine otorga automáticamente la función de escritor de Error Reporting (roles/errorreporting.writer) a tu cuenta de servicio predeterminada.

El paquete de Error Reporting para Java se puede usar sin necesidad de proporcionar credenciales de forma explícita.

Error Reporting se habilita de manera automática para las aplicaciones del entorno flexible de App Engine. No se requiere ninguna configuración adicional.

@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 Error Reporting con Google Kubernetes Engine, haz lo siguiente:

  1. Asegúrate de que a la cuenta de servicio que usará tu contenedor se le haya otorgado el rol de escritor de Error Reporting (roles/errorreporting.writer).

    Puedes usar la cuenta de servicio predeterminada de Compute Engine o una cuenta de servicio personalizada.

    Para obtener información sobre cómo otorgar roles, consulta Administración del acceso a proyectos, carpetas y organizaciones.

  2. Crea tu clúster y otórgale el alcance de acceso cloud-platform.

    Por ejemplo, el siguiente comando create especifica el permiso de acceso cloud-platform y una cuenta de servicio:

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

Compute Engine

Para usar Error Reporting con instancias de VM de Compute Engine, haz lo siguiente:

  1. Asegúrate de que a la cuenta de servicio que usará tu instancia de VM se le haya otorgado el rol de escritor de Error Reporting (roles/errorreporting.writer).

    Puedes usar la cuenta de servicio predeterminada de Compute Engine o una cuenta de servicio personalizada.

    Para obtener información sobre cómo otorgar roles, consulta Administración del acceso a proyectos, carpetas y organizaciones.

  2. En la consola de Google Cloud , ve a la página Instancias de VM.

    Ir a Instancias de VM

    Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuyo subtítulo es Compute Engine.

  3. Selecciona la instancia de VM que deseas que reciba el alcance de acceso cloud-platform.

  4. Haz clic en Detener y, luego, en Editar.

  5. En la sección Identidad y acceso a la API, selecciona una cuenta de servicio que tenga el rol de escritor de Error Reporting (roles/errorreporting.writer).

  6. En la sección Permisos de acceso, selecciona Permitir el acceso total a todas las APIs de Cloud y, luego, guarda los cambios.

  7. Haz clic en Iniciar/Reanudar.

Ejemplo

Las excepciones que se registran con el Cloud Logging Logback Appender o java.util.logging Handler se informan de manera automática a la consola de Error Reporting.

En el siguiente ejemplo, se muestra cómo usar la biblioteca cliente de Java para informar un evento de error 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);
    }
  }
}

Consulta la documentación de referencia de la API de Java sobre cómo recuperar y administrar estadísticas de errores y datos para eventos individuales.

Ejecuta apps en un entorno de desarrollo local

Para usar el paquete de Error Reporting para Java en un entorno de desarrollo local, como ejecutar la biblioteca en tu propia estación de trabajo, debes proporcionar a tu paquete de Error Reporting para Java las credenciales predeterminadas de la aplicación local. Para obtener más información, consulta Cómo autenticarse en Error Reporting.

Para usar las muestras de Java de esta página en un entorno de desarrollo local, instala e inicializa la gcloud CLI y, luego, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.

  1. Instala Google Cloud CLI.

  2. Si usas un proveedor de identidad (IdP) externo, primero debes acceder a gcloud CLI con tu identidad federada.

  3. Si usas un shell local, crea credenciales de autenticación locales para tu cuenta de usuario:

    gcloud auth application-default login

    No es necesario que lo hagas si usas Cloud Shell.

    Si se devuelve un error de autenticación y usas un proveedor de identidad (IdP) externo, confirma que accediste a la gcloud CLI con tu identidad federada.

Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

El método projects.events.report también admite claves de API. Si deseas usar claves de API para la autenticación, no necesitas configurar un archivo local de credenciales predeterminadas de la aplicación. Para obtener más información, consulta Crea una clave de API en la documentación de autenticación de Google Cloud .

Cómo ver grupos de errores

En la consola de Google Cloud , ve a la página Error Reporting:

Ir a Error Reporting

También puedes usar la barra de búsqueda para encontrar esta página.

Para obtener más información, consulta Cómo ver y filtrar grupos de errores.