Configurar Stackdriver Trace para ASP.NET en C#

Stackdriver Trace se puede habilitar para aplicaciones de Framework de ASP.NET con la biblioteca cliente de Google.Cloud.Diagnostics.AspNet para C#.

Instalar la biblioteca cliente

Si quieres usar la biblioteca cliente de Google.Cloud.Diagnostics.AspNet en Visual Studio, debes hacer lo siguiente:

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

  2. Selecciona la casilla Incluir prelanzamiento.

  3. Busca e instala el paquete llamado Google.Cloud.Diagnostics.AspNet.

Configurar la biblioteca cliente

Una vez que Google.Cloud.Diagnostics.AspNet está instalado, completa los 3 pasos siguientes para habilitar y configurar el rastreo:

  1. Agrega el siguiente elemento XML a la sección <appSettings> del archivo Web.config de la aplicación y actualiza YOUR-GOOGLE-PROJECT-ID para que sea el ID o número de proyecto:

    <add key="projectId" value="YOUR-GOOGLE-PROJECT-ID" />

  2. Agrega la siguiente directiva de uso al archivo Global.asax.cs de la aplicación:

    using Google.Cloud.Diagnostics.AspNet;
    using Google.Cloud.Diagnostics.Common;
    

  3. En la clase WebApiApplication del archivo Global.asax.cs, agrega el siguiente bloque de código Init para inicializar el rastreo:

    public override void Init()
    {
        string projectId = ConfigurationManager.AppSettings["projectId"];
        // ...
        base.Init();
        TraceConfiguration traceConfig = TraceConfiguration
            .Create(bufferOptions: BufferOptions.NoBuffer());
        CloudTrace.Initialize(this, projectId, traceConfig);
    }
    

    Ahora se rastreará automáticamente una muestra de las peticiones HTTP recibidas por la aplicación. También se pueden iniciar rastreos desde la aplicación como se demuestra a continuación en la aplicación de muestra para ASP.NET Framework.

Ejecutar en Google Cloud Platform

La biblioteca cliente Google.Cloud.Diagnostics.AspNet debería funcionar sin la necesidad de proporcionar manualmente credenciales de autenticación para las instancias de VM que se ejecutan en Google Cloud Platform, siempre que el alcance de acceso de la API de Stackdriver Trace esté habilitado en esa instancia.

App Engine

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

En el entorno estándar de Google App Engine, no se admite C# actualmente.

Kubernetes Engine

En Google Kubernetes Engine, agrega el alcance de acceso de OAuth trace.append al crear el clúster:

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

Compute Engine

Para las instancias de Google Compute Engine, se debe habilitar explícitamente el alcance de acceso de la API de Stackdriver Trace trace.append para cada instancia. Al crear una nueva instancia a través de la consola de Google Cloud Platform, puedes hacerlo en Acceso a la API e identidad. Usa la cuenta de servicio predeterminada de Compute Engine y selecciona "Permitir acceso completo a todas las API de Cloud" en los alcances de Acceso.

Para usar algo que no sea la cuenta de servicio predeterminada de Compute Engine, consulta los documentos para Crear y habilitar cuentas de servicio para instancias y la sección Ejecutar en otro lugar a continuación. Lo importante es que la cuenta de servicio que usas tenga la función de Agente de Cloud Trace.

Ejecutar localmente y en otro lugar

Si la aplicación se ejecuta fuera de Google Cloud Platform, por ejemplo: localmente, en las instalaciones o en otro proveedor de la nube, aún se puede usar Stackdriver Trace, siempre que se proporcionen credenciales e ID del proyecto a la biblioteca cliente Google.Cloud.Diagnostics.AspNet.

ID del proyecto

Proporciona una ID del proyecto a la biblioteca cliente Google.Cloud.Diagnostics.AspNet y escribe la ID del proyecto en el archivo Web.config como se describió anteriormente en el paso # 1 de la sección Configuración de la biblioteca cliente.

Credenciales

Las bibliotecas cliente de Google Cloud Platform usan una estrategia llamada Credenciales de aplicación predeterminadas (ADC) para encontrar las credenciales de la aplicación. Puedes proporcionar credenciales a la biblioteca cliente Google.Cloud.Diagnostics.AspNet y configurar la variable de entorno GOOGLE_APPLICATION_CREDENTIALS:

Linux o Mac OS X

    export GOOGLE_APPLICATION_CREDENTIALS=path-to-private-key-for-your-service-account

Windows

    set GOOGLE_APPLICATION_CREDENTIALS=path-to-private-key-for-your-service-account

Powershell:

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

Si quieres obtener más información, consulta la sección Proporcionar credenciales a la aplicación.

Aplicación Stackdriver Trace de muestra para ASP.NET Framework

public class TraceController : Controller
{
    // This incoming HTTP request should be captured by Trace.
    public ActionResult Index()
    {
        using (CloudTrace.Tracer.StartSpan(nameof(Index)))
        {
            string url = "https://www.googleapis.com/discovery/v1/apis";
            var response = TraceOutgoing(url);
            ViewData["text"] = response.Result.ToString();
            return View();
        }
    }

    public async Task<string> TraceOutgoing(string url)
    {
        // Manually trace a specific operation.
        using (CloudTrace.Tracer.StartSpan("get-api-discovery-doc"))
        {
            using (var httpClient = new HttpClient())
            {
                // This outgoing HTTP request should be captured by Trace.
                using (var response = await httpClient.GetAsync(url)
                    .ConfigureAwait(false))
                {
                    return await response.Content.ReadAsStringAsync();
                }
            }
        }
    }
}

Ver las trazas

Después de la implementación, se puede ver las trazas en el Visor de trazas de la consola de GCP.

Ir a la página del Visor de trazas