Revisar los resultados de la prueba TrackAvailability()

En este artículo se explica cómo revisar los resultados de la prueba TrackAvailability() en Azure Portal y consultar los datos mediante Log Analytics. Las pruebas estándarsiempre deben usarse si es posible, ya que requieren poca inversión, cero mantenimiento y tienen pocos requisitos previos.

Requisitos previos

Importante

TrackAvailability() requiere un esfuerzo por parte del desarrollador en cuanto a la escritura y mantenimiento del código personalizado potencialmente complejo.

Comprobación de la disponibilidad

Empiece por revisar el gráfico en la pestaña Disponibilidad del recurso de Application Insights.

Nota

Las pruebas creadas con TrackAvailability() aparecerán con CUSTOM junto al nombre de la prueba.

Captura de pantalla que muestra la pestaña Disponibilidad con resultados correctos.

Para ver los detalles de la transacción completa, en Aumentar detalle seleccione Correcto o Erróneo. Luego, seleccione una muestra. También puede obtener los detalles de la transacción de un extremo a otro seleccionando un punto de datos en el gráfico.

Captura de pantalla que muestra la selección de una prueba de disponibilidad de ejemplo.

Captura de pantalla de detalles de una transacción de un extremo a otro.

Consulta en análisis de registros

Puede usar el análisis de registros para ver los resultados de disponibilidad, dependencias, etc. Para más información acerca del análisis de registros, visite Introducción a las consultas de registros.

Captura de pantalla que muestra los resultados de disponibilidad.

Captura de pantalla que muestra la pestaña Nueva consulta con dependencias limitadas a 50.

Ejemplo de código básico

Nota:

Este ejemplo se ha diseñado únicamente para mostrar la mecánica de cómo actúa la llamada a la API de TrackAvailability() en una función de Azure. No muestra cómo se escribe el código de prueba HTTP o la lógica de negocios subyacentes que se necesitarían para convertir esta llamada en un ejemplo de disponibilidad totalmente funcional. De forma predeterminada, si sigue este ejemplo, creará una prueba HTTP GET de disponibilidad básica.

Para seguir estas instrucciones, debe usar el plan dedicado para permitir la edición de código en Editor de App Service.

Creación de una función de desencadenador de temporizador

  1. Cree un recurso de Azure Functions.

    • Si ya tiene un recurso de Application Insights:

      • De forma predeterminada, Azure Functions crea un recurso de Application Insights. Pero si desea usar un recurso que creó anteriormente, debe especificarlo durante la creación.

      • Siga las instrucciones sobre cómo crear un recurso de Azure Functions con la modificación siguiente:

        En la pestaña Supervisión, seleccione el cuadro desplegable Application Insights e introduzca o seleccione el nombre del recurso.

        Captura de pantalla que muestra la selección del recurso de Application Insights existente en la pestaña Supervisión.

    • Si aún no tiene un recurso de Application Insights creado para la función desencadenada por el temporizador:

      • De manera predeterminada, al crear una aplicación de Azure Functions, se crea un recurso de Application Insights de forma automática. Siga las instrucciones sobre cómo crear un recurso de Azure Functions.

    Nota:

    Puede hospedar las funciones en un plan de consumo, Premium o App Service. Si está probando con una red virtual o probando puntos de conexión no públicos, deberá usar el plan Premium en lugar del plan de consumo. Seleccione el plan en la pestaña Hosting. Al crear la aplicación de funciones, asegúrese de que la versión más reciente de .NET está seleccionada.

  2. Cree una función de desencadenador de temporizador.

    1. En su aplicación de función, seleccione la pestaña Funciones.
    2. Seleccione Agregar. En el panel Agregar función, seleccione las siguientes configuraciones:
      1. Entorno de desarrollo: Desarrollar en el portal
      2. Seleccione una plantilla: Desencadenador de temporizador
    3. Seleccione Agregar para crear la función Desencadenador de temporizador.

    Captura de pantalla que muestra cómo agregar una función de desencadenador de temporizador a la aplicación de funciones.

Adición y edición de código en el editor de App Service

Vaya a la aplicación de funciones implementada y, en Herramientas de desarrollo, seleccione la pestaña Editor de App Service.

Para crear un nuevo archivo, haga clic con el botón derecho en la función de desencadenador de temporizador (por ejemplo, TimerTrigger1) y seleccione Nuevo archivo. A continuación, escriba el nombre del archivo y seleccione Introducir.

  1. Cree un archivo nuevo denominado function.proj y pegue en él el código siguiente:

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

    Captura de pantalla que muestra function.proj en el editor de App Service.

  2. Cree un archivo nuevo denominado runAvailabilityTest.csx y pegue el código siguiente:

    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. Defina la variable de REGION_NAME entorno como una ubicación de disponibilidad válida de Azure.

    Ejecute el siguiente comando en la CLI de Azure para enumerar las regiones disponibles.

    az account list-locations -o table
    
  4. Copie el código siguiente en el archivo run.csx. (Reemplace el código preexistente).

    #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(); 
        } 
    } 
    
    

Ejemplo de código de prueba web de varios pasos

Siga las mismas instrucciones anteriores y pegue el código siguiente en el archivo 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/"); 
    } 
}

Pasos siguientes