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

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.

Captura de tela que mostra a guia Disponibilidade com resultados bem-sucedidos.

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.

Captura de tela que mostra a seleção de um teste de disponibilidade de exemplo.

Captura de tela que mostra os detalhes da transação de ponta a ponta.

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.

Captura de tela que mostra os resultados de disponibilidade.

Captura de tela que mostra a guia Nova Consulta com as dependências limitadas a 50.

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

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

        Captura de tela que mostra a seleção do recurso do Application Insights existente na guia Monitoramento.

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

  2. Crie uma função de gatilho de temporizador.

    1. No aplicativo de funções, selecione a guia Funções.
    2. Selecione Adicionar. No painel Adicionar função, selecione as seguintes configurações:
      1. Ambiente de desenvolvimento: Desenvolver no portal
      2. Selecionar um modelo: Gatilho de temporizador
    3. Selecione Adicionar para criar a função de gatilho de temporizador.

    Captura de tela que mostra como adicionar uma função de gatilho de temporizador ao aplicativo de funções.

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.

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

    Captura de tela que mostra function.proj no Editor do Serviço de Aplicativo.

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

Próximas etapas