Configura Cloud Trace para C# ASP.NET Core

Puedes habilitar Trace en las aplicaciones de ASP.NET Core mediante la biblioteca cliente Google.Cloud.Diagnostics.AspNetCore para C#.

Instala la biblioteca cliente

Sigue las instrucciones de nuget.org para instalar la biblioteca.

Configura la biblioteca cliente

Después de haber instalado la biblioteca cliente Google.Cloud.Diagnostics.AspNetCore, completa los siguientes pasos para habilitar y configurar Trace:

  1. Agrega las siguientes directivas using al archivo Startup.cs de tu aplicación:

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

  2. Para establecer el ID del proyecto de Google Cloud que se pasa a la biblioteca cliente Google.Cloud.Diagnostics.AspNetCore, ingresa el ID del proyecto de Google Cloud en el archivo appsettings.json. En el siguiente ejemplo, reemplaza YOUR-GOOGLE-PROJECT-ID por el ID o el número de tu proyecto de Google Cloud:

    {
      "Stackdriver": {
        "ProjectId": "YOUR-GOOGLE-PROJECT-ID",
        "ServiceName": "NAME-OF-YOUR-SERVICE",
        "Version": "VERSION-OF-YOUR-SERVICE"
      }
    }
  3. Crea un archivo nuevo llamado StackdriverOptions.cs con el siguiente contenido:

    /*
     * Copyright (c) 2017 Google Inc.
     *
     * Licensed under the Apache License, Version 2.0 (the "License"); you may not
     * use this file except in compliance with the License. You may obtain a copy of
     * the License at
     *
     * http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
     * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
     * License for the specific language governing permissions and limitations under
     * the License.
     */
    
    namespace Stackdriver
    {
        public class StackdriverOptions
        {
            public string ProjectId { get; set; }
            public string ServiceName { get; set; }
            public string Version { get; set; }
        }
    }
    
  4. Crea o edita el método ConfigureServices en el archivo Startup.cs de tu aplicación para que llame a 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();
            }
    

  5. Edita el método Configure en el archivo Startup.cs de la aplicación y llama app.UseGoogleTrace() antes de llamar a app.UseStaticFile() y app.UseMvc().

            public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
            {
                // Configure logging service.
                loggerFactory.AddGoogle(app.ApplicationServices, 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?}");
                });
            }
    

Trace ya está configurado para realizar el muestreo de las solicitudes HTTP que recibe tu aplicación. A fin de iniciar los seguimientos desde tu aplicación, consulta la aplicación de ejemplo para ASP.NET Core.

Configura tu plataforma

Puedes usar Cloud Trace en Google Cloud y otras plataformas.

Ejecuta en Google Cloud

Cuando tu aplicación se ejecuta en Google Cloud, no necesitas proporcionar credenciales de autenticación en formato de una cuenta de servicio a la biblioteca cliente. Sin embargo, debes asegurarte de que tu Google Cloud Platform tenga habilitado el nivel de acceso a la API de Cloud Trace.

Para las siguientes opciones de configuración, la configuración predeterminada del permiso de acceso habilita la API de Cloud Trace:

  • Entorno flexible de App Engine
  • Google Kubernetes Engine (GKE)

  • Compute Engine

Si usas alcances de acceso personalizados, debes asegurarte de que el alcance de acceso a la API de Cloud Trace esté habilitado. Para los usuarios gcloud, especifica los niveles de acceso con la marca --scopes y, además, incluye el nivel de acceso trace.append de la API de Cloud Trace. Por ejemplo, para crear un clúster de GKE solo con la API de Cloud Trace habilitada, haz lo siguiente:

gcloud container clusters create example-cluster-name --scopes=https://www.googleapis.com/auth/trace.append

Ejecuta de forma local y en otros lugares

Si tu aplicación se ejecuta fuera de Google Cloud, debes proporcionar credenciales de autenticación con el formato de una cuenta de servicio a la biblioteca cliente. La cuenta de servicio debe contener la función de agente de Cloud Trace. Para obtener más instrucciones, consulta Cómo crear una cuenta de servicio.

Las bibliotecas cliente de Google Cloud usan credenciales predeterminadas de la aplicación (ADC) para encontrar las credenciales de tu aplicación. Proporciona estas credenciales mediante la configuración de la variable de entorno 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"

Aplicación de Tracce de muestra para 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();
            }
        }
    }
}

Cómo ver los seguimientos

Después de la implementación, puedes ver los seguimientos en el visor de seguimientos de Cloud Console.

Ir a la página del Lector de seguimiento

Soluciona problemas

Para obtener información sobre cómo solucionar problemas con Cloud Trace, ve a la página de solución de problemas.

Recursos