sábado, 17 de diciembre de 2022

Test de disponibilidad sobre servicio publicado con Application insights y Functions app

 Hola, 

En esta entrada, os explicaré como crear con Azure Functions, un test de disponibilidad de una URL y/o servicio publicado. El servicio no ha estar publicado en Azure.

En primer lugar, crearemos un Function App, según veis en la captura siguiente:


En la ventana siguiente, Hosting, podremos crear el almacenamiento en el que se apoyará.

Y lo más importante, en monitoring tenéis que crear un Application Insights con el nombre de vuestro function.

A continuación, podréis crearlo.

El siguiente paso, será ir a ir a Functions en el menú de la izquierda y crear uno nuevo:


En la creación, elegiremos una plantilla del tipo "Timer trigger":


Una vez creado, vea a App Service Editor en las opciones de desarrollo, dentro del Function creado:



Allí has de crear y modificar los siguientes archivos:

En TimerTrigger1, botón derecho crear function.proj con el siguiente contenido:

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




Ahora crear el archivo RunAvailabilityTest.csx con el contenido siguiente (Cambiando www.google.com por la url a  monitorizar:

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.google.com/"); 
    } 
}

Y ahora, reemplaza el contenido de run.csx por el siguiente contenido, indicando en REGION_NAME la región desde donde quieres que se realice el sondeo a la url.


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


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

    } 

}


Ahora podrás ir a la opción Availability del application insights creado y monitorizar la disponibilidad del servicio:






No hay comentarios: