Revisar os resultados do teste TrackAvailability()
Este artigo explica como revisar os resultados do teste TrackAvailability () no portal do Azure e consultar os dados usando o Log Analytics. Os testes padrãodevem ser sempre utilizados, se possível, pois exigem pouco investimento, nenhuma manutenção e têm poucos pré-requisitos.
Pré-requisitos
- Recurso baseado em espaço de trabalho do Application Insights
- Acesso ao código-fonte de um aplicativo de funções no Azure Functions
- Experiência do desenvolvedor capaz de criar um código personalizado para TrackAvailability(), adaptado às suas necessidades comerciais específicas
Importante
O TrackAvailability() exige que o desenvolvedor invista na criação e manutenção de um código personalizado potencialmente complexo.
Verificar a disponibilidade
Comece analisando o gráfico na guia Disponibilidade do seu recurso Application Insights.
Observação
Os testes criados com TrackAvailability()
serão exibidos com CUSTOM próximo ao nome do teste.
Para ver os detalhes da transação de ponta a ponta, em Analisar em, selecione Êxito ou Falha. Em seguida, selecione uma amostra. Você também pode obter os detalhes da transação de ponta a ponta selecionando um ponto de dados no grafo.
Consulta no Log Analytics
Você pode usar o Log Analytics para ver os resultados de disponibilidade, as dependências e muito mais. Para saber mais sobre o Log Analytics, confira Visão geral de consultas de log.
Código de exemplo básico
Observação
Este exemplo foi projetado unicamente para mostrar a você a mecânica de como a chamada à API TrackAvailability()
funciona em uma função do Azure. Ele não mostra como você escreve a lógica de negócios ou o código de teste HTTP necessário para transformar esse exemplo em um teste de disponibilidade totalmente funcional. Por padrão, se você seguir este exemplo, criará um teste de disponibilidade HTTP GET.
Para seguir estas instruções, você deve usar o plano dedicado para permitir a edição de código no Editor do Serviço de Aplicativo.
Criar uma função de gatilho de temporizador
Crie um recurso do Azure Functions.
Se você já tem um recurso do Application Insights:
Por padrão, o Azure Functions cria um recurso do Application Insights. Mas se você quiser usar um recurso criado anteriormente, especifique isso durante a criação.
Siga as instruções de como criar um recurso do Azure Functions com as seguintes modificações:
Na guia Monitoramento, selecione a caixa suspensa Application Insights e digite ou selecione o nome do recurso.
Se você ainda não tiver um recurso do Application Insights criado para a função disparada pelo temporizador:
- Por padrão, quando você o estiver criando, seu aplicativo do Azure Functions criará um recurso do Application Insights para você. Siga as instruções de como criar um recurso do Azure Functions.
Observação
Você pode hospedar suas funções em um plano de Consumo, Premium ou do Serviço de Aplicativo. Se você estiver testando por trás de uma rede virtual ou testando pontos de extremidade não públicos, precisará usar o plano Premium no lugar do plano de Consumo. Selecione seu plano na guia Hospedagem. Verifique se a versão mais recente do .NET está selecionada ao criar o aplicativo de funções.
Crie uma função de gatilho de temporizador.
- No aplicativo de funções, selecione a guia Funções.
- Selecione Adicionar. No painel Adicionar função, selecione as seguintes configurações:
- Ambiente de desenvolvimento: Desenvolver no portal
- Selecionar um modelo: Gatilho de temporizador
- Selecione Adicionar para criar a função de gatilho de temporizador.
Adicionar e editar o código no Editor do Serviço de Aplicativo
Vá até o aplicativo de funções implantado e, em Ferramentas de Desenvolvimento, selecione a guia Editor do Serviço de Aplicativo.
Para criar um arquivo, clique com o botão direito do mouse na função de gatilho de temporizador (por exemplo, TimerTrigger1) e selecione Novo Arquivo. Em seguida, insira o nome do arquivo e selecione Enter.
Crie um arquivo chamado function.proj e cole o seguinte código:
<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>
Crie um arquivo chamado runAvailabilityTest.csx e cole o seguinte código:
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/"); } }
Defina a variável de ambiente
REGION_NAME
como um local de disponibilidade válido do Azure.Execute o comando a seguir na CLI do Azure para listar regiões disponíveis.
az account list-locations -o table
Copie o código a seguir no arquivo run.csx. (Você substitui o código pré-existente.)
#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(); } }
Código de exemplo de teste na Web de várias etapas
Siga as mesmas instruções acima e cole o seguinte código no arquivo 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/");
}
}