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:
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:
Ahora crear el archivo RunAvailabilityTest.csx con el contenido siguiente (Cambiando www.google.com por la url a monitorizar:
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();
}
}
No hay comentarios:
Publicar un comentario