Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Microsoft.Extensions.AmbientMetadata.Application Pakiet NuGet udostępnia funkcje przechwytywania i przepływu metadanych otoczenia na poziomie aplikacji w całej aplikacji. Te metadane zawierają informacje, takie jak nazwa aplikacji, wersja, środowisko wdrażania i pierścień wdrażania, które są przydatne do wzbogacania danych telemetrycznych, rozwiązywania problemów i analizy.
Dlaczego warto używać metadanych aplikacji
Metadane aplikacji zapewniają podstawowy kontekst dotyczący uruchomionej aplikacji, który może zwiększyć czytelność:
- Wzbogacanie telemetrii: automatycznie dodaj szczegóły aplikacji do dzienników, metryk i śladów.
- Rozwiązywanie problemów: Szybko zidentyfikuj, która wersja aplikacji ma problemy.
- Identyfikacja środowiska: rozróżnianie różnych środowisk w telemetrii.
- Śledzenie wdrożenia: śledzenie problemów między różnymi pierścieniami wdrożenia lub regionami.
- Spójne metadane: Upewnij się, że wszystkie składniki w aplikacji używają tych samych wartości metadanych.
Instalowanie pakietu
Aby rozpocząć, zainstaluj 📦 pakiet NuGet Microsoft.Extensions.AmbientMetadata.Application :
dotnet add package Microsoft.Extensions.AmbientMetadata.Application
Lub, jeśli używasz zestawu .NET 10+ SDK:
dotnet package add Microsoft.Extensions.AmbientMetadata.Application
Konfigurowanie metadanych aplikacji
Metadane aplikacji można skonfigurować za pomocą systemu konfiguracji aplikacji. Pakiet domyślnie wyszukuje metadane w ambientmetadata:application sekcji konfiguracji.
Konfigurowanie przy użyciu appsettings.json
Dodaj metadane aplikacji do pliku appsettings.json :
{
"ambientmetadata": {
"application": {
"ApplicationName": "MyWebApi",
"BuildVersion": "1.0.0",
"DeploymentRing": "Production",
"EnvironmentName": "Production"
}
}
}
Konfigurowanie za pomocą programu IHostBuilder
Użyj metody rozszerzeń UseApplicationMetadata, aby zarejestrować metadane aplikacji, co automatycznie wypełnia wartości ApplicationName i EnvironmentName z IHostEnvironment.
Opcjonalnie możesz podać wartości dla BuildVersion oraz DeploymentRing za pośrednictwem pliku appsettings.json.
W poniższej tabeli przedstawiono metadane udostępniane przez dostawcę za pośrednictwem usługi IConfiguration:
| Key | Wymagane? | Skąd pochodzi wartość | Przykład wartości | Description |
|---|---|---|---|---|
ambientmetadata:application:applicationname |
yes | automatycznie z IHostEnvironment |
myApp |
Nazwa aplikacji. |
ambientmetadata:application:environmentname |
yes | automatycznie z IHostEnvironment |
Production, Development |
Środowisko, w których aplikacja jest wdrażana. |
ambientmetadata:application:buildversion |
no | skonfiguruj go w IConfiguration |
1.0.0-rc1 |
Wersja kompilacji aplikacji. |
ambientmetadata:application:deploymentring |
no | skonfiguruj go w IConfiguration |
r0, public |
Pierścień wdrażania, z którego działa aplikacja. |
var builder = Host.CreateDefaultBuilder(args)
// ApplicationName and EnvironmentName will be imported from `IHostEnvironment`.
// BuildVersion and DeploymentRing will be imported from the "appsettings.json" file.
builder.UseApplicationMetadata();
var host = builder.Build();
await host.StartAsync();
var metadataOptions = host.Services.GetRequiredService<IOptions<ApplicationMetadata>>();
var buildVersion = metadataOptions.Value.BuildVersion;
Alternatywnie możesz osiągnąć ten sam wynik co powyżej, wykonując następujące czynności:
var builder = Host.CreateApplicationBuilder()
.ConfigureAppConfiguration(static (context, builder) =>
builder.AddApplicationMetadata(context.HostingEnvironment));
builder.Services.AddApplicationMetadata(
builder.Configuration.GetSection("ambientmetadata:application")));
var host = builder.Build();
var metadataOptions = host.Services.GetRequiredService<IOptions<ApplicationMetadata>>();
var buildVersion = metadataOptions.Value.BuildVersion;
Sekcja appsettings.json może być następująca:
"AmbientMetadata": {
"Application": {
"DeploymentRing": "testring",
"BuildVersion": "1.2.3"
}
},
Konfigurowanie za pomocą IHostApplicationBuilder
W przypadku aplikacji korzystających z funkcji IHostApplicationBuilder:
var builder = Host.CreateApplicationBuilder(args)
// ApplicationName and EnvironmentName will be imported from `IHostEnvironment`.
// BuildVersion and DeploymentRing will be imported from the "appsettings.json" file.
builder.UseApplicationMetadata();
var host = builder.Build();
await host.StartAsync();
var metadataOptions = host.Services.GetRequiredService<IOptions<ApplicationMetadata>>();
var buildVersion = metadataOptions.Value.BuildVersion;
Sekcja appsettings.json może być następująca:
"AmbientMetadata": {
"Application": {
"DeploymentRing": "testring",
"BuildVersion": "1.2.3"
}
},
Uzyskiwanie dostępu do metadanych aplikacji
Po skonfigurowaniu można wstrzyknąć i użyć typu ApplicationMetadata.
using Microsoft.Extensions.AmbientMetadata;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Options;
var builder = Host.CreateApplicationBuilder(args);
builder.UseApplicationMetadata();
var host = builder.Build();
var metadata = host.Services.GetRequiredService<IOptions<ApplicationMetadata>>().Value;
Console.WriteLine($"Application: {metadata.ApplicationName}");
Console.WriteLine($"Version: {metadata.BuildVersion}");
Console.WriteLine($"Environment: {metadata.EnvironmentName}");
Console.WriteLine($"Deployment Ring: {metadata.DeploymentRing}");
await host.RunAsync();
Właściwości AplikacjaMetadata
Klasa ApplicationMetadata zawiera następujące właściwości:
| Majątek | Description |
|---|---|
ApplicationName |
Nazwa aplikacji. |
BuildVersion |
Wersja kompilacji aplikacji. |
DeploymentRing |
Pierścień wdrożenia lub etap (na przykład Canary, Production). |
EnvironmentName |
Środowisko, w którym aplikacja jest uruchomiona (na przykład Programowanie, Przemieszczanie, Produkcja). |
Użyj z logowaniem
Metadane aplikacji są szczególnie przydatne podczas wzbogacania komunikatów dziennika:
using Microsoft.Extensions.AmbientMetadata;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
var builder = Host.CreateApplicationBuilder(args);
builder.UseApplicationMetadata();
builder.Services.AddSingleton<LoggingService>();
var host = builder.Build();
var loggingService = host.Services.GetRequiredService<LoggingService>();
loggingService.LogWithMetadata();
await host.RunAsync();
public class LoggingService(
ILogger<LoggingService> logger,
IOptions<ApplicationMetadata> metadata)
{
private readonly ILogger<LoggingService> _logger = logger;
private readonly ApplicationMetadata _metadata = metadata.Value;
public void LogWithMetadata()
{
_logger.LogInformation(
"Processing request in {ApplicationName} v{Version} ({Environment})",
_metadata.ApplicationName,
_metadata.BuildVersion,
_metadata.EnvironmentName);
}
}
Sekcja konfiguracji niestandardowej
Jeśli wolisz użyć innej nazwy sekcji konfiguracji, określ ją podczas wywoływania polecenia UseApplicationMetadata<TBuilder>(TBuilder, String):
using Microsoft.Extensions.Hosting;
var builder = Host.CreateApplicationBuilder(args);
// Use custom configuration section
builder.UseApplicationMetadata("myapp:metadata");
var host = builder.Build();
await host.RunAsync();
W przypadku tej konfiguracji ustawienia będą wyglądać następująco:
{
"myapp": {
"metadata": {
"ApplicationName": "MyWebApi", // ApplicationName will be imported from `IHostEnvironment`.
"BuildVersion": "1.0.0",
"DeploymentRing": "Production",
"EnvironmentName": "Production" // EnvironmentName will be imported from `IHostEnvironment`.
}
}
}