Stackdriver Trace instellen voor C# ASP.NET Core

Stackdriver Trace kan worden ingeschakeld voor ASP.NET Core-apps met de Google.Cloud.Diagnostics.AspNetCore-clientbibliotheek voor C#.

De clientbibliotheek installeren

Wanneer u de Google.Cloud.Diagnostics.AspNetCore-clientbibliotheek in Visual Studio wilt gebruiken, doet u het volgende:

  1. Klik met de rechtermuisknop op uw oplossing in Visual Studio en selecteer Manage Nuget packages for solution.

  2. Schakel het selectievakje Include prerelease in.

  3. Zoek en installeer het pakket met de naam Google.Cloud.Diagnostics.AspNetCore.

De clientbibliotheek configureren

Zodra de Google.Cloud.Diagnostics.AspNetCore-clientbibliotheek is geïnstalleerd, voert u de volgende 4 stappen uit om tracering in te schakelen en te configureren:

  1. Voeg aan de hand van de richtlijnen het volgende toe aan het bestand Startup.cs van uw app:

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

  2. Voeg deze code toe aan het bestand appsettings.json van uw web-app en update YOUR-GOOGLE-PROJECT-ID als uw project-ID of -nummer:

    {
      "Stackdriver": {
        "ProjectId": "YOUR-GOOGLE-PROJECT-ID",
        "ServiceName": "NAME-OF-YOUR-SERVICE",
        "Version": "VERSION-OF-YOUR-SERVICE"
      }
    }

  3. Maak of bewerk de methode ConfigureServices in het bestand Startup.cs van uw app, zodat deze services.AddGoogleTrace() aanroept:

            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. Bewerk de methode Configure in het bestand Startup.cs van uw app en roep app.UseGoogleTrace() aan voordat u app.UseStaticFile() en app.UseMvc() aanroept.

            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?}");
                });
            }
    

Een steekproef van de HTTP-verzoeken die door uw app zijn ontvangen, wordt nu automatisch getraceerd. U kunt ook traceringen met uw app starten, zoals hieronder wordt gedemonstreerd in de voorbeeld-app voor de ASP.NET Core.

Uitgevoerd op Google Cloud Platform

De Google.Cloud.Diagnostics.AspNetCore-clientbibliotheek zou moeten werken zonder handmatige invoer van verificatiegegevens voor instanties die op Google Cloud Platform worden uitgevoerd, mits het toegangsbereik van de Stackdriver Trace API voor de instantie is ingeschakeld.

App Engine

In de flexibele omgeving van Google App Engine is het toegangsbereik van de Stackdriver Trace API standaard ingeschakeld. De Google.Cloud.Diagnostics.-clientbibliotheek van AspNetCore kan worden gebruikt zonder dat u inloggegevens of een project-ID hoeft op te geven.

In de standaardomgeving van Google App Engine wordt C# momenteel niet ondersteund.

Kubernetes Engine

Voeg op Google Kubernetes Engine het OAuth-bereik trace.append toe bij het maken van het cluster:

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

Compute Engine

Voor instanties van Google Compute Engine moet u het Stackdriver Trace API-toegangsbereik trace.append expliciet inschakelen voor elke instantie. Wanneer u via de Google Cloud Platform Console een nieuwe instantie maakt, kunt u dit doen onder 'Identiteit en API-toegang': gebruik het standaardaccount van Compute Engine en selecteer 'Volledige toegang tot alle Cloud API's toestaan' onder 'Toegangsbereik'.

Als u iets anders dan het standaardserviceaccount van Compute Engine wilt gebruiken, raadpleegt u de documentatie voor het maken en inschakelen van serviceaccounts voor instanties en het gedeelte Elders uitvoeren hieronder. Het belangrijkste is dat het serviceaccount dat u gebruikt de rol Cloud Trace Agent heeft.

Lokaal en elders uitvoeren

Als uw app buiten Google Cloud Platform wordt uitgevoerd, zoals op locatie of op een andere cloudprovider, kunt u nog steeds Stackdriver Trace gebruiken, op voorwaarde dat u een project-ID en inloggegevens aan de Google.Cloud.Diagnostics.AspNetCore-clientbibliotheek verstrekt.

Project-ID

Stel de project-ID in die wordt doorgegeven aan de Google.Cloud.Diagnostics.AspNetCore-clientbibliotheek door uw project-ID in te voeren in het bestand appsettings.json, zoals hierboven beschreven in stap 2 van het gedeelte De clientbibliotheek configureren.

Gegevens

Clientbibliotheken van Google Cloud Platform gebruiken een strategie met de naam Application Default Credentials (ADC) om de inloggegevens van uw app te vinden. U kunt inloggegevens verstrekken aan de Google.Cloud.Diagnostics.AspNetCore-clientbibliotheek door de omgevingsvariabele GOOGLE_APPLICATION_CREDENTIALS in te stellen:

Linux of macOS

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"

Zie Inloggegevens voor uw app verstrekken voor meer informatie.

Voorbeeld van Stackdriver Trace-app voor 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();
            }
        }
    }
}

De traceringen bekijken

Na de implementatie kunt u de traceringen in de Trace Viewer van de GCP-console bekijken.

Ga naar de pagina Trace Viewer.