feat: add OpenTelemetry support for monitoring
All checks were successful
Build and Deploy Docker Container / build-and-deploy (push) Successful in 4m21s

This commit is contained in:
2025-08-05 16:57:45 +03:00
parent 785ab935c6
commit e439183645
2 changed files with 37 additions and 0 deletions

View File

@@ -20,7 +20,11 @@ using Mirea.Api.Endpoint.Configuration.Validation;
using Mirea.Api.Endpoint.Configuration.Validation.Validators;
using Mirea.Api.Security.Services;
using OfficeOpenXml;
using OpenTelemetry.Exporter;
using OpenTelemetry.Metrics;
using OpenTelemetry.Resources;
using System;
using System.Collections.Generic;
using System.IO;
namespace Mirea.Api.Endpoint;
@@ -118,6 +122,34 @@ public class Program
builder.Services.AddDataProtection()
.PersistKeysToFileSystem(new DirectoryInfo(PathBuilder.Combine("DataProtection")));
builder.Host.ConfigureServices((context, services) =>
{
var config = context.Configuration.Get<GeneralConfig>()?.LogSettings;
if (string.IsNullOrEmpty(config?.OpenTelemetryEndpoint)
|| string.IsNullOrEmpty(config.OpenTelemetryServiceName))
return;
services.AddOpenTelemetry()
.WithMetrics(metrics =>
{
metrics
.AddAspNetCoreInstrumentation()
.AddRuntimeInstrumentation()
.SetResourceBuilder(ResourceBuilder.CreateDefault()
.AddService(serviceName: config.OpenTelemetryServiceName)
.AddAttributes([
new KeyValuePair<string, object>("deployment.environment", context.HostingEnvironment.EnvironmentName),
new KeyValuePair<string, object>("host.name", Environment.MachineName)
]))
.AddOtlpExporter(options =>
{
options.Endpoint = new Uri(config.OpenTelemetryEndpoint);
options.Protocol = OtlpExportProtocol.Grpc;
});
});
});
var app = builder.Build();
app.UseForwardedHeaders();