チュートリアル: .NETアプリケーションでGitLab可観測性を使用する
この機能の利用可否は、機能フラグによって制御されます。
このチュートリアルでは、GitLab可観測性の機能を使用して、.NET Coreアプリケーションを作成、構成、インストルメント、および監視する方法を学習します。
はじめる前
このチュートリアルを進めるには、以下が必要です:
- GitLab.comまたはSelf-ManagedインスタンスのGitLab Ultimateサブスクリプション
- .NETのローカルインストール
- Git、.NET、およびOpenTelemetryのコア概念に関する基本的な知識
GitLabプロジェクトを作成
まず、GitLabプロジェクトと対応するアクセストークンを作成します。
- 左側のサイドバーの上部で、新規作成( )を選択し、新規プロジェクト/リポジトリを選択します。
- 空のプロジェクトの作成を選択します。
- プロジェクトの詳細を入力してください。
- プロジェクト名フィールドに、
dotnet-O11y-tutorialと入力します。
- プロジェクト名フィールドに、
- プロジェクトを作成を選択します。
dotnet-O11y-tutorialプロジェクトの左側のサイドバーで、設定 > アクセストークンを選択します。apiスコープとデベロッパーロールでアクセストークンを作成します。トークンの値を安全な場所に保管してください。これは後で必要になります。
.NETアプリケーションを作成
次に、計測できる.NET Webアプリケーションを作成します。このチュートリアルでは、動物の絵文字を返すおもちゃのアプリケーションを作成しましょう。
dotnet-O11y-tutorialプロジェクトをクローンし、cdをdotnet-O11y-tutorialディレクトリに移動します。Webアプリケーションをビルドには、以下を実行します:
dotnet new web次のコマンドを実行して、動物コントローラーファイルを作成します:
touch AnimalController.csAnimalController.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"); } } }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" } } } }Program.csの内容を以下に置き換えます:var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); var app = builder.Build(); app.MapControllers(); app.Run();アプリケーションをビルドして実行します:
dotnet build dotnet runhttp://localhost:8080/animals/dogにアクセスすると、絵文字🐶が表示されます。
アプリケーションをインストルメント化
必要な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 --prereleaseProgram.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();プロジェクトIDを見つけます:
dotnet-O11y-tutorialプロジェクトの概要ページの右上隅で、アクション( )を選択します。- Copy project ID(プロジェクトIDをコピー)を選択します。コピーしたIDを後で使用するために保存します。
インストルメンテーションでアプリケーションを構成します。Self-Managedインスタンスを使用している場合は、
gitlab.comをSelf-Managedインスタンスのホスト名に置き換えてください。アプリケーションを実行します。
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 runhttp://localhost:8080/animals/dogにアクセスして、いくつかのイベントを生成します。
GitLabで情報を表示
テストプロジェクトからエクスポートされた情報を表示するには:
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
- モニタリングを選択し、次にログ、メトリクス、またはトレースを選択します。