튜토리얼: .NET 애플리케이션과 GitLab Observability 사용하기
이 튜토리얼에서는 GitLab Observability 기능을 사용하여 .NET Core 애플리케이션을 만들고 구성, 계기화 및 모니터링하는 방법을 배웁니다.
시작하기 전에
이 튜토리얼을 따라가려면 다음이 있어야 합니다:
- GitLab.com이나 GitLab self-managed의 GitLab Ultimate 구독
- .NET의 로컬 설치
- Git, .NET 및 OpenTelemetry의 핵심 개념에 대한 기본 지식
GitLab 프로젝트 생성
먼저 GitLab 프로젝트와 해당 액세스 토큰을 만듭니다.
- 왼쪽 사이드바에서 위쪽에 있는 새로 만들기 () 및 새 프로젝트/저장소 만들기를 선택합니다.
- 빈 프로젝트 만들기를 선택합니다.
- 프로젝트 세부정보를 입력합니다.
-
프로젝트 이름 필드에
dotnet-O11y-tutorial
을 입력합니다.
-
프로젝트 이름 필드에
- 프로젝트 만들기를 선택합니다.
-
dotnet-O11y-tutorial
프로젝트에서 왼쪽 사이드바에서 설정 > 액세스 토큰을 선택합니다. -
api
스코프와 개발자 역할을 가진 액세스 토큰을 만듭니다. 토큰 값을 안전한 곳에 저장합니다. 나중에 필요합니다.
.NET 애플리케이션 만들기
다음으로 계기화할 .NET 웹 애플리케이션을 만듭니다. 이 튜토리얼에서는 동물 이모지를 반환하는 장난감 응용프로그램을 만들어보겠습니다.
-
dotnet-O11y-tutorial
프로젝트를 복제하고dotnet-O11y-tutorial
디렉토리로 이동합니다. -
다음을 실행하여 웹 애플리케이션을 만듭니다:
dotnet new web
-
다음을 실행하여 동물 컨트롤러 파일을 만듭니다:
touch AnimalController.cs
-
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"); } } }
-
launchSettings.json
의 내용을 다음과 같이 대체합니다(Properties
하위 디렉토리 내):{ "$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 run
-
http://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 --prerelease
-
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();
- 프로젝트 ID를 찾습니다:
-
dotnet-O11y-tutorial
프로젝트 개요 페이지에서 오른쪽 상단에 있는 작업 ()을 선택합니다. - 프로젝트 ID 복사를 선택합니다. 나중에 사용할 수 있도록 복사한 ID를 저장합니다.
-
- 계기화로 애플리케이션을 구성합니다.
자체 관리형 GitLab을 사용하는 경우
gitlab.com
을 자체 관리형 인스턴스 호스트명으로 대체합니다. -
애플리케이션을 실행합니다.
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
- 이벤트를 생성하려면
http://localhost:8080/animals/dog
을 방문합니다.
GitLab에서 정보 보기
테스트 프로젝트에서 내보낸 정보를 보려면:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 모니터를 선택한 다음 로그, 메트릭, 또는 추적 중 하나를 선택합니다.