Como configurar o Stackdriver Trace em C# ASP.NET Core

É possível ativar o Trace em aplicativos ASP.NET Core usando a biblioteca de cliente do Google.Cloud.Diagnostics.AspNetCore em C#.

Como instalar a biblioteca de cliente

Para usar a biblioteca de cliente do Google.Cloud.Diagnostics.AspNetCore no Visual Studio, siga as seguintes etapas:

  1. No Visual Studio, clique com o botão direito do mouse em sua solução e selecione Gerenciar pacotes Nuget para solução.

  2. Marque a caixa de seleção Incluir pré-lançamento.

  3. Pesquise e instale o pacote Google.Cloud.Diagnostics.AspNetCore .

Para mais informações, consulte Google.Cloud.Diagnostics.AspNetCore .

Como configurar a biblioteca de cliente

Após a instalação da biblioteca de cliente do Google.Cloud.Diagnostics.AspNetCore, conclua as etapas a seguir para ativar e configurar o Trace:

  1. Adicione as diretivas using a seguir ao arquivo Startup.cs do aplicativo:

    using Google.Cloud.Diagnostics.AspNetCore;
    using Google.Cloud.Diagnostics.Common;
    

  2. Adicione o código a seguir ao arquivo appsettings.json do seu aplicativo da Web e atualize YOUR-GOOGLE-PROJECT-ID com o código ou o número do seu projeto.

    {
      "Stackdriver": {
        "ProjectId": "YOUR-GOOGLE-PROJECT-ID",
        "ServiceName": "NAME-OF-YOUR-SERVICE",
        "Version": "VERSION-OF-YOUR-SERVICE"
      }
    }
  3. Crie ou edite o método ConfigureServices no arquivo Startup.cs do aplicativo para que ele chame services.AddGoogleTrace():

            public void ConfigureServices(IServiceCollection services)
            {
                services.AddOptions();
                services.Configure<StackdriverOptions>(
                    Configuration.GetSection("Stackdriver"));
                services.AddGoogleExceptionLogging(options =>
                {
                    options.ProjectId = Configuration["Stackdriver:ProjectId"];
                    options.ServiceName = Configuration["Stackdriver:ServiceName"];
                    options.Version = Configuration["Stackdriver:Version"];
                });
    
                // Add trace service.
                services.AddGoogleTrace(options =>
                {
                    options.ProjectId = Configuration["Stackdriver:ProjectId"];
                    options.Options = TraceOptions.Create(
                        bufferOptions: BufferOptions.NoBuffer());
                });
    
                // Add framework services.
                services.AddMvc();
            }
    

  4. Edite o método Configure no arquivo Startup.cs do aplicativo e chame app.UseGoogleTrace() antes de chamar app.UseStaticFile() e app.UseMvc().

            public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
            {
                // Configure logging service.
                loggerFactory.AddGoogle(Configuration["Stackdriver:ProjectId"]);
                var logger = loggerFactory.CreateLogger("testStackdriverLogging");
                // Write the log entry.
                logger.LogInformation("Stackdriver sample started. This is a log message.");
                // Configure error reporting service.
                app.UseGoogleExceptionLogging();
                // Configure trace service.
                app.UseGoogleTrace();
    
                app.UseStaticFiles();
    
                app.UseMvc(routes =>
                {
                    routes.MapRoute(
                        name: "default",
                        template: "{controller=Home}/{action=Index}/{id?}");
                });
            }
    

O Trace agora está configurado para criar amostras das solicitações HTTP recebidas pelo seu aplicativo. Para iniciar traces do seu aplicativo, consulte Aplicativo de amostra para o ASP.NET Core.

Como executar no Google Cloud Platform

Não será preciso fornecer credenciais de autenticação para instâncias em execução no Google Cloud Platform se o escopo de acesso da API Stackdriver Trace estiver ativado nessa instância. No entanto, recomendamos configurar o escopo de acesso mais amplo possível para sua instância e, em seguida, usar o Cloud Identity and Access Management para restringir o acesso.

Ambiente flexível do App Engine

No ambiente flexível do App Engine, o escopo de acesso da API Stackdriver Trace é ativado por padrão e a biblioteca de cliente do Google.Cloud.Diagnostics.AspNetCore pode ser usada sem fornecer credenciais ou um código do projeto.

Ambiente padrão do App Engine

