using OpenTelemetry.Exporter; using OpenTelemetry.Logs; using OpenTelemetry.Metrics; using OpenTelemetry.Resources; using OpenTelemetry.Trace; using System.Diagnostics.Metrics; var builder = WebApplication.CreateBuilder(args); // 1. Define Resource Information var resourceBuilder = ResourceBuilder.CreateDefault() .AddService("SampleApi"); // 2. Configuration Variables var oltpApiKey = "mc3G63K2j5ZOEsi0AjMojLTXm1KEZFctzIIjSwDiTGut8qGSkPuWwxGP1RbscJUo"; var oltpAddress = "http://aspire-dashboard-service.aspire.svc.cluster.local:18889"; builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); builder.Services.AddHealthChecks(); // 3. Configure OpenTelemetry Logging builder.Logging.AddOpenTelemetry(logging => { logging.SetResourceBuilder(resourceBuilder); logging.AddOtlpExporter(opt => { opt.Endpoint = new Uri(oltpAddress); opt.Protocol = OtlpExportProtocol.Grpc; opt.Headers = $"x-otlp-api-key={oltpApiKey}"; }); }); // 4. Configure Tracing and Metrics (Merged into one registration) builder.Services.AddOpenTelemetry() .WithTracing(tracing => tracing .SetResourceBuilder(resourceBuilder) .AddAspNetCoreInstrumentation() .AddHttpClientInstrumentation() .AddOtlpExporter(opt => { opt.Endpoint = new Uri(oltpAddress); opt.Protocol = OtlpExportProtocol.Grpc; opt.Headers = $"x-otlp-api-key={oltpApiKey}"; })) .WithMetrics(metrics => metrics .SetResourceBuilder(resourceBuilder) .AddMeter("SampleApi") // Register your custom meter here .AddAspNetCoreInstrumentation() .AddRuntimeInstrumentation() .AddOtlpExporter(opt => { opt.Endpoint = new Uri(oltpAddress); opt.Protocol = OtlpExportProtocol.Grpc; opt.Headers = $"x-otlp-api-key={oltpApiKey}"; })); var app = builder.Build(); // 5. Initialize your Meter for use in the app var myMeter = new Meter("SampleApi", "1.0.0"); var transactionCounter = myMeter.CreateCounter("CustomCounter"); if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.MapHealthChecks("/health"); app.UseRouting(); app.UseAuthorization(); app.MapControllers(); app.Run();