Esaminare i risultati dei test di TrackAvailability()
Questo articolo illustra come esaminare i risultati del test TrackAvailability() nel portale di Azure ed eseguire query sui dati usando Log Analytics. I teststandard devono essere sempre usati se possibile in quanto richiedono poco investimento, nessuna manutenzione e hanno alcuni prerequisiti.
Prerequisiti
- Risorsa di Application Insights basata sull'area di lavoro
- Accesso al codice sorgente di un'app per le funzioni in Funzioni di Azure
- Competenze per gli sviluppatori in grado di creare codice personalizzato per TrackAvailability(), personalizzato in base alle esigenze aziendali specifiche
Importante
TrackAvailability() richiede un investimento per gli sviluppatori nella scrittura e nella maintanining di codice personalizzato potenzialmente complesso.
Verifica disponibilità
Per iniziare, esaminare il grafico nella scheda Disponibilità della risorsa di Application Insights.
Nota
I test creati con TrackAvailability()
verranno visualizzati con CUSTOM accanto al nome del test.
Per visualizzare i dettagli delle transazioni end-to-end, in Drill-into selezionare Operazione riuscita o Non riuscita. Selezionare quindi un esempio. È anche possibile accedere ai dettagli delle transazioni end-to-end selezionando un punto dati nel grafico.
Query in Log Analytics
È possibile usare Log Analytics per visualizzare i risultati di disponibilità, le dipendenze e altro ancora. Per altre informazioni su Log Analytics, vedere Panoramica delle query di log.
Esempio di codice di base
Nota
Questo esempio è progettato esclusivamente per illustrare i meccanismi di funzionamento della TrackAvailability()
chiamata API all'interno di una funzione di Azure. Non viene illustrato come scrivere il codice di test HTTP sottostante o la logica di business necessaria per trasformare questo esempio in un test di disponibilità completamente funzionale. Per impostazione predefinita, se si esegue questo esempio, si creerà un test HTTP GET di disponibilità di base.
Per seguire queste istruzioni, è necessario usare il piano dedicato per consentire la modifica del codice in servizio app Editor.
Creare una funzione trigger timer
Creare una risorsa Funzioni di Azure.
Se si dispone già di una risorsa di Application Insights:
Per impostazione predefinita, Funzioni di Azure crea una risorsa di Application Insights. Tuttavia, se si vuole usare una risorsa creata in precedenza, è necessario specificare che durante la creazione.
Seguire le istruzioni su come creare una risorsa Funzioni di Azure con la modifica seguente:
Nella scheda Monitoraggio selezionare la casella di riepilogo a discesa Application Insights e quindi immettere o selezionare il nome della risorsa.
Se non è ancora stata creata una risorsa di Application Insights per la funzione attivata dal timer:
- Per impostazione predefinita, quando si crea l'applicazione Funzioni di Azure, viene creata automaticamente una risorsa di Application Insights. Seguire le istruzioni su come creare una risorsa Funzioni di Azure.
Nota
È possibile ospitare le funzioni in un piano a consumo, Premium o servizio app. Se si esegue il test dietro una rete virtuale o si testano endpoint non pubblici, è necessario usare il piano Premium al posto del piano a consumo. Selezionare il piano nella scheda Hosting . Assicurarsi che la versione più recente di .NET sia selezionata quando si crea l'app per le funzioni.
Creare una funzione trigger timer.
- Nell'app per le funzioni selezionare la scheda Funzioni .
- Selezionare Aggiungi. Nel riquadro Aggiungi funzione selezionare le configurazioni seguenti:
- Ambiente di sviluppo: Sviluppare nel portale
- Selezionare un modello: Trigger timer
- Selezionare Aggiungi per creare la funzione trigger timer.
Aggiungere e modificare il codice nell'editor servizio app
Passare all'app per le funzioni distribuita e in Strumenti di sviluppo selezionare la scheda editor servizio app.
Per creare un nuovo file, fare clic con il pulsante destro del mouse sotto la funzione trigger timer (ad esempio TimerTrigger1) e selezionare Nuovo file. Immettere quindi il nome del file e selezionare INVIO.
Creare un nuovo file denominato function.proj e incollare il codice seguente:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netstandard2.0</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.ApplicationInsights" Version="2.15.0" /> <!-- Ensure you’re using the latest version --> </ItemGroup> </Project>
Creare un nuovo file denominato runAvailabilityTest.csx e incollare il codice seguente:
using System.Net.Http; public async static Task RunAvailabilityTestAsync(ILogger log) { using (var httpClient = new HttpClient()) { // TODO: Replace with your business logic await httpClient.GetStringAsync("https://www.bing.com/"); } }
Definire la
REGION_NAME
variabile di ambiente come posizione di disponibilità di Azure valida.Eseguire il comando seguente nell'interfaccia della riga di comando di Azure per elencare le aree disponibili.
az account list-locations -o table
Copiare il codice seguente nel file run.csx . Sostituire il codice preesistente.
#load "runAvailabilityTest.csx" using System; using System.Diagnostics; using Microsoft.ApplicationInsights; using Microsoft.ApplicationInsights.Channel; using Microsoft.ApplicationInsights.DataContracts; using Microsoft.ApplicationInsights.Extensibility; private static TelemetryClient telemetryClient; // ============================================================= // ****************** DO NOT MODIFY THIS FILE ****************** // Business logic must be implemented in RunAvailabilityTestAsync function in runAvailabilityTest.csx // If this file does not exist, please add it first // ============================================================= public async static Task Run(TimerInfo myTimer, ILogger log, ExecutionContext executionContext) { if (telemetryClient == null) { // Initializing a telemetry configuration for Application Insights based on connection string var telemetryConfiguration = new TelemetryConfiguration(); telemetryConfiguration.ConnectionString = Environment.GetEnvironmentVariable("APPLICATIONINSIGHTS_CONNECTION_STRING"); telemetryConfiguration.TelemetryChannel = new InMemoryChannel(); telemetryClient = new TelemetryClient(telemetryConfiguration); } string testName = executionContext.FunctionName; string location = Environment.GetEnvironmentVariable("REGION_NAME"); var availability = new AvailabilityTelemetry { Name = testName, RunLocation = location, Success = false, }; availability.Context.Operation.ParentId = Activity.Current.SpanId.ToString(); availability.Context.Operation.Id = Activity.Current.RootId; var stopwatch = new Stopwatch(); stopwatch.Start(); try { using (var activity = new Activity("AvailabilityContext")) { activity.Start(); availability.Id = Activity.Current.SpanId.ToString(); // Run business logic await RunAvailabilityTestAsync(log); } availability.Success = true; } catch (Exception ex) { availability.Message = ex.Message; throw; } finally { stopwatch.Stop(); availability.Duration = stopwatch.Elapsed; availability.Timestamp = DateTimeOffset.UtcNow; telemetryClient.TrackAvailability(availability); telemetryClient.Flush(); } }
Esempio di codice di test Web in più passaggi
Seguire le stesse istruzioni precedenti e invece incollare il codice seguente nel file runAvailabilityTest.csx :
using System.Net.Http;
public async static Task RunAvailabilityTestAsync(ILogger log)
{
using (var httpClient = new HttpClient())
{
// TODO: Replace with your business logic
await httpClient.GetStringAsync("https://www.bing.com/");
// TODO: Replace with your business logic for an additional monitored endpoint, and logic for additional steps as needed
await httpClient.GetStringAsync("https://www.learn.microsoft.com/");
}
}