Atualmente, o padrão do Google App Engine não é compatível com o C #.

GKE

Para usar o Trace no GKE, adicione o escopo de acesso do OAuth trace.append ao criar um cluster.

Para criar um cluster usando o gcloud, faça o seguinte:

  1. Atualize o gcloud para a versão mais recente (opcional):
    gcloud components update
  2. Defina o código do projeto padrão:
    gcloud config set project [PROJECT_ID]
  3. Se você estiver trabalhando com clusters zonais, defina a zona de computação padrão:
    gcloud config set compute/zone [COMPUTE_ZONE]
  4. Se você estiver trabalhando com clusters regionais, defina a região de computação padrão:
    gcloud config set compute/region [COMPUTE_REGION]
  5. Execute o comando de criação:
    gcloud container clusters create example-cluster-name --scopes https://www.googleapis.com/auth/trace.append

Para informações mais detalhadas sobre como criar um cluster, consulte Como criar um cluster.

Compute Engine

Para as instâncias do Compute Engine, é preciso ativar explicitamente o escopo de acesso trace.append da API Stackdriver Trace para cada instância de VM. Ao criar uma nova instância por meio do Console do Google Cloud Platform, selecione os seguintes valores na seção Identidade e acesso à API do painel Criar uma instância:

  1. Selecione a Conta de serviço padrão do Compute Engine como a Conta de serviço
  2. Selecione Permitir acesso completo a todas as APIs do Cloud em Escopos de acesso.

Para usar algo diferente da conta de serviço padrão do Compute Engine, consulte as seções Como criar e ativar contas de serviços para instâncias e Como executar localmente e em outro local. O importante é que a conta de serviço que você usa tenha o papel de agente do Cloud Trace.

Como executar localmente e em outro local

Para executar o Stackdriver Trace fora do GCP, forneça o código do projeto do GCP e as credenciais da conta de serviço apropriadas diretamente à biblioteca de cliente do Google.Cloud.Diagnostics.AspNetCore. Sua conta de serviço precisa conter o papel de agente do Cloud Trace. Para mais instruções, consulte Como criar uma conta de serviço.

Código do projeto

Defina o código do projeto que é passado para a biblioteca de cliente do Google.Cloud.Diagnostics.AspNetCore. Para isso, insira o código do projeto no arquivo appsettings.json conforme descrito na seção Como configurar a biblioteca de cliente.

Credenciais

As bibliotecas de cliente do GCP usam o Application Default Credentials (ADC, na sigla em inglês) para localizar as credenciais do aplicativo. Forneça as credenciais à biblioteca de cliente do Google.Cloud.Diagnostics.AspNetCore ao definir a variável de ambiente do GOOGLE_APPLICATION_CREDENTIALS:

Linux/macOS

    export GOOGLE_APPLICATION_CREDENTIALS=path-to-your-service-accounts-private-key

Windows

    set GOOGLE_APPLICATION_CREDENTIALS=path-to-your-service-accounts-private-key

PowerShell:

    $env:GOOGLE_APPLICATION_CREDENTIALS="path-to-your-service-accounts-private-key"

Amostra do aplicativo do Trace para o ASP.NET core

public class TraceController : Controller
{
    // This incoming HTTP request should be captured by Trace.
    public IActionResult Index([FromServices] IManagedTracer tracer)
    {
        using (tracer.StartSpan(nameof(Index)))
        {
            var traceHeaderHandler = new TraceHeaderPropagatingHandler(() => tracer);
            var response = TraceOutgoing(traceHeaderHandler);
            ViewData["text"] = response.Result.ToString();
            return View();
        }
    }

    // This outgoing HTTP request should be captured by Trace.
    public async Task<string> TraceOutgoing(TraceHeaderPropagatingHandler traceHeaderHandler)
    {
        // Add a handler to trace outgoing requests and to propagate the trace header.
        using (var httpClient = new HttpClient(traceHeaderHandler))
        {
            string url = "https://www.googleapis.com/discovery/v1/apis";
            using (var response = await httpClient.GetAsync(url))
            {
                return await response.Content.ReadAsStringAsync();
            }
        }
    }
}

Como visualizar os traces

Após a implantação, você pode consultar os traces no visualizador de traces do Console do GCP.

Acesse a página do visualizador do Trace

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Precisa de ajuda? Acesse nossa página de suporte.