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

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.

Screenshot che mostra la scheda Disponibilità con risultati riusciti.

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.

Screenshot che mostra la selezione di un test di disponibilità di esempio.

Screenshot che mostra i dettagli delle transazioni end-to-end.

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.

Screenshot che mostra i risultati della disponibilità.

Screenshot che mostra la scheda Nuova query con dipendenze limitate a 50.

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

  1. 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.

        Screenshot che mostra la selezione della risorsa di Application Insights esistente nella scheda Monitoraggio.

    • 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.

  2. Creare una funzione trigger timer.

    1. Nell'app per le funzioni selezionare la scheda Funzioni .
    2. Selezionare Aggiungi. Nel riquadro Aggiungi funzione selezionare le configurazioni seguenti:
      1. Ambiente di sviluppo: Sviluppare nel portale
      2. Selezionare un modello: Trigger timer
    3. Selezionare Aggiungi per creare la funzione trigger timer.

    Screenshot che mostra come aggiungere una funzione trigger timer all'app per le funzioni.

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.

  1. 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> 
    

    Screenshot che mostra function.proj nell'editor servizio app.

  2. 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/"); 
        } 
    } 
    
  3. 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
    
  4. 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/"); 
    } 
}

Passaggi successivi