Configuración en Google Kubernetes Engine

Puedes enviar errores de tus aplicaciones de Google Kubernetes Engine a Error Reporting de dos formas:

Usar Logging para informar de errores

El agente de registro predeterminado de GKE proporciona una solución gestionada para implementar y gestionar los agentes que envían los registros de tus clústeres a Cloud Logging. La estructura del agente depende de la versión del clúster. Para obtener información sobre este agente, consulta Gestionar registros de GKE.

Error Reporting requiere que las excepciones o los rastreos de pila se incluyan en una sola entrada de registro. La mayoría de los agentes de registro pueden reconocer que varias líneas de registro (marcos de pila impresos en líneas nuevas) representan un seguimiento de pila y lo envían a Cloud Logging como una sola entrada de registro. Si el agente no puede reconstruir varias líneas como un solo error, usa el endpoint de la API projects.events.report, que te permite controlar el contenido de un error.

Usar la API Error Reporting para escribir errores

La API Error Reporting proporciona un endpoint report para escribir información sobre errores en el servicio.

  1. 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

  2. Informa de los errores a la API mediante la API REST o una biblioteca de cliente.

Ejemplos

ASP.NET

El paquete NuGet de ASP.NET informa de las excepciones no controladas de las aplicaciones web de ASP.NET a Error Reporting.

Instala el paquete NuGet

Para instalar el paquete NuGet de Stackdriver ASP.NET en Visual Studio, sigue estos pasos:

  1. Haz clic con el botón derecho en tu solución y selecciona Gestionar paquetes NuGet para la solución.
  2. Selecciona la casilla Incluir versión preliminar.
  3. Busca e instala el paquete llamado Google.Cloud.Diagnostics.AspNet.

Uso

Una vez que hayas instalado el paquete NuGet de Stackdriver ASP.NET, añade la siguiente instrucción al código de tu aplicación para empezar a enviar errores a Stackdriver:

using Google.Cloud.Diagnostics.AspNet;

Añade el siguiente código HttpConfiguration al método Register de tu aplicación web .NET (sustituye your-project-id por tu ID de proyecto real) para habilitar la notificación de excepciones:

public static void Register(HttpConfiguration config)
{
    string projectId = "YOUR-PROJECT-ID";
    string serviceName = "NAME-OF-YOUR-SERVICE";
    string version = "VERSION-OF-YOUR-SERVCICE";
    // ...
    // Add a catch all for the uncaught exceptions.
    config.Services.Add(typeof(IExceptionLogger),
        ErrorReportingExceptionLogger.Create(projectId, serviceName, version));
    // ...
}

Una vez que hayas añadido este método a tu aplicación ASP.NET, podrás ver las excepciones no controladas que se produzcan a medida que se registren en Google Cloud en la sección Informes de errores de la consola Google Cloud .

C#

Puedes encontrar el siguiente ejemplo en el repositorio GoogleCloudPlatform/dotnet-docs-samples. Para usarlo, después de compilar el proyecto, especifica el ID del proyecto:

C:\...\bin\Debug> set GOOGLE_PROJECT_ID=[YOUR_PROJECT_ID]

Sustituye [YOUR_PROJECT_ID] por el valor correcto de la Google Cloud consola.

A continuación, envía los datos de la excepción con un código similar al siguiente:

public class ErrorReportingSample
{
    public static void Main(string[] args)
    {
        try
        {
            throw new Exception("Generic exception for testing Stackdriver Error Reporting");
        }
        catch (Exception e)
        {
            report(e);
            Console.WriteLine("Stackdriver Error Report Sent");
        }
    }

    /// <summary>
    /// Create the Error Reporting service (<seealso cref="ClouderrorreportingService"/>)
    /// with the Application Default Credentials and the proper scopes.
    /// See: https://developers.google.com/identity/protocols/application-default-credentials.
    /// </summary>
    private static ClouderrorreportingService CreateErrorReportingClient()
    {
        // Get the Application Default Credentials.
        GoogleCredential credential = GoogleCredential.GetApplicationDefaultAsync().Result;

        // Add the needed scope to the credentials.
        credential.CreateScoped(ClouderrorreportingService.Scope.CloudPlatform);

        // Create the Error Reporting Service.
        ClouderrorreportingService service = new ClouderrorreportingService(new BaseClientService.Initializer
        {
            HttpClientInitializer = credential,
        });
        return service;
    }

    /// <summary>
    /// Creates a <seealso cref="ReportRequest"/> from a given exception.
    /// </summary>
    private static ReportRequest CreateReportRequest(Exception e)
    {
        // Create the service.
        ClouderrorreportingService service = CreateErrorReportingClient();

        // Get the project ID from the environement variables.
        string projectId = Environment.GetEnvironmentVariable("GOOGLE_PROJECT_ID");

        // Format the project id to the format Error Reporting expects. See:
        // https://cloud.google.com/error-reporting/reference/rest/v1beta1/projects.events/report
        string formattedProjectId = string.Format("projects/{0}", projectId);

        // Add a service context to the report.  For more details see:
        // https://cloud.google.com/error-reporting/reference/rest/v1beta1/projects.events#ServiceContext
        ServiceContext serviceContext = new ServiceContext()
        {
            Service = "myapp",
            Version = "8c1917a9eca3475b5a3686d1d44b52908463b989",
        };
        ReportedErrorEvent errorEvent = new ReportedErrorEvent()
        {
            Message = e.ToString(),
            ServiceContext = serviceContext,
        };
        return new ReportRequest(service, errorEvent, formattedProjectId);
    }

    /// <summary>
    /// Report an exception to the Error Reporting service.
    /// </summary>
    private static void report(Exception e)
    {
        // Create the report and execute the request.
        ReportRequest request = CreateReportRequest(e);
        request.Execute();
    }
}

Go

Consulta Configurar Error Reporting para Go.

Java

Consulta Configurar Error Reporting para Java.

Node.js

Consulta Configurar Error Reporting para Node.js.

Ruby

Consulta Configurar Error Reporting para Ruby.

Python

Consulta Configurar Error Reporting para Python.

PHP

Consulta Configurar Error Reporting para PHP.

Ver grupos de errores

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

Ve a Error Reporting.

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