正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

チュートリアル: .NETアプリケーションでGitLab可観測性を使用する

この機能の利用可否は、機能フラグによって制御されます。

このチュートリアルでは、GitLab可観測性の機能を使用して、.NET Coreアプリケーションを作成、構成、インストルメント、および監視する方法を学習します。

はじめる前

このチュートリアルを進めるには、以下が必要です:

  • GitLab.comまたはSelf-ManagedインスタンスのGitLab Ultimateサブスクリプション
  • .NETのローカルインストール
  • Git、.NET、およびOpenTelemetryのコア概念に関する基本的な知識

GitLabプロジェクトを作成

まず、GitLabプロジェクトと対応するアクセストークンを作成します。

  1. 左側のサイドバーの上部で、新規作成 plus )を選択し、新規プロジェクト/リポジトリを選択します。
  2. 空のプロジェクトの作成を選択します。
  3. プロジェクトの詳細を入力してください。
    • プロジェクト名フィールドに、dotnet-O11y-tutorialと入力します。
  4. プロジェクトを作成を選択します。
  5. dotnet-O11y-tutorialプロジェクトの左側のサイドバーで、設定 > アクセストークンを選択します。
  6. apiスコープとデベロッパーロールでアクセストークンを作成します。トークンの値を安全な場所に保管してください。これは後で必要になります。

.NETアプリケーションを作成

次に、計測できる.NET Webアプリケーションを作成します。このチュートリアルでは、動物の絵文字を返すおもちゃのアプリケーションを作成しましょう。

  1. dotnet-O11y-tutorialプロジェクトをクローンし、cddotnet-O11y-tutorialディレクトリに移動します。

  2. Webアプリケーションをビルドには、以下を実行します:

    dotnet new web
  3. 次のコマンドを実行して、動物コントローラーファイルを作成します:

    touch AnimalController.cs
  4. AnimalController.csの内容を以下に置き換えます:

    using Microsoft.AspNetCore.Mvc;
    
    public class AnimalsController : ControllerBase
    {
        private Dictionary<string, string> animals = new Dictionary<string, string>
        {
            { "dog", "🐶" },
            { "cat", "🐱" },
            { "fish", "🐟" }
        };
    
        private ILogger<AnimalsController> logger;
    
        public AnimalsController(ILogger<AnimalsController> logger)
        {
            this.logger = logger;
        }
    
        [HttpGet("/animals/{animal}")]
        public IActionResult GetAnimal([FromRoute] string animal)
        {
            if (animals.TryGetValue(animal, out string? emoji))
            {
                logger.LogInformation("Animal emoji found for: {animal}", animal);
                return Ok(emoji);
            }
            else
            {
                logger.LogInformation("Could not find animal emoji for: {animal}", animal);
                return NotFound("Animal not found");
            }
        }
    }
  5. PropertiesディレクトリにあるlaunchSettings.jsonの内容を以下に置き換えます:

    {
      "$schema": "http://json.schemastore.org/launchsettings.json",
      "profiles": {
        "http": {
          "commandName": "Project",
          "dotnetRunMessages": true,
          "launchBrowser": true,
          "applicationUrl": "http://localhost:8080",
          "environmentVariables": {
            "ASPNETCORE_ENVIRONMENT": "Development"
          }
        }
      }
    }
  6. Program.csの内容を以下に置き換えます:

    var builder = WebApplication.CreateBuilder(args);
    
    builder.Services.AddControllers();
    
    var app = builder.Build();
    
    app.MapControllers();
    
    app.Run();
  7. アプリケーションをビルドして実行します:

    dotnet build
    dotnet run
  8. http://localhost:8080/animals/dogにアクセスすると、絵文字🐶が表示されます。

アプリケーションをインストルメント化

  1. 必要なOpenTelemetryパッケージをインストールします:

    dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol
    dotnet add package OpenTelemetry.Extensions.Hosting
    dotnet add package OpenTelemetry.Exporter.Console
    dotnet add package OpenTelemetry.Instrumentation.AspNetCore --prerelease
    dotnet add package OpenTelemetry.Instrumentation.Http --prerelease
  2. Program.csの内容を以下に置き換えます:

    using OpenTelemetry.Exporter;
    using OpenTelemetry.Logs;
    using OpenTelemetry.Metrics;
    using OpenTelemetry.Resources;
    using OpenTelemetry.Trace;
    
    var builder = WebApplication.CreateBuilder(args);
    
    const string serviceName = "dotnet-O11y-tutorial";
    
    string otelHeaders = Environment.GetEnvironmentVariable("OTEL_EXPORTER_OTLP_HEADERS") ?? "empty";
    string otelBaseUrl = Environment.GetEnvironmentVariable("OTEL_EXPORTER_OTLP_ENDPOINT") ?? "empty";
    
    builder.Services.AddOpenTelemetry()
        .ConfigureResource(resource => resource.AddService(serviceName))
        .WithTracing(tracing => tracing
            .AddSource(serviceName)
            .AddHttpClientInstrumentation()
            .AddAspNetCoreInstrumentation()
            .AddOtlpExporter(options =>
            {
                options.Endpoint = new Uri(otelBaseUrl + "/traces");
                options.Headers = otelHeaders;
                options.Protocol = OtlpExportProtocol.HttpProtobuf;
            }))
        .WithMetrics(metrics => metrics
            .AddMeter(serviceName)
            .AddHttpClientInstrumentation()
            .AddAspNetCoreInstrumentation()
            .AddOtlpExporter(options =>
            {
                options.Endpoint = new Uri(otelBaseUrl + "/metrics");
                options.Headers = otelHeaders;
                options.Protocol = OtlpExportProtocol.HttpProtobuf;
            }))
        .WithLogging(logging => logging
            .AddConsoleExporter()
            .AddOtlpExporter(options =>
            {
                options.Endpoint = new Uri(otelBaseUrl + "/logs");
                options.Headers = otelHeaders;
                options.Protocol = OtlpExportProtocol.HttpProtobuf;
            }));
    
    builder.Services.AddControllers();
    
    var app = builder.Build();
    
    app.MapControllers();
    
    app.Run();
  3. プロジェクトIDを見つけます:

    1. dotnet-O11y-tutorialプロジェクトの概要ページの右上隅で、アクション ellipsis_v )を選択します。
    2. Copy project ID(プロジェクトIDをコピー)を選択します。コピーしたIDを後で使用するために保存します。
  4. インストルメンテーションでアプリケーションを構成します。Self-Managedインスタンスを使用している場合は、gitlab.comをSelf-Managedインスタンスのホスト名に置き換えてください。

  5. アプリケーションを実行します。

    env OTEL_EXPORTER_OTLP_ENDPOINT="https://gitlab.com/api/v4/projects/{{PROJECT_ID}}/observability" \
    OTEL_EXPORTER_OTLP_HEADERS="PRIVATE-TOKEN={{ACCESS_TOKEN}}" \
    OTEL_LOG_LEVEL="debug" \
    dotnet run
  6. http://localhost:8080/animals/dogにアクセスして、いくつかのイベントを生成します。

GitLabで情報を表示

テストプロジェクトからエクスポートされた情報を表示するには:

  1. 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
  2. モニタリングを選択し、次にログメトリクス、またはトレースを選択します。