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

は、

Stackdriver Trace は、Google.Cloud.Diagnostics.AspNet クライアント ライブラリ(C# 用)を使用する ASP.NET Framework アプリケーションで使用できます。

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

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

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

  2. [プレリリースを含める] チェックボックスをオンにします。

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

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

Google.Cloud.Diagnostics.AspNet がインストールされたら、トレースを有効にして構成するために、以下の 3 つの手順を実施します。

  1. 次の XML 要素をアプリケーションの Web.config ファイルの <appSettings> セクションに追加し、YOUR-GOOGLE-PROJECT-ID をご使用のプロジェクトの ID または番号に更新します。

    <add key="projectId" value="YOUR-GOOGLE-PROJECT-ID" />
  2. アプリケーションの Global.asax.cs ファイルに、次の using ディレクティブを追加します。

    using Google.Cloud.Diagnostics.AspNet;
    using Google.Cloud.Diagnostics.Common;
    
  3. Global.asax.cs ファイルの WebApiApplication クラスに、次の Init コードブロックを追加してトレースを初期化します。

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

    これで、アプリケーションで受信した HTTP リクエストのサンプリングが自動的にトレースされるようになりました。また、以下の ASP.NET Framework 用のサンプル アプリケーションに示されているように、アプリケーションからトレースを開始することもできます。

Google Cloud Platform での実行

Google.Cloud.Diagnostics.AspNet クライアント ライブラリは、Stackdriver Trace API アクセス スコープが VM インスタンスで有効にされている限り、Google Cloud Platform で実行されているそのインスタンスの認証情報を手動で提供しなくても動作します。

App Engine

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

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

Kubernetes Engine

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

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

Compute Engine

Google Compute Engine のインスタンスでは、各インスタンスの trace.append Stackdriver Trace API アクセス スコープを明示的に有効にする必要があります。Google Cloud Platform Console から新しいインスタンスを作成する場合は、[ID と API へのアクセス] の下でこれを行うことができます。Compute Engine のデフォルト サービス アカウントを使用し、[アクセス スコープ] の [すべての Cloud API に完全アクセス権を許可] を選択します。

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

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

アプリケーションがローカル、オンプレミス、または別のクラウド プロバイダなど、Google Cloud Platform 以外で実行されている場合も、プロジェクト ID と認証情報を Google.Cloud.Diagnostics.AspNet クライアント ライブラリに提供すれば、Stackdriver Trace を使用できます。

プロジェクト ID

プロジェクト ID を Google.Cloud.Diagnostics.AspNet クライアント ライブラリに提供するには、クライアント ライブラリの構成セクションのステップ 1 で説明したように、プロジェクト ID を Web.config ファイルに入力します。

認証情報

Google Cloud Platform クライアント ライブラリでは、アプリケーションの認証情報を確認するために、アプリケーションのデフォルト認証情報(ADC)という戦略を使用しています。認証情報を Google.Cloud.Diagnostics.AspNet クライアント ライブラリに提供するために、GOOGLE_APPLICATION_CREDENTIALS 環境変数を設定できます。

Linux / 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"

詳細については、アプリケーションの認証情報を指定するをご覧ください。

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

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

トレースの表示

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

Trace Viewer のページに移動

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

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

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