C# ASP.NET Core 用の Stackdriver Trace の設定

は、

ASP.NET Core アプリケーションで ASP.NET 用の Trace を有効にするには、C# 用の Google.Cloud.Diagnostics.AspNetCore クライアント ライブラリを使用します。

クライアント ライブラリのインストール

Visual Studio で Google.Cloud.Diagnostics.AspNetCore クライアント ライブラリを使用するには、次の操作を行います。

  1. Visual Studio でソリューションを右クリックして、[ソリューションの NuGet パッケージの管理] を選択します。

  2. [プレリリースを含む] チェックボックスを選択します。

  3. Google.Cloud.Diagnostics.AspNetCore という名前のパッケージを検索して、インストールします。

詳しくは、Google.Cloud.Diagnostics.AspNetCore をご覧ください。

クライアント ライブラリの構成

Google.Cloud.Diagnostics.AspNetCore クライアント ライブラリがインストールされたら、次の手順で Trace を有効にして構成します。

  1. アプリケーションの Startup.cs ファイルに次の using ディレクティブを追加します。

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

  2. ウェブ アプリケーションの appsettings.json ファイルに次のコードを追加し、YOUR-GOOGLE-PROJECT-ID をプロジェクト ID またはプロジェクト番号に置き換えます。

    {
      "Stackdriver": {
        "ProjectId": "YOUR-GOOGLE-PROJECT-ID",
        "ServiceName": "NAME-OF-YOUR-SERVICE",
        "Version": "VERSION-OF-YOUR-SERVICE"
      }
    }
  3. アプリケーションの Startup.cs ファイルで ConfigureServices メソッドを作成または編集し、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. アプリケーションの Startup.cs ファイル内で Configure メソッドを編集し、app.UseGoogleTrace() を呼び出します。この呼び出しは app.UseStaticFile()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?}");
                });
            }
    

アプリケーションから受信した HTTP リクエストをサンプリングするように Trace が構成されました。アプリケーションからトレースを開始する方法については、ASP.NET Core 用のサンプル アプリケーションをご覧ください。

Google Cloud Platform での実行

Google Cloud Platform 上で実行されているインスタンスで Stackdriver Trace API アクセス スコープが有効になっている場合は、そのインスタンス用の認証情報を提供する必要はありません。ただし、インスタンスに対して可能な限り広いアクセス スコープを設定してから、Cloud Identity and Access Management を使用して、アクセスを制限することをおすすめします。

App Engine フレキシブル環境

App Engine フレキシブル環境では、デフォルトで Stackdriver Trace API アクセス スコープが有効になっており、認証情報やプロジェクト ID を提供せずに Google.Cloud.Diagnostics.AspNetCore クライアント ライブラリを使用できます。

App Engine スタンダード環境

App Engine スタンダード環境では現在、C# はサポートされていません。

GKE

GKE で、クラスタの作成時に trace.append OAuth アクセス スコープを追加します。

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

クラスタの作成後に、そのアクセス スコープを変更することはできません。

Compute Engine

Compute Engine VM インスタンスの場合は、各 VM インスタンスに Stackdriver Trace API アクセス スコープ trace.append を明示的に有効にする必要があります。Google Cloud Platform Console から新しいインスタンスを作成する場合は、[インスタンスの作成] パネルの [ID と API へのアクセス] セクションで次の値を選択します。

  1. [サービス アカウント] には [Compute Engine のデフォルトのサービス アカウント] を選択します
  2. [アクセス スコープ] には [すべての Cloud API に完全アクセス権を許可] を選択します

Compute Engine のデフォルト以外のサービス アカウントを使用するには、インスタンスのサービス アカウントの作成と有効化と、ローカルやその他の場所での実行をご覧ください。重要なのは、使用するサービス アカウントに Cloud Trace Agent の役割があることです。

ローカルやその他の場所での実行

Stackdriver Trace を GCP 以外で実行するには、GCP プロジェクト ID と該当するサービス アカウントの認証情報を Google.Cloud.Diagnostics.AspNetCore クライアント ライブラリに直接提供する必要があります。詳細については、アプリケーションの認証情報を指定するをご覧ください。

プロジェクト ID

Google.Cloud.Diagnostics.AspNetCore クライアント ライブラリに提供するプロジェクト ID を設定するには、appsettings.json ファイルにプロジェクト ID を入力します。詳しくは、クライアント ライブラリの構成をご覧ください。

認証情報

GCP クライアント ライブラリでは、アプリケーションのデフォルト認証情報(ADC)を使用してアプリケーションの認証情報を検出します。認証情報を Google.Cloud.Diagnostics.AspNetCore クライアント ライブラリに提供するには、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"

ASP.NET Core 用の Trace サンプル アプリケーション

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();
            }
        }
    }
}

トレースの表示

デプロイ後、GCP Console Trace Viewer でトレースを表示できます。

Trace Viewer のページに移動

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。