Cloud Trace für C# ASP.NET Core einrichten

Sie können Trace für ASP.NET Core-Anwendungen aktivieren, indem Sie die Google.Cloud.Diagnostics.AspNetCore-Clientbibliothek für C# verwenden.

Clientbibliothek installieren

Folgen Sie der Anleitung unter nuget.org, um die Bibliothek zu installieren.

Clientbibliothek konfigurieren

Führen Sie nach der Installation der Google.Cloud.Diagnostics.AspNetCore-Clientbibliothek die folgenden Schritte aus, um Trace zu aktivieren und zu konfigurieren:

  1. Fügen Sie der Datei Startup.cs Ihrer Anwendung die folgenden using-Anweisungen hinzu:

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

  2. Legen Sie die Google Cloud-Projekt-ID fest, die an die Google.Cloud.Diagnostics.AspNetCore-Clientbibliothek übergeben wird, indem Sie Ihre Google Cloud-Projekt-ID in die Datei appsettings.json eingeben. Ersetzen Sie im folgenden Beispiel YOUR-GOOGLE-PROJECT-ID durch Ihre Google Cloud-Projekt-ID oder -Nummer:

    {
      "Stackdriver": {
        "ProjectId": "YOUR-GOOGLE-PROJECT-ID",
        "ServiceName": "NAME-OF-YOUR-SERVICE",
        "Version": "VERSION-OF-YOUR-SERVICE"
      }
    }
  3. Erstellen Sie eine Datei mit dem Namen StackdriverOptions.cs und dem folgendem Inhalt:

    /*
     * 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. Erstellen oder bearbeiten Sie die Methode ConfigureServices in der Datei Startup.cs Ihrer Anwendung, sodass sie services.AddGoogleTrace() aufruft:

            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. Bearbeiten Sie die Methode Configure in der Datei Startup.cs Ihrer Anwendung und rufen Sie app.UseGoogleTrace() auf, bevor Sie app.UseStaticFile() und app.UseMvc() aufrufen.

            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 ist jetzt so konfiguriert, dass Stichproben der von Ihrer Anwendung empfangenen HTTP-Anfragen genommen werden. Informationen zum Initiieren von Traces in Ihrer Anwendung finden Sie unter Beispielanwendung für ASP.NET Core.

Ihre Plattform konfigurieren

Sie können Cloud Trace in Google Cloud und auf anderen Plattformen verwenden.

In Google Cloud ausführen

Wenn Ihre Anwendung in Google Cloud ausgeführt wird, müssen Sie der Clientbibliothek keine Anmeldedaten in Form eines Dienstkontos bereitstellen. Sie müssen jedoch gewährleisten, dass auf Ihrer Google Cloud Platform der Zugriffsbereich der Cloud Trace API aktiviert ist.

Für die folgenden Konfigurationen wird die Cloud Trace API über die Standardeinstellungen für den Zugriffsbereich aktiviert:

  • Flexible App Engine-Umgebung
  • Google Kubernetes Engine (GKE)

  • Compute Engine

Wenn Sie benutzerdefinierte Zugriffsbereiche verwenden, müssen Sie gewährleisten, dass der Zugriffsbereich der Cloud Trace API aktiviert ist. Geben Sie für gcloud-Nutzer Zugriffsbereiche mit dem Flag --scopes an und fügen Sie den Cloud Trace API-Zugriffsbereich trace.append hinzu. So erstellen Sie beispielsweise einen GKE-Cluster, für den nur die Cloud Trace API aktiviert ist:

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

Lokal und extern ausführen

Wenn Ihre Anwendung außerhalb von Google Cloud ausgeführt wird, müssen Sie Authentifizierungsdaten in Form eines Dienstkontos für die Clientbibliothek angeben. Das Dienstkonto muss die Rolle Cloud Trace-Agent enthalten. Informationen dazu finden Sie unter Dienstkonto erstellen.

Google Cloud-Clientbibliotheken verwenden Standardanmeldedaten für Anwendungen, um die Anmeldedaten Ihrer Anwendung zu finden. Sie geben diese Anmeldedaten an, indem Sie die Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS festlegen:

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"

Trace-Beispielanwendung für 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();
            }
        }
    }
}

Traces ansehen

Nach der Bereitstellung können Sie die Traces im Trace Viewer der Cloud Console anzeigen.

Trace-Anzeige öffnen

Fehlerbehebung

Informationen zur Behebung von Problemen mit Cloud Trace finden Sie auf der Seite zur Fehlerbehebung.

Ressourcen