Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Il Microsoft.Extensions.AmbientMetadata.Application pacchetto NuGet offre funzionalità per acquisire e scorrere i metadati di ambiente a livello di applicazione in tutta l'applicazione. Questi metadati includono informazioni quali il nome dell'applicazione, la versione, l'ambiente di distribuzione e l'anello di distribuzione, utili per arricchire i dati di telemetria, la risoluzione dei problemi e l'analisi.
Perché usare i metadati dell'applicazione
I metadati dell'applicazione forniscono un contesto essenziale sull'applicazione in esecuzione che può migliorare l'osservabilità:
- Arricchimento dei dati di telemetria: aggiungere automaticamente i dettagli dell'applicazione ai log, alle metriche e alle tracce.
- Risoluzione dei problemi: identificare rapidamente la versione dell'applicazione che riscontra problemi.
- Identificazione dell'ambiente: distinguere tra ambienti diversi nei dati di telemetria.
- Rilevamento della distribuzione: tenere traccia dei problemi in diversi anelli di distribuzione o aree geografiche.
- Metadati coerenti: assicurarsi che tutti i componenti dell'applicazione usino gli stessi valori di metadati.
Installare il pacchetto
Per iniziare, installare il 📦 pacchetto NuGet Microsoft.Extensions.AmbientMetadata.Application :
dotnet add package Microsoft.Extensions.AmbientMetadata.Application
Oppure, se stai utilizzando il SDK di .NET 10+
dotnet package add Microsoft.Extensions.AmbientMetadata.Application
Configurare i metadati dell'applicazione
I metadati dell'applicazione possono essere configurati tramite il sistema di configurazione dell'applicazione. Il pacchetto cerca i metadati nella ambientmetadata:application sezione di configurazione per impostazione predefinita.
Configurare con appsettings.json
Aggiungere i metadati dell'applicazione al appsettings.json file:
{
"ambientmetadata": {
"application": {
"ApplicationName": "MyWebApi",
"BuildVersion": "1.0.0",
"DeploymentRing": "Production",
"EnvironmentName": "Production"
}
}
}
Configurare con IHostBuilder
Usare il metodo delle estensioni UseApplicationMetadata per registrare i metadati dell'applicazione, che popolano automaticamente i valori ApplicationName da EnvironmentName.
Facoltativamente, è possibile specificare i valori per BuildVersion e DeploymentRing tramite il appsettings.json file .
La tabella seguente illustra i metadati resi disponibili dal provider tramite IConfiguration:
| Key | Obbligatorio? | Da dove proviene il valore | Esempio di valore | Description |
|---|---|---|---|---|
ambientmetadata:application:applicationname |
yes | automaticamente da IHostEnvironment |
myApp |
Nome dell'applicazione. |
ambientmetadata:application:environmentname |
yes | automaticamente da IHostEnvironment |
Production, Development |
L'ambiente in cui viene distribuita l'applicazione. |
ambientmetadata:application:buildversion |
no | Configurare nel IConfiguration |
1.0.0-rc1 |
Versione di compilazione dell'applicazione. |
ambientmetadata:application:deploymentring |
no | Configurare nel IConfiguration |
r0, public |
Anello di distribuzione da cui è in esecuzione l'applicazione. |
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;
In alternativa, è possibile ottenere lo stesso risultato ottenuto in precedenza eseguendo questa operazione:
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;
È possibile che il tuo appsettings.json abbia una sezione come segue:
"AmbientMetadata": {
"Application": {
"DeploymentRing": "testring",
"BuildVersion": "1.2.3"
}
}
Configurare con IHostApplicationBuilder
Per le applicazioni che usano 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;
È possibile che il tuo appsettings.json abbia una sezione come segue:
"AmbientMetadata": {
"Application": {
"DeploymentRing": "testring",
"BuildVersion": "1.2.3"
}
}
Accedere ai metadati dell'applicazione
Dopo la configurazione, è possibile inserire e usare il ApplicationMetadata tipo :
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();
Proprietà di metadati dell'applicazione
La ApplicationMetadata classe include le proprietà seguenti:
| Proprietà | Description |
|---|---|
ApplicationName |
Nome dell'applicazione. |
BuildVersion |
Versione di build dell'applicazione. |
DeploymentRing |
L'anello di distribuzione o la fase (ad esempio "Canary", "Production"). |
EnvironmentName |
Ambiente in cui è in esecuzione l'applicazione, ad esempio Sviluppo, Gestione temporanea, Produzione. |
Usare con la registrazione
I metadati dell'applicazione sono particolarmente utili per arricchire i messaggi di log:
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);
}
}
Sezione configurazione personalizzata
Se si preferisce usare un nome di sezione di configurazione diverso, specificarlo quando si chiama 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();
Con questa configurazione, le impostazioni sono simili alle seguenti:
{
"myapp": {
"metadata": {
"ApplicationName": "MyWebApi", // ApplicationName will be imported from `IHostEnvironment`.
"BuildVersion": "1.0.0",
"DeploymentRing": "Production",
"EnvironmentName": "Production" // EnvironmentName will be imported from `IHostEnvironment`.
}
}
}