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

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

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


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

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

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

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

  2. appsettings.json ファイルに Google Cloud プロジェクト ID を入力して、Google.Cloud.Diagnostics.AspNetCore クライアント ライブラリに渡す Google Cloud プロジェクト ID を設定します。次のサンプルでは、YOUR-GOOGLE-PROJECT-ID を実際の Google Cloud プロジェクト ID または番号に置き換えます。

      "Stackdriver": {
        "ProjectId": "YOUR-GOOGLE-PROJECT-ID",
        "ServiceName": "NAME-OF-YOUR-SERVICE",
        "Version": "VERSION-OF-YOUR-SERVICE"
  3. 次の内容のファイルを StackdriverOptions.cs という名前で新規に作成します。

     * 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. アプリケーションの Startup.cs ファイルで ConfigureServices メソッドを作成または編集して、services.AddGoogleTrace() を呼び出すようにします。

            public void ConfigureServices(IServiceCollection services)
                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.

  5. アプリケーションの Startup.cs ファイルで Configure メソッドを編集して、app.UseStaticFile()app.UseMvc() を呼び出す前app.UseGoogleTrace() を呼び出します。

            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.
                // Configure trace service.
                app.UseMvc(routes =>
                        name: "default",
                        template: "{controller=Home}/{action=Index}/{id?}");

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


Cloud Trace は Google Cloud と他のプラットフォームで使用できます。

Google Cloud での実行

アプリケーションが Google Cloud で実行されている場合、認証情報をサービス アカウントの形式でクライアント ライブラリに提供する必要はありません。ただし、Google Cloud Platform で Cloud Trace API のアクセス スコープが有効になっている必要があります。

次の構成では、デフォルトのアクセス スコープ設定により Cloud Trace API が有効化されます。

  • App Engine フレキシブル環境
  • Google Kubernetes Engine(GKE)

  • Compute Engine

カスタム アクセス スコープを使用する場合は、Cloud Trace API のアクセス スコープを有効にする必要があります。gcloud ユーザーの場合は、--scopes フラグを使用してアクセス スコープを指定し、trace.append Cloud Trace API アクセス スコープを含めます。たとえば、Cloud Trace API のみを有効にして GKE クラスタを作成するには、次のようにします。

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


アプリケーションが Google Cloud の外部で実行されている場合は、認証情報をサービス アカウントの形式でクライアント ライブラリに提供する必要があります。サービス アカウントには Cloud Trace エージェント ロールが含まれている必要があります。手順については、サービス アカウントの作成をご覧ください。

Google Cloud クライアント ライブラリは、アプリケーションのデフォルト認証情報(ADC)を使用してアプリケーションの認証情報を検索します。GOOGLE_APPLICATION_CREDENTIALS 環境変数を設定することにより、これらの認証情報を指定します。

Linux / macOS

    export GOOGLE_APPLICATION_CREDENTIALS=path-to-your-service-accounts-private-key


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


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

Trace Viewer のページに移動


Cloud Trace に関する問題のトラブルシューティングについては、トラブルシューティング ページをご覧ください。