Esercitazione: Monitorare ed eseguire la diagnostica di un'applicazione di Service Fabric con Application Insights
Questa è la quinta di una serie di esercitazioni. Descrive la procedura per configurare il monitoraggio e la diagnostica per un'applicazione ASP.NET Core in esecuzione in un cluster di Service Fabric con Application Insights. I dati di diagnostica sono stati raccolti dall'applicazione sviluppata nella prima parte della serie di esercitazioni.
In questa esercitazione apprenderai a:
- Configurare una risorsa di Application Insights
- Aggiungere Application Insights ai servizi dell'applicazione
- Visualizzare i dati di diagnostica e la mappa delle applicazioni in Application Insights
- Aggiungere la strumentazione personalizzata all'applicazione
La serie di esercitazioni mostra come:
- Creare un'applicazione di Service Fabric .NET
- Distribuire l'applicazione in un cluster remoto
- Aggiungere un endpoint HTTPS a un servizio front-end ASP.NET Core
- Configurare l'integrazione continua e il recapito continuo con Azure Pipelines
- Configurare il monitoraggio e la diagnostica per l'applicazione (questa esercitazione).
Prerequisiti
Prima di iniziare questa esercitazione:
- Se non hai una sottoscrizione di Azure, crea un account gratuito.
- Installare Visual Studio 2019, inclusi il carico di lavoro di Sviluppo di Azure e il carico di lavoro di sviluppo ASP.NET e Web.
- Installare Service Fabric SDK.
Scaricare l'applicazione di voto di esempio
Se l'applicazione di voto di esempio non è stata creata nella prima parte di questa serie di esercitazioni, è possibile scaricarla. In una finestra di comando o del terminale, eseguire il comando seguente per clonare il repository dell'app di esempio nel computer locale:
git clone https://github.com/Azure-Samples/service-fabric-dotnet-quickstart
Configurare una risorsa di Application Insights
Application Insights è la piattaforma di gestione delle prestazioni delle applicazioni di Azure. È consigliabile usare Application Insights per il monitoraggio e la diagnostica delle applicazioni in Service Fabric.
Per creare una risorsa di Application Insights, usare il portale di Azure. Selezionare Crea una risorsa. Nel menu del portale selezionare Monitoraggio e diagnostica. Nella colonna Servizi di Azure più diffusi selezionare Application Insights e quindi scegliere Crea.
Immettere o selezionare i valori per Sottoscrizione, Gruppo di risorse e Nome. Per Area scegliere dove distribuire il cluster di Service Fabric in futuro. In questa esercitazione l'app viene distribuita in un cluster locale, quindi l'area di Azure è irrilevante. In Tipo di applicazione lasciare l’opzione Applicazione Web ASP.NET selezionata.
Dopo aver immesso o selezionato le informazioni necessarie, selezionare Crea per effettuare il provisioning della risorsa. La risorsa viene distribuita in circa un minuto.
Aggiungere Application Insights ai servizi dell'applicazione
Aprire Visual Studio 2019 usando l'opzione Esegui come amministratore (fare clic con il pulsante destro del mouse sull'icona di Visual Studio nel menu Start). Selezionare File>Apri>Progetto/Soluzione e passare all'applicazione di voto (creata nella prima parte dell'esercitazione o clonata da GitHub). Aprire Voting.sln. Se viene richiesto di ripristinare i pacchetti NuGet dell'applicazione, selezionare Sì.
Per configurare Application Insights per i servizi VotingWeb e VotingData:
Fare clic con il pulsante destro del mouse sul nome del servizio e selezionare Aggiungi>Servizi connessi>Monitoraggio con Application Insights.
Nota
A seconda del tipo di progetto, quando si fa clic con il pulsante destro del mouse sul nome del servizio, è talvolta necessario selezionare Aggiungi e quindi Application Insights Telemetry.
Seleziona Inizia.
Accedere all'account usato per la sottoscrizione di Azure e selezionare la sottoscrizione in cui è stata creata la risorsa di Application Insights. Per trovare la risorsa, in Risorsa passare a Risorsa di Application Insights esistente. Selezionare Registra per aggiungere Application Insights al servizio.
Selezionare Fine.
Nota
Assicurarsi di eseguire questi passaggi per entrambi i servizi dell'applicazione per completare la configurazione di Application Insights per l'applicazione. La stessa risorsa di Application Insights viene usata per entrambi i servizi per visualizzare le richieste in ingresso e in uscita e la comunicazione tra i servizi.
Aggiungere Microsoft.ApplicationInsights.ServiceFabric.Native NuGet ai servizi
Application Insights include due pacchetti NuGet specifici di Service Fabric che è possibile usare a seconda dello scenario. Uno viene usato con i servizi nativi di Service Fabric e l'altro con i contenitori e i file eseguibili guest. In questo caso è stato usato il pacchetto NuGet Microsoft.ApplicationInsights.ServiceFabric.Native per ottenere informazioni sul contesto del servizio. Per altre informazioni su Application Insights SDK e sui pacchetti NuGet specifici di Service Fabric, vedere Microsoft Application Insights per Service Fabric.
Per configurare il pacchetto NuGet:
In Esplora soluzioni fare clic con il pulsante destro del mouse sulla soluzione di voto e selezionare Gestisci pacchetti NuGet per la soluzione.
Nella finestra di dialogo NuGet - Soluzione selezionare Sfoglia. Selezionare la casella di controllo Includi versione preliminare.
Nota
È possibile che sia necessario installare il pacchetto Microsoft.ServiceFabric.Diagnostics.Internal nello stesso modo se non è stato preinstallato prima dell’installazione del pacchetto di Application Insights.
Cercare Microsoft.ApplicationInsights.ServiceFabric.Nativee quindi selezionare il pacchetto NuGet.
Nel riquadro destro selezionare le caselle di controllo VotingWeb e VotingData. Selezionare Installa.
Nella finestra di dialogo Anteprima modifiche selezionare OK per accettare la licenza. I pacchetti NuGet vengono aggiunti ai servizi.
A questo punto, è necessario configurare l'inizializzatore dei dati di diagnostica nei due servizi. Aprire VotingWeb.cs e VotingData.cs. Completare i passaggi seguenti in entrambi i file di codice:
Aggiungere queste due istruzioni
using
all'inizio di ogni file, dopo le istruzioniusing
esistenti :using Microsoft.ApplicationInsights.Extensibility; using Microsoft.ApplicationInsights.ServiceFabric;
In entrambi i file, nell’istruzione nidificata
return
diCreateServiceInstanceListeners()
oCreateServiceReplicaListeners()
, inConfigureServices
>services
, con gli altri servizi singleton dichiarati, aggiungere:.AddSingleton<ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext))
Questo codice aggiunge
Service Context
ai dati di diagnostica per consentire all’utente di comprendere meglio l'origine dei dati di diagnostica in Application Insights. L'istruzione nidificatareturn
in VotingWeb.cs ora è simile all'esempio seguente:return new WebHostBuilder() .UseKestrel() .ConfigureServices( services => services .AddSingleton<HttpClient>(new HttpClient()) .AddSingleton<FabricClient>(new FabricClient()) .AddSingleton<StatelessServiceContext>(serviceContext) .AddSingleton<ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext))) .UseContentRoot(Directory.GetCurrentDirectory()) .UseStartup<Startup>() .UseApplicationInsights() .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None) .UseUrls(url) .Build();
In VotingData.cs il codice è ora simile a questo esempio:
return new WebHostBuilder()
.UseKestrel()
.ConfigureServices(
services => services
.AddSingleton<StatefulServiceContext>(serviceContext)
.AddSingleton<IReliableStateManager>(this.StateManager)
.AddSingleton<ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext)))
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.UseApplicationInsights()
.UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.UseUniqueServiceUrl)
.UseUrls(url)
.Build();
Controllare attentamente che il metodo UseApplicationInsights()
venga chiamato in entrambi i file VotingWeb.cs e VotingData.cs come illustrato negli esempi.
Nota
Questa app di esempio usa HTTP per consentire ai servizi di comunicare. Se si sviluppa un'app con Servizio remoto di Service Fabric V2, aggiungere anche le righe seguenti nella stessa posizione nel codice:
ConfigureServices(services => services
...
.AddSingleton<ITelemetryModule>(new ServiceRemotingDependencyTrackingTelemetryModule())
.AddSingleton<ITelemetryModule>(new ServiceRemotingRequestTrackingTelemetryModule())
)
A questo punto, si è pronti per distribuire l'applicazione. Selezionare Start (o F5). Visual Studio compila e crea pacchetti per l'applicazione, configura il cluster locale e distribuisce l'applicazione nel cluster.
Nota
Se non è installata una versione aggiornata di .NET Core SDK, è possibile che venga generato un errore di compilazione.
Al momento della distribuzione dell’applicazione, passare a localhost:8080
, in cui è in esecuzione l'applicazione di voto di esempio a pagina singola. Votare per alcuni elementi diversi di propria scelta per creare alcuni dati e dati di diagnostica di esempio. Ad esempio, dessert.
È anche possibile rimuovere alcune delle opzioni di voto al termine dell'aggiunta di alcuni voti.
Visualizzare i dati di diagnostica e la mappa delle applicazioni in Application Insights
Nel portale di Azure, passare alla risorsa di Application Insights.
Selezionare Panoramica per tornare al riquadro di panoramica della risorsa. Selezionare Cerca per visualizzare le tracce in arrivo. Sono necessari alcuni minuti per visualizzare le tracce in Application Insights. Se non vengono visualizzate tracce, attendere un minuto e quindi selezionare il pulsante Aggiorna .
Scorrere verso il basso nella finestra di ricerca per visualizzare tutti i dati di diagnostica in ingresso inclusi in Application Insights. Per ogni azione eseguita nell'applicazione di voto dovrebbe esserci una richiesta PUT in uscita da VotingWeb (PUT Votes/Put [name]) e una richiesta PUT in ingresso da VotingData (PUT VoteData/Put [name]), seguita da una coppia di richieste GET per l'aggiornamento dei dati visualizzati. Sarà disponibile anche una traccia delle dipendenze per HTTP in localhost
perché queste richieste sono richieste HTTP. Di seguito è riportato un esempio di ciò che viene visualizzato per la modalità di aggiunta di un voto:
È possibile selezionare una traccia per visualizzare altri dettagli. Application Insights include informazioni utili sulla richiesta, inclusi i valori per Tempo di risposta e URL della richiesta. Poiché è stato aggiunto il NuGet specifico di Service Fabric, vengono restituiti anche i dati relativi all'applicazione nel contesto di un cluster di Service Fabric nella sezione Dati personalizzati. Tali dati includono il contesto del servizio, quindi è possibile visualizzare i valori PartitionID e ReplicaId dell'origine della richiesta e localizzare meglio i problemi durante la diagnosi di errori nell'applicazione.
Per passare a Mappa delle applicazioni, selezionare Mappa delle applicazioni nel menu delle risorse nel riquadro Panoramica oppure selezionare l'icona Mappa app. La mappa mostra i due servizi connessi.
Mappa delle applicazioni consente di comprendere meglio la topologia dell'applicazione, soprattutto quando si inizia ad aggiungere servizi che interagiscono tra di loro. Inoltre, offre dati di base sulle percentuali di successo delle richieste e permette di diagnosticare le richieste non riuscite per comprendere dove può essersi verificato un errore. Per altre informazioni, vedere Mappa delle applicazioni in Application Insights.
Aggiungere la strumentazione personalizzata all'applicazione
Anche se Application Insights offre dati di diagnostica predefiniti, è possibile aggiungere strumentazione personalizzata. È possibile che si necessiti di strumentazione personalizzata per esigenze aziendali o si voglia migliorare la diagnostica quando si verificano problemi nell'applicazione. È possibile inserire metriche ed eventi personalizzati usando l'API di Application Insights.
Aggiungere quindi alcuni eventi personalizzati a VoteDataController.cs (in VotingData
>Controllers
) per tenere traccia dell'aggiunta e dell'eliminazione dei voti dall'oggetto sottostante votesDictionary
:
Aggiungere
using Microsoft.ApplicationInsights;
al termine delle altre istruzioniusing
.Dichiarare un nuovo valore per
TelemetryClient
all'inizio della classe, sotto la creazione diIReliableStateManager
:private TelemetryClient telemetry = new TelemetryClient();
.Nella funzione
Put()
aggiungere un evento che conferma l'aggiunta di un voto. Aggiungeretelemetry.TrackEvent($"Added a vote for {name}");
al termine della transazione, subito prima dell'istruzione returnOkResult
.In
Delete()
è presente un valore "if/else" basato sulla condizione chevotesDictionary
contiene voti per un'opzione di voto specifica.- Aggiungere un evento che conferma l'eliminazione di un voto nell'istruzione
if
, dopoawait tx.CommitAsync()
:telemetry.TrackEvent($"Deleted votes for {name}");
- Aggiungere un evento per indicare che l'eliminazione non è stata eseguita nell'istruzione
else
, prima dell'istruzionereturn
:telemetry.TrackEvent($"Unable to delete votes for {name}, voting option not found");
- Aggiungere un evento che conferma l'eliminazione di un voto nell'istruzione
Ecco un esempio dell'aspetto delle funzioni Put()
e Delete()
dopo l'aggiunta degli eventi:
// PUT api/VoteData/name
[HttpPut("{name}")]
public async Task<IActionResult> Put(string name)
{
var votesDictionary = await this.stateManager.GetOrAddAsync<IReliableDictionary<string, int>>("counts");
using (ITransaction tx = this.stateManager.CreateTransaction())
{
await votesDictionary.AddOrUpdateAsync(tx, name, 1, (key, oldvalue) => oldvalue + 1);
await tx.CommitAsync();
}
telemetry.TrackEvent($"Added a vote for {name}");
return new OkResult();
}
// DELETE api/VoteData/name
[HttpDelete("{name}")]
public async Task<IActionResult> Delete(string name)
{
var votesDictionary = await this.stateManager.GetOrAddAsync<IReliableDictionary<string, int>>("counts");
using (ITransaction tx = this.stateManager.CreateTransaction())
{
if (await votesDictionary.ContainsKeyAsync(tx, name))
{
await votesDictionary.TryRemoveAsync(tx, name);
await tx.CommitAsync();
telemetry.TrackEvent($"Deleted votes for {name}");
return new OkResult();
}
else
{
telemetry.TrackEvent($"Unable to delete votes for {name}, voting option not found");
return new NotFoundResult();
}
}
}
Dopo aver apportato queste modifiche, selezionare Avvia nell'applicazione per compilare e distribuire la versione più recente. Al termine della distribuzione dell'applicazione, passare a localhost:8080
. Aggiungere ed eliminare alcune opzioni di voto. Quindi, tornare alla risorsa di Application Insights per visualizzare le tracce dell'esecuzione più recente (la visualizzazione delle tracce in Application Insights può richiedere da 1 a 2 minuti). Per tutti i voti aggiunti ed eliminati, viene ora generalmente visualizzata una voce per l’evento personalizzato con i dati di diagnostica delle risposte associati.
Contenuto correlato
- Altre informazioni sul monitoraggio e la diagnostica in Service Fabric.
- Esaminare l'analisi degli eventi di Service Fabric con Application Insights.
- Altre informazioni su Application Insights.