výchozí hodnoty služby .NET.NET Aspire
V tomto článku se dozvíte o výchozím projektu služby .NET.NET Aspire, což je sada metod rozšíření, které:
- Připojte
telemetrii ,kontroly stavu , zjišťování služby. - Jsou přizpůsobitelné a rozšiřitelné.
Aplikace nativní pro cloud často vyžadují rozsáhlé konfigurace, aby se zajistilo, že budou spolehlivě a bezpečně fungovat v různých prostředích. .NET Aspire poskytuje mnoho pomocných metod a nástrojů, které zjednodušují správu konfigurací pro OpenTelemetry, kontroly stavu, proměnné prostředí a další.
Prozkoumání výchozího projektu služby
Když zařazení do orchestrace .NET.NET Aspire nebo vytvoříte nový projekt .NET.NET Aspire, přidá se do vašeho řešení projekt YourAppName.ServiceDefaults.csproj. Například při vytváření rozhraní API voláte metodu AddServiceDefaults
v souboru Program.cs vašich aplikací:
builder.AddServiceDefaults();
Metoda AddServiceDefaults
zpracovává následující úlohy:
- Konfiguruje metriky a trasování OpenTelemetry.
- Přidá výchozí koncové body kontroly stavu.
- Přidá funkci zjišťování služeb.
- Konfiguruje HttpClient pro práci se zjišťováním služeb.
Další informace najdete v tématu Poskytnuté rozšiřující metody podrobnosti o metodě AddServiceDefaults
.
Důležitý
Výchozí projekt služby .NET.NET Aspire je určený speciálně pro sdílení souboru Extensions.cs a jeho funkcí. Do tohoto projektu nezahrnujte další sdílené funkce ani modely. Pro tyto účely použijte běžný projekt knihovny sdílených tříd.
Charakteristiky projektu
Projekt YourAppName.ServiceDefaults je knihovna .NET 9.0, která obsahuje následující kód XML:
<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.0.0" />
<PackageReference Include="Microsoft.Extensions.ServiceDiscovery" Version="9.0.0" />
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.10.0" />
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.10.0" />
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.10.1" />
<PackageReference Include="OpenTelemetry.Instrumentation.Http" Version="1.10.0" />
<PackageReference Include="OpenTelemetry.Instrumentation.Runtime" Version="1.10.0" />
</ItemGroup>
</Project>
Výchozí šablona projektu služby ukládá FrameworkReference
závislost na Microsoft.AspNetCore.App
.
Spropitné
Pokud nechcete využívat závislost na Microsoft.AspNetCore.App
, můžete vytvořit vlastní projekt výchozích služeb. Další informace najdete v tématu Výchozí nastavení vlastní služby.
Vlastnost IsAspireSharedProject
je nastavena na true
, což označuje, že tento projekt je sdílený projekt. Nástroje .NET Aspire tento projekt používají jako referenci pro jiné projekty přidané do .NET Aspire řešení. Když přidáte nový projekt pro orchestraci, automaticky odkazuje na YourAppName.ServiceDefaults projektu a aktualizuje Program.cs soubor tak, aby volal metodu AddServiceDefaults
.
Poskytované rozšiřující metody
Projekt YourAppName.ServiceDefaults zpřístupňuje jeden soubor Extensions.cs, který obsahuje několik metod rozšíření se stanoviskem:
-
AddServiceDefaults
: Přidá výchozí funkce služby. -
ConfigureOpenTelemetry
: Konfiguruje metriky a trasování OpenTelemetry. -
AddDefaultHealthChecks
: Přidá výchozí koncové body kontroly stavu. -
MapDefaultEndpoints
: Mapuje koncový bod kontroly stavu na/health
a koncový bod aktivity na/alive
.
Přidání výchozích funkcí služby
Metoda AddServiceDefaults
definuje výchozí konfigurace s následujícími názornými funkcemi:
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;
}
Předchozí kód:
- Nakonfiguruje OpenTelemetry metriky a trasování voláním metody
ConfigureOpenTelemetry
. - Přidá výchozí koncové body kontroly stavu voláním metody
AddDefaultHealthChecks
. - Přidá funkci zjišťování služby voláním metody
AddServiceDiscovery
. - Konfiguruje výchozí nastavení HttpClient voláním metody
ConfigureHttpClientDefaults
, která je založená na Vytváření odolných aplikací HTTP: Klíčové vývojové vzory:- Přidá standardní obslužnou rutinu odolnosti PROTOKOLU HTTP voláním metody
AddStandardResilienceHandler
. - Určuje, že IHttpClientBuilder by měla používat zjišťování služby voláním metody
UseServiceDiscovery
.
- Přidá standardní obslužnou rutinu odolnosti PROTOKOLU HTTP voláním metody
- Vrátí instanci
IHostApplicationBuilder
, která umožňuje řetězení metod.
konfigurace OpenTelemetry
Telemetrie je důležitou součástí jakékoli aplikace nativní pro cloud.
.NET Aspire poskytuje sadu výchozích hodnot pro OpenTelemetry, které jsou nakonfigurované pomocí metody ConfigureOpenTelemetry
:
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;
}
Metoda ConfigureOpenTelemetry
:
- Přidá .NET.NET Aspire telemetrii protokolování, aby zahrnovalo formátované zprávy a obory.
- Přidá metriky OpenTelemetry a trasování, které zahrnují:
- Metriky instrumentace modulu runtime
- metriky instrumentace ASP.NET Core.
- Metriky instrumentace HttpClient
- Ve vývojovém prostředí se
AlwaysOnSampler
používá k zobrazení všech trasování. - Podrobnosti o trasování pro ASP.NET Core, gRPC a instrumentaci HTTP
- Přidává OpenTelemetry vývozci voláním
AddOpenTelemetryExporters
.
Metoda AddOpenTelemetryExporters
je definována soukromě následujícím způsobem:
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;
}
Metoda AddOpenTelemetryExporters
přidává OpenTelemetry vývozce na základě následujících podmínek:
- Pokud je nastavena proměnná prostředí
OTEL_EXPORTER_OTLP_ENDPOINT
, přidá se OpenTelemetry vývozce. - Volitelně můžou spotřebitelé výchozích hodnot služby .NET Aspire zrušit komentář, aby umožnili vývozci prometheus nebo vývozce služby Azure Monitor.
Další informace najdete v tématu .NET.NET Aspire telemetrie.
Konfigurace kontrol stavu
Kontroly stavu používají různé nástroje a systémy k posouzení připravenosti vaší aplikace.
.NET
.NET Aspire poskytuje sadu výchozích hodnot pro kontroly stavu, které jsou nakonfigurované metodou AddDefaultHealthChecks
:
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;
}
Metoda AddDefaultHealthChecks
přidá výchozí kontrolu aktivity, která zajistí, že aplikace reaguje. Volání AddHealthChecks zaregistruje HealthCheckService. Další informace najdete v tématu .NET.NET Aspire kontroly stavu.
Konfigurace kontrol stavu webové aplikace
Pokud chcete zveřejnit kontroly stavu ve webové aplikaci, .NET.NET Aspire automaticky určí typ projektu, na který se odkazuje v rámci řešení, a přidá příslušné volání MapDefaultEndpoints
:
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;
}
Metoda MapDefaultEndpoints
:
- Umožňuje uživatelům volitelně zrušit komentář k určitému kódu, aby povolili koncový bod Prometheus.
- Mapuje koncový bod kontroly stavu na
/health
. - Mapuje koncový bod aktivity na
/alive
trasu, kde značka kontroly stavu obsahujelive
.
Další informace najdete v tématu .NET.NET Aspire kontroly stavu.
Výchozí hodnoty vlastních služeb
Pokud výchozí konfigurace služby poskytovaná šablonou projektu nestačí pro vaše potřeby, máte možnost vytvořit vlastní projekt výchozích služeb. To je užitečné zejména v případě, že váš projekt využívající pracovní proces nebo projekt WinForms nemůže nebo nechce mít FrameworkReference
závislost na Microsoft.AspNetCore.App
.
Uděláte to tak, že vytvoříte nový projekt knihovny tříd .NET 9.0 a přidáte do souboru projektu potřebné závislosti, zvažte následující příklad:
<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>
Pak vytvořte třídu rozšíření, která obsahuje nezbytné metody konfigurace výchozích hodnot aplikace:
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;
}
}
Toto je pouze příklad a můžete přizpůsobit AppDefaultsExtensions
třídu tak, aby vyhovovala vašim konkrétním potřebám.
Další kroky
Tento kód je odvozen ze šablony .NET.NET Aspire Starter Application a je určen jako výchozí bod. Tento kód můžete upravit, ale považujete to za nezbytné pro splnění vašich potřeb. Je důležité vědět, že výchozí projekt služby a jeho funkce se automaticky použijí na všechny prostředky projektu v řešení .NET.NET Aspire.
- Zjišťování služby v .NET.NET Aspire
- sady SDK
- šablony
- kontroly stavu v .NET.NET Aspire
- .NET .NET Aspire telemetrie
- Vytváření odolných aplikací HTTP: Klíčové vývojové vzory