Configuração no Google Kubernetes Engine

Pode enviar erros das suas aplicações do Google Kubernetes Engine para o Error Reporting de uma das seguintes formas:

  • Ao registar no Cloud Logging. Se já estiver a usar o Cloud Logging, o único requisito adicional é que as suas entradas de registo sejam reconhecidas pelo Error Reporting. Para mais informações sobre os requisitos de formatação de erros, leia o artigo Formatar erros no Cloud Logging.

  • Usar a API Error Reporting. A sua aplicação pode enviar pedidos HTTP através da API REST ou usar bibliotecas experimentais em vários idiomas.

Usar o registo para comunicar erros

O agente de registo predefinido do GKE oferece uma solução gerida para implementar e gerir os agentes que enviam os registos dos seus clusters para o Cloud Logging. A estrutura do agente depende da versão do cluster. Para informações sobre este agente, consulte o artigo Gerir registos do GKE.

Os relatórios de erros requerem que as exceções ou os rastreios de pilha estejam contidos numa única entrada de registo. A maioria dos agentes de registo é capaz de reconhecer que várias linhas de registo, ou frames de pilha impressos cada um numa nova linha, representam um rastreio da pilha e enviá-lo para o Cloud Logging como uma única entrada de registo. Se o agente não conseguir reconstruir várias linhas como um único erro, use o ponto final da API projects.events.report, que lhe permite controlar o conteúdo de um erro.

Usar a API Error Reporting para escrever erros

A API Error Reporting fornece um ponto final report para escrever informações de erro no serviço.

  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. Comunique erros à API através da API REST ou de uma biblioteca cliente.

Amostras

ASP.NET

O pacote NuGet do ASP.NET comunica exceções não detetadas de aplicações Web ASP.NET para o Relatório de erros.

Instale o pacote NuGet

Para instalar o pacote NuGet do Stackdriver ASP.NET no Visual Studio:

  1. Clique com o botão direito do rato na sua solução e selecione Gerir pacotes NuGet para a solução.
  2. Selecione a caixa de verificação Incluir versão pré-lançamento.
  3. Pesquise e instale o pacote com o nome Google.Cloud.Diagnostics.AspNet.

Utilização

Depois de instalar o pacote NuGet do Stackdriver ASP.NET, adicione a seguinte declaração ao código da aplicação para começar a enviar erros para o Stackdriver:

using Google.Cloud.Diagnostics.AspNet;

Adicione o seguinte código HttpConfiguration ao método Register da sua app Web .NET (substituindo your-project-id pelo seu ID do projeto real para ativar a comunicação de exceções):

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

Depois de adicionar este método à sua aplicação ASP.NET, pode ver todas as exceções não capturadas que ocorrem à medida que são comunicadas à secção Relatório de erros da consola Google Cloud . Google Cloud

C#

Pode encontrar o exemplo seguinte no repositório GoogleCloudPlatform/dotnet-docs-samples. Para o usar, depois de criar o projeto, especifique o seu ID do projeto:

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

Certifique-se de que substitui [YOUR_PROJECT_ID] pelo valor correto da consolaGoogle Cloud .

Em seguida, envie dados de exceção com um código semelhante ao seguinte:

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

Consulte o artigo Configurar relatórios de erros para o Go.

Java

Consulte o artigo Configurar o Error Reporting para Java.

Node.js

Consulte o artigo Configurar o Relatório de erros para Node.js.

Ruby

Consulte o artigo Configurar relatórios de erros para Ruby.

Python

Consulte o artigo Configurar relatórios de erros para Python.

PHP

Consulte o artigo Configurar relatórios de erros para PHP.

Veja grupos de erros

Na Google Cloud consola, aceda à página Error Reporting:

Aceda a Error Reporting

Também pode encontrar esta página através da barra de pesquisa.