hizmet varsayılanlarını .NET.NET Aspire
Bu makalede, aşağıdaki uzantı yöntemleri kümesi olan .NET.NET Aspire hizmeti varsayılanları projesi hakkında bilgi ediniyorsunuz:
- telemetribağlayın sistem durumu denetimleri hizmet bulma uygulamanıza.
- Özelleştirilebilir ve genişletilebilir.
Buluta özel uygulamalar genellikle farklı ortamlarda güvenilir ve güvenli bir şekilde çalıştıklarından emin olmak için kapsamlı yapılandırmalar gerektirir. .NET Aspire, OpenTelemetry, sistem durumu denetimleri, ortam değişkenleri ve daha fazlası için yapılandırmaların yönetimini kolaylaştırmak için birçok yardımcı yöntem ve araç sağlar.
Hizmet varsayılanları projesini keşfetme
AddServiceDefaults
dosyasında Program.cs yöntemini çağırırsınız:
builder.AddServiceDefaults();
AddServiceDefaults
yöntemi aşağıdaki görevleri işler:
- OpenTelemetry ölçümlerini ve izlemeyi yapılandırıyor.
- Varsayılan sistem durumu denetimi uç noktalarını ekler.
- Hizmet bulma işlevselliği ekler.
- HttpClient hizmet bulma ile çalışacak şekilde yapılandırılır.
Daha fazla bilgi için yöntemiyle ilgili ayrıntılar için bkz. AddServiceDefaults
.
Önemli
.NET .NET Aspire hizmeti varsayılanları projesi, Extensions.cs dosyasını ve işlevselliğini paylaşmak için özel olarak tasarlanmıştır. Bu projeye diğer paylaşılan işlevleri veya modelleri eklemeyin. Bu amaçlar için geleneksel bir paylaşılan sınıf kitaplığı projesi kullanın.
Proje özellikleri
YourAppName.ServiceDefaults projesi
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsAspireSharedProject>true</IsAspireSharedProject>
</PropertyGroup>
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.Extensions.Http.Resilience" Version="9.3.0" />
<PackageReference Include="Microsoft.Extensions.ServiceDiscovery" Version="9.1.0" />
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.11.2" />
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.11.2" />
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.11.1" />
<PackageReference Include="OpenTelemetry.Instrumentation.Http" Version="1.11.1" />
<PackageReference Include="OpenTelemetry.Instrumentation.Runtime" Version="1.11.1" />
</ItemGroup>
</Project>
Hizmet, proje şablonunu varsayılan olarak FrameworkReference
Microsoft.AspNetCore.App
bağımlılığı uygular.
Bahşiş
Microsoft.AspNetCore.App
bağımlılığını almak istemiyorsanız, özel hizmet varsayılanları projesi oluşturabilirsiniz. Daha fazla bilgi için bkz. Özel hizmet varsayılanları.
IsAspireSharedProject
özelliği, bu projenin paylaşılan bir proje olduğunu gösteren true
olarak ayarlanır.
.NET Aspire araçları, bir .NET Aspire çözümüne eklenen diğer projeler için başvuru olarak bu projeyi kullanır. Yeni projeyi düzenleme için kaydettiğinizde, proje otomatik olarak YourAppName.ServiceDefaults
Sağlanan uzantı yöntemleri
YourAppName.ServiceDefaults projesinin
-
AddServiceDefaults
: Hizmet varsayılanları işlevselliğini ekler. -
ConfigureOpenTelemetry
: OpenTelemetry ölçümleri ve izlemeyi yapılandırılır. -
AddDefaultHealthChecks
: Varsayılan sistem durumu denetimi uç noktalarını ekler. -
MapDefaultEndpoints
: Sistem durumu denetimleri uç noktasını/health
ve canlılık uç noktasını/alive
ile eşler.
Hizmet varsayılanları işlevselliği ekleme
AddServiceDefaults
yöntemi, varsayılan yapılandırmaları aşağıdaki düşünceli işlevlerle tanımlar:
public static IHostApplicationBuilder AddServiceDefaults(
this IHostApplicationBuilder builder)
{
builder.ConfigureOpenTelemetry();
builder.AddDefaultHealthChecks();
builder.Services.AddServiceDiscovery();
builder.Services.ConfigureHttpClientDefaults(http =>
{
// Turn on resilience by default
http.AddStandardResilienceHandler();
// Turn on service discovery by default
http.AddServiceDiscovery();
});
// Uncomment the following to restrict the allowed schemes for service discovery.
// builder.Services.Configure<ServiceDiscoveryOptions>(options =>
// {
// options.AllowedSchemes = ["https"];
// });
return builder;
}
Önceki kod:
-
OpenTelemetry yöntemini çağırarak
ConfigureOpenTelemetry
ölçümleri ve izlemeyi yapılandırılır. -
AddDefaultHealthChecks
yöntemini çağırarak varsayılan sistem durumu denetimi uç noktalarını ekler. -
yöntemini çağırarak
AddServiceDiscovery
işlevselliğini ekler. -
HttpClient yöntemini çağırarak
ConfigureHttpClientDefaults
varsayılanlarını yapılandıran Dayanıklı HTTP uygulamaları oluşturma: Temel geliştirme desenleri: :-
AddStandardResilienceHandler
yöntemini çağırarak standart HTTP dayanıklılığı işleyicisini ekler. -
IHttpClientBuilder yöntemini çağırarak
UseServiceDiscovery
hizmet bulma kullanması gerektiğini belirtir.
-
- Yöntem zincirine izin vermek için
IHostApplicationBuilder
örneğini döndürür.
OpenTelemetry yapılandırması
Telemetri, buluta özel tüm uygulamaların kritik bir parçasıdır.
.NET Aspire, OpenTelemetry yöntemiyle yapılandırılan ConfigureOpenTelemetry
için bir dizi varsayılan değer sağlar:
public static IHostApplicationBuilder ConfigureOpenTelemetry(
this IHostApplicationBuilder builder)
{
builder.Logging.AddOpenTelemetry(logging =>
{
logging.IncludeFormattedMessage = true;
logging.IncludeScopes = true;
});
builder.Services.AddOpenTelemetry()
.WithMetrics(metrics =>
{
metrics.AddAspNetCoreInstrumentation()
.AddHttpClientInstrumentation()
.AddRuntimeInstrumentation();
})
.WithTracing(tracing =>
{
if (builder.Environment.IsDevelopment())
{
// We want to view all traces in development
tracing.SetSampler(new AlwaysOnSampler());
}
tracing.AddAspNetCoreInstrumentation()
// Uncomment the following line to enable gRPC instrumentation
// (requires the OpenTelemetry.Instrumentation.GrpcNetClient package)
//.AddGrpcClientInstrumentation()
.AddHttpClientInstrumentation();
});
builder.AddOpenTelemetryExporters();
return builder;
}
ConfigureOpenTelemetry
yöntemi:
- Biçimlendirilmiş iletileri ve kapsamları içerecek şekilde .NET.NET Aspire telemetri günlüğe kaydeder.
- Aşağıdakileri içeren OpenTelemetry ölçümler ve izleme ekler:
- Çalışma zamanı izleme ölçümleri.
- İzleme ölçümlerini ASP.NET Core.
- HttpClient izleme ölçümleri.
- Geliştirme ortamında, tüm izlemeleri görüntülemek için
AlwaysOnSampler
kullanılır. - ASP.NET Core, gRPC ve HTTP izleme için izleme ayrıntıları.
-
OpenTelemetryçağırarak
AddOpenTelemetryExporters
verenleri ekler.
AddOpenTelemetryExporters
yöntemi aşağıdaki gibi özel olarak tanımlanır:
private static IHostApplicationBuilder AddOpenTelemetryExporters(
this IHostApplicationBuilder builder)
{
var useOtlpExporter = !string.IsNullOrWhiteSpace(
builder.Configuration["OTEL_EXPORTER_OTLP_ENDPOINT"]);
if (useOtlpExporter)
{
builder.Services.Configure<OpenTelemetryLoggerOptions>(
logging => logging.AddOtlpExporter());
builder.Services.ConfigureOpenTelemetryMeterProvider(
metrics => metrics.AddOtlpExporter());
builder.Services.ConfigureOpenTelemetryTracerProvider(
tracing => tracing.AddOtlpExporter());
}
// Uncomment the following lines to enable the Prometheus exporter
// (requires the OpenTelemetry.Exporter.Prometheus.AspNetCore package)
// builder.Services.AddOpenTelemetry()
// .WithMetrics(metrics => metrics.AddPrometheusExporter());
// Uncomment the following lines to enable the Azure Monitor exporter
// (requires the Azure.Monitor.OpenTelemetry.AspNetCore package)
//if (!string.IsNullOrEmpty(
// builder.Configuration["APPLICATIONINSIGHTS_CONNECTION_STRING"]))
//{
// builder.Services.AddOpenTelemetry()
// .UseAzureMonitor();
//}
return builder;
}
AddOpenTelemetryExporters
yöntemi, aşağıdaki koşullara göre OpenTelemetry verenleri ekler:
-
OTEL_EXPORTER_OTLP_ENDPOINT
ortam değişkeni ayarlanırsa, OpenTelemetry veren eklenir. - İsteğe bağlı olarak, .NET Aspire hizmet varsayılanlarının tüketicileri Prometheus ihracatçısını veya Azure İzleyici vermecisini etkinleştirmek için bazı kodların açıklamasını açabilir.
Daha fazla bilgi için bkz. telemetri
Sistem durumu denetimleri yapılandırması
Sistem durumu denetimleri, uygulamanızın hazır olma durumunu değerlendirmek için çeşitli araçlar ve sistemler tarafından kullanılır.
.NET
.NET Aspire, sistem durumu denetimleri için AddDefaultHealthChecks
yöntemiyle yapılandırılan bir dizi fikirli varsayılan sağlar:
public static IHostApplicationBuilder AddDefaultHealthChecks(
this IHostApplicationBuilder builder)
{
builder.Services.AddHealthChecks()
// Add a default liveness check to ensure app is responsive
.AddCheck("self", () => HealthCheckResult.Healthy(), ["live"]);
return builder;
}
AddDefaultHealthChecks
yöntemi, uygulamanın duyarlı olduğundan emin olmak için varsayılan bir canlılık denetimi ekler.
AddHealthChecks çağrısı HealthCheckServicekaydeder. Daha fazla bilgi için bkz.
Web uygulaması sistem durumu denetimleri yapılandırması
Bir web uygulamasında sistem durumu denetimlerini kullanıma açmak için .NET.NET Aspire çözüm içinde başvurulmakta olan projenin türünü otomatik olarak belirler ve MapDefaultEndpoints
uygun çağrıyı ekler:
public static WebApplication MapDefaultEndpoints(this WebApplication app)
{
// Uncomment the following line to enable the Prometheus endpoint
// (requires the OpenTelemetry.Exporter.Prometheus.AspNetCore package)
// app.MapPrometheusScrapingEndpoint();
// Adding health checks endpoints to applications in non-development
// environments has security implications.
// See https://aka.ms/dotnet/aspire/healthchecks for details before
// enabling these endpoints in non-development environments.
if (app.Environment.IsDevelopment())
{
// All health checks must pass for app to be considered ready to
// accept traffic after starting
app.MapHealthChecks("/health");
// Only health checks tagged with the "live" tag must pass for
// app to be considered alive
app.MapHealthChecks("/alive", new HealthCheckOptions
{
Predicate = r => r.Tags.Contains("live")
});
}
return app;
}
MapDefaultEndpoints
yöntemi:
- Tüketicilerin Prometheus uç noktasını etkinleştirmek için isteğe bağlı olarak bazı kodları açıklamadan kaldırmasına olanak tanır.
- Sistem durumu denetimleri uç noktasını
/health
ile eşler. - Canlılık uç noktasını, sistem durumu denetimi etiketinin
/alive
içerdiğilive
rotaya eşler.
Daha fazla bilgi için bkz.
Özel hizmet varsayılanları
Proje şablonu tarafından sağlanan varsayılan hizmet yapılandırması gereksinimleriniz için yeterli değilse, kendi hizmet varsayılanları projenizi oluşturma seçeneğiniz vardır. Bu, özellikle çalışan projesi veya WinForms projesi gibi tüketen projeniz FrameworkReference
Microsoft.AspNetCore.App
bağımlılığına sahip olamaz veya istemezse yararlıdır.
Bunu yapmak için yeni bir .NET 9.0 sınıf kitaplığı projesi oluşturun ve proje dosyasına gerekli bağımlılıkları ekleyin, aşağıdaki örneği göz önünde bulundurun:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Library</OutputType>
<TargetFramework>net9.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" />
<PackageReference Include="Microsoft.Extensions.ServiceDiscovery" />
<PackageReference Include="Microsoft.Extensions.Http.Resilience" />
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" />
<PackageReference Include="OpenTelemetry.Extensions.Hosting" />
<PackageReference Include="OpenTelemetry.Instrumentation.Http" />
<PackageReference Include="OpenTelemetry.Instrumentation.Runtime" />
</ItemGroup>
</Project>
Ardından uygulama varsayılanlarını yapılandırmak için gerekli yöntemleri içeren bir uzantı sınıfı oluşturun:
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using OpenTelemetry.Logs;
using OpenTelemetry.Metrics;
using OpenTelemetry.Trace;
namespace Microsoft.Extensions.Hosting;
public static class AppDefaultsExtensions
{
public static IHostApplicationBuilder AddAppDefaults(
this IHostApplicationBuilder builder)
{
builder.ConfigureAppOpenTelemetry();
builder.Services.AddServiceDiscovery();
builder.Services.ConfigureHttpClientDefaults(http =>
{
// Turn on resilience by default
http.AddStandardResilienceHandler();
// Turn on service discovery by default
http.AddServiceDiscovery();
});
return builder;
}
public static IHostApplicationBuilder ConfigureAppOpenTelemetry(
this IHostApplicationBuilder builder)
{
builder.Logging.AddOpenTelemetry(logging =>
{
logging.IncludeFormattedMessage = true;
logging.IncludeScopes = true;
});
builder.Services.AddOpenTelemetry()
.WithMetrics(static metrics =>
{
metrics.AddRuntimeInstrumentation();
})
.WithTracing(tracing =>
{
if (builder.Environment.IsDevelopment())
{
// We want to view all traces in development
tracing.SetSampler(new AlwaysOnSampler());
}
tracing.AddGrpcClientInstrumentation()
.AddHttpClientInstrumentation();
});
builder.AddOpenTelemetryExporters();
return builder;
}
private static IHostApplicationBuilder AddOpenTelemetryExporters(
this IHostApplicationBuilder builder)
{
var useOtlpExporter =
!string.IsNullOrWhiteSpace(
builder.Configuration["OTEL_EXPORTER_OTLP_ENDPOINT"]);
if (useOtlpExporter)
{
builder.Services.Configure<OpenTelemetryLoggerOptions>(
logging => logging.AddOtlpExporter());
builder.Services.ConfigureOpenTelemetryMeterProvider(
metrics => metrics.AddOtlpExporter());
builder.Services.ConfigureOpenTelemetryTracerProvider(
tracing => tracing.AddOtlpExporter());
}
return builder;
}
}
Bu yalnızca bir örnektir ve AppDefaultsExtensions
sınıfını özel gereksinimlerinizi karşılayacak şekilde özelleştirebilirsiniz.
Sonraki adımlar
Bu kod, .NET.NET Aspire Starter Uygulaması şablonundan türetilir ve başlangıç noktası olarak tasarlanmıştır. Gereksinimlerinizi karşılamak için gerekli olduğunu kabul ettiğiniz şekilde bu kodu değiştirebilirsiniz. Hizmet varsayılanlarının proje ve işlevselliğinin bir .NET.NET Aspire çözümündeki tüm proje kaynaklarına otomatik olarak uygulandığını bilmek önemlidir.
'da Hizmeti bulma - .NET .NET Aspire SDK
- şablonları
'da sistem durumu denetimlerini - telemetri
- Dayanıklı HTTP uygulamaları oluşturma: Temel geliştirme desenleri
.NET Aspire