Configuración de Stackdriver Trace para C# ASP.NET Core

Stackdriver Trace se puede habilitar en las aplicaciones de ASP.NET Core que utilizan las bibliotecas cliente de Google.Cloud.Diagnostics.AspNetCore para C#.

Instala la biblioteca cliente

Para usar la biblioteca cliente de Google.Cloud.Diagnostics.AspNetCore en Visual Studio, sigue estos pasos:

  1. Haz clic derecho en tu solución de Visual Studio y selecciona Administrar paquetes de NuGet para la solución.

  2. Selecciona la casilla de verificación Incluir lanzamiento anticipado.

  3. Busca y, luego, instala el paquete denominado Google.Cloud.Diagnostics.AspNetCore.

Cómo configurar la biblioteca cliente

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

  1. Agrega el siguiente código con las instrucciones del archivo Startup.cs de tu aplicación:

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

  2. Agrega este código al archivo appsettings.json de tu aplicación web y actualiza YOUR-GOOGLE-PROJECT-ID para que sea el número o ID del proyecto:

    {
      "Stackdriver": {
        "ProjectId": "YOUR-GOOGLE-PROJECT-ID",
        "ServiceName": "NAME-OF-YOUR-SERVICE",
        "Version": "VERSION-OF-YOUR-SERVICE"
      }
    }
  3. 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();
            }
    

  4. Edita el método Configure en el archivo Startup.cs de tu aplicación y llama a 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(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.

Ejecución en Google Cloud Platform

No es necesario que proporciones credenciales de autenticación para las instancias que se ejecutan en Google Cloud Platform, siempre y cuando el nivel de acceso a la API de Stackdriver Trace esté habilitado en esa instancia. Sin embargo, recomendamos establecer el nivel de acceso más amplio posible para la instancia y, luego, usar Cloud Identity and Access Management a fin de restringir el acceso.

Entorno flexible de App Engine

En el entorno flexible de App Engine, el nivel de acceso a la API de Stackdriver Trace está habilitado de forma predeterminada, y la biblioteca cliente de Google.Cloud.Diagnostics.AspNetCore se puede usar sin proporcionar credenciales o un ID del proyecto.

Entorno estándar de App Engine

Actualmente, C# no es compatible con el entorno estándar de App Engine.

GKE

En GKE, agrega el nivel de acceso de OAuth trace.append cuando crees el clúster:

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

No puedes cambiar los niveles de acceso del clúster una vez creado.

Compute Engine

Para las instancias de VM de Compute Engine, debes habilitar explícitamente el nivel de acceso a la API de Stackdriver Trace trace.append para cada instancia de VM. Cuando crees una instancia nueva con Google Cloud Platform Console, selecciona los siguientes valores en la sección Identidad y acceso a la API en el panel Crear una instancia:

  1. Selecciona Cuenta de servicio predeterminada de Compute Engine para Cuenta de servicio.
  2. Selecciona Permitir el acceso total a todas las API de Cloud para Niveles de servicio.

Para usar una cuenta que no sea la cuenta de servicio predeterminada de Compute Engine, consulta las secciones Cómo crear y habilitar cuentas de servicio para instancias y Cómo ejecutar de manera local y en otro lugar. Lo importante es que la cuenta de servicio que uses tenga la función de Agente de Cloud Trace.

Cómo ejecutar de manera local y en otro lugar

Para ejecutar Stackdriver Trace fuera de GCP, debes proporcionar tu ID del proyecto de GCP y las credenciales de la cuenta de servicio correspondiente directamente en la biblioteca cliente de Google.Cloud.Diagnostics.AspNetCore. Si deseas obtener más información, consulta Cómo proporcionar credenciales a la aplicación.

ID del proyecto

Configura el ID del proyecto que se pasa a la biblioteca cliente de Google.Cloud.Diagnostics.AspNetCore ingresando tu ID del proyecto en el archivo appsettings.json, como se describió anteriormente en el paso n.º 2 de la sección Cómo configurar la biblioteca cliente.

Credenciales

Las bibliotecas cliente de GCP usan las Credenciales predeterminadas de la aplicación (ADC) para encontrar las credenciales de tu aplicación. Las credenciales para la biblioteca cliente de Google.Cloud.Diagnostics.AspNetCore se proporcionan 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"

Muestra de la aplicación de Stackdriver Trace 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 lector de seguimiento de GCP Console.

Ir a la página del Lector de seguimiento

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Si necesitas ayuda, visita nuestra página de asistencia.