Configura Error Reporting para Java

Puedes enviar informes de errores a Error Reporting desde aplicaciones de Java mediante el paquete de Error Reporting para Java.

Error Reporting está integrado a algunos servicios de Google Cloud, como App Engine, Compute Engine y Google Kubernetes Engine. Error Reporting muestra los errores 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 Platform en esta página.

También puedes enviar datos de errores a Error Reporting mediante Logging. Para obtener información sobre los requisitos de formato de datos, consulta Dale formato a los mensajes de error en Logging.

Antes de comenzar

  1. Accede a tu Cuenta de Google.

    Si todavía no tienes una cuenta, regístrate para obtener una nueva.

  2. En la página de selección de proyectos de Cloud Console, selecciona o crea un proyecto de Cloud.

    Ir a la página Selector de proyectos

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud. Obtén información sobre cómo confirmar que tienes habilitada la facturación para tu proyecto.

  4. Habilita las Error Reporting API .

    Habilita la API

Instala la biblioteca cliente

El paquete de Error Reporting para Java te permite ver y supervisar los errores informados por las aplicaciones Java que se ejecutan prácticamente en cualquier sitio.

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.

Informa errores

Usa el paquete de Error Reporting para Java solo si necesitas informar eventos de errores personalizados.

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

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

Para usar el paquete de Error Reporting para Java, es necesaria la función de escritor de Error Reporting de la administración de identidades y accesos. La mayoría de las plataformas de computación de Google Cloud proporcionan esta función de forma predeterminada.

Puedes configurar Error Reporting para Java en los siguientes entornos de Google Cloud.

Entorno flexible de App Engine

App Engine otorga la función de escritor de Error Reporting de forma 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

En GKE debes agregar el permiso de acceso de cloud-platform cuando creas el clúster, como se muestra en el siguiente comando de ejemplo:

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

Compute Engine

Cuando uses las instancias de VM de Compute Engine, agrega el permiso de acceso cloud-platform a cada instancia. Si creas una instancia nueva a través de Google Cloud Console, puedes hacerlo en la sección Identidad y acceso a la API del panel Crear Instancia. Usa la cuenta de servicio predeterminada de Compute Engine o una cuenta de servicio diferente y selecciona Permitir acceso total a las API de Cloud en la sección Identidad y acceso a la API. Con cualquier cuenta de servicio que selecciones, asegúrate de que se le haya otorgado la función de escritor de Error Reporting en la sección IAM y administración de Cloud Console.

Ejecuta de forma local y en otros lugares

Para usar el paquete de Error Reporting para Java fuera de Google Cloud, incluso si lo ejecutas en tu propia estación de trabajo, en las computadoras del centro de datos o en las instancias de VM de otro proveedor de servicios en la nube, debes proporcionar tu ID del proyecto de Google Cloud y las credenciales adecuadas de la cuenta de servicio directamente al paquete de Error Reporting para Java.

Puedes crear y obtener credenciales de cuentas de servicio de forma manual. Cuando especifiques el campo Función, usa la función de escritor de Error Reporting. Para obtener más información sobre las funciones de administración de identidades y accesos, consulta la Guía de control de acceso.

Consulta informes de errores

Después de la implementación, puedes ver los informes de errores en el panel de Error Reporting dentro de Cloud Console.

Ir al panel de Error Reporting

Para obtener más información, consulta Cómo visualizar errores.