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

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

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

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

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

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

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

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

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

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

  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 リクエストをサンプリングするように Trace が構成されました。アプリケーションからトレースを開始する方法については、ASP.NET Framework のサンプル アプリケーションをご覧ください。

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.AspNet クライアント ライブラリを使用できます。

App Engine スタンダード環境

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

GKE

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

gcloud を使ってクラスタを作成するには、次の手順に従います。

  1. (省略可)gcloud を最新バージョンに更新します。
    gcloud components update
  2. デフォルトのプロジェクト ID を設定します。
    gcloud config set project [PROJECT_ID]
  3. ゾーンクラスタを使用する場合は、デフォルトのコンピューティング ゾーンを設定します。
    gcloud config set compute/zone [COMPUTE_ZONE]
  4. リージョン クラスタを使用する場合は、デフォルトのコンピューティング リージョンを設定します。
    gcloud config set compute/region [COMPUTE_REGION]
  5. create コマンドを発行します。
    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.AspNet クライアント ライブラリに直接提供する必要があります。サービス アカウントには Cloud Trace エージェントの役割が含まれている必要があります。手順については、サービス アカウントの作成をご覧ください。

プロジェクト ID

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

認証情報

GCP クライアント ライブラリでは、アプリケーションのデフォルト認証情報(ADC)を使用してアプリケーションの認証情報を検出します。認証情報を Google.Cloud.Diagnostics.AspNet クライアント ライブラリに提供するには、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 Framework 用の 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 のサポートページをご覧ください。