튜토리얼: .NET 애플리케이션에 GitLab Observability 사용하기
이 튜토리얼에서는 GitLab Observability 기능을 사용하여 .NET Core 애플리케이션을 생성, 구성, 계측 및 모니터링하는 방법을 알아봅니다.
시작하기 전에
이 튜토리얼을 따라 하려면 다음이 필요합니다:
- GitLab.com 또는 GitLab 셀프 관리용 GitLab Ultimate 구독
- .NET의 로컬 설치
- Git, .NET 및 OpenTelemetry의 기본 개념 대한 기본 지식
GitLab 프로젝트 생성
첫 번째로, GitLab 프로젝트와 해당 액세스 토큰을 생성합니다.
- 왼쪽 사이드바에서 상단의 Create new () 및 New project/repository를 선택합니다.
- Create blank project를 선택합니다.
- 프로젝트 세부 정보를 입력합니다.
-
Project name 필드에
dotnet-O11y-tutorial
을 입력합니다.
-
Project name 필드에
- Create project를 선택합니다.
-
dotnet-O11y-tutorial
프로젝트에서 왼쪽 사이드바에 있는 Settings > Access tokens를 선택합니다. -
api
범위와 Developer 역할로 액세스 토큰을 생성합니다. 토큰 값을 안전한 곳에 보관하세요.
나중에 필요합니다.
.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}", animal); return Ok(emoji); } else { logger.LogInformation("동물 이모지를 찾을 수 없습니다: {animal}", animal); return NotFound("동물을 찾을 수 없습니다"); } } }
-
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 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를 나중에 사용하도록 저장합니다.
-
-
계측으로 애플리케이션을 구성합니다.
Self-managed 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에서 정보 보기
테스트 프로젝트에서 내보낸 정보를 보려면:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 모니터를 선택한 다음 로그, 메트릭, 또는 트레이스를 선택합니다